public static void writeSeriesFile( AbstractProject<?, ?> project, String baseDateStr, String fileName, final AbstractBuild<?, ?> shimeBuild, PrintStream out, PrintStream err) { // stdout.printf("[%s]\n", // shimeBuild.getRootDir().getAbsolutePath()); // stdout.printf("[%s]:[%s]:[%s]\n", baseDateStr, // shimeBuild.getNumber(), shimeBuild.getId()); String prevData = PMUtils.findSeriesFile(project, fileName, out, err); String currentData = PMUtils.appendData(prevData, shimeBuild.getNumber(), baseDateStr); File file = new File(shimeBuild.getRootDir().getAbsolutePath(), fileName); WriteUtils.writeFile(currentData.getBytes(), file); out.printf("EVM時系列情報ファイル(%s)に情報を追記してビルド #%s に書き込みました。\n", fileName, shimeBuild.getNumber()); out.printf("書き込み先: #%s \n", shimeBuild.getRootDir().getAbsolutePath()); }
/** * そのプロジェクトで、シメに使われたビルドの中で最新のビルドを返す。 * * @param project * @return * @throws IOException */ public static AbstractBuild<?, ?> findNewestBuild(AbstractProject project) throws IOException { String shimeFileName = PMConstants.DATE_DAT_FILENAME; AbstractBuild<?, ?> prevBuild = PMUtils.findBuild(project, shimeFileName); if (prevBuild != null) { return prevBuild; } return null; }
/** * そのビルドを含むプロジェクトの基準日ファイルをさがし、基準日を取得する。 * * @param build * @throws IOException */ public static File findBaseDateFile(AbstractProject project) throws IOException { String shimeFileName = PMConstants.DATE_DAT_FILENAME; AbstractBuild<?, ?> prevBuild = PMUtils.findBuild(project, shimeFileName); if (prevBuild != null) { File target = new File(prevBuild.getRootDir(), shimeFileName); return target; } return null; }
public static EVMViewBean getCurrentPVACEV(Job<?, ?> project) { final Run<?, ?> tb = project.getLastSuccessfulBuild(); Run<?, ?> b = project.getLastBuild(); while (b != null) { ProjectSummaryAction a = PMUtils.findActionByUrlEndsWith(b, ProjectSummaryAction.class, PMConstants.BASE); if (a != null) return a.getCurrentPVACEV(); if (b == tb) // if even the last successful build didn't produce the test // result, // that means we just don't have any tests configured. return null; b = b.getPreviousBuild(); } return null; }
/** * 渡されたプロジェクトのうち、渡されたファイルがビルドディレクトリに存在する、直近のビルドを探して、返します。 * * @param project * @param fileName * @param out * @param err * @return */ public static String findSeriesFile( AbstractProject<?, ?> project, String fileName, PrintStream out, PrintStream err) { AbstractBuild<?, ?> build = PMUtils.findBuild(project, fileName); if (build == null) { out.printf("EVM時系列情報ファイル(%s)がプロジェクト上に存在しないので、ファイルを新規作成します。\n", fileName); return null; } else { out.printf("EVM時系列情報ファイル(%s)が ビルド #%s 上に見つかりました。\n", fileName, build.getNumber()); } try { return ReadUtils.readFile(new File(build.getRootDir(), fileName)); } catch (IOException e) { err.println("EVM時系列情報ファイルを探す際にエラーが発生したので、ファイルを新規作成します。"); } return null; }
public static void checkProjectAndMail( Project project, String otherAddresses, AbstractBuild build, BuildListener listener, boolean sendAll) throws IOException { // 参考 org.jenkinsci.plugins.tokenmacro.impl.BuildUrlMacro String BUILD_URL = new StringBuilder() .append(Hudson.getInstance().getRootUrl()) .append(build.getUrl()) .toString(); String PROJECT_NAME = build.getProject().getName(); String BUILD_NUMBER = String.valueOf(build.getNumber()); String subject = String.format("%s - Build # %s のタスク", PROJECT_NAME, BUILD_NUMBER); String footer = String.format("Check console output at %s to view the results.", BUILD_URL); // ///////////////// 以下メール送信系の処理 String header = null; List<PVACEVViewBean> list = null; if (!sendAll) { list = ViewUtils.getIsCheckPVACEVViewList(project); header = "以下、期限が過ぎましたが完了していない要注意タスクです。 "; } else { list = ViewUtils.getPVACEVViewBeanList(project); header = "以下、条件に合致したタスクです。 "; } if (list.isEmpty()) { listener.getLogger().println("[EVM Tools] : 要注意タスクはありませんでした。"); return; } StringBuffer messageBuf = new StringBuffer(); messageBuf.append(header); messageBuf.append("\n"); messageBuf.append("\n"); messageBuf.append("--------------------"); messageBuf.append("\n"); messageBuf.append("担当者\tタスクID\tタスク名\t期限"); messageBuf.append("\n"); for (PVACEVViewBean bean : list) { Date scheduledEndDate = bean.getScheduledEndDate(); String endDate = "未設定"; if (scheduledEndDate != null) { endDate = DateFormatUtils.format(scheduledEndDate, "yyyy/MM/dd"); } String personInCharge = StringUtils.isEmpty(bean.getPersonInCharge()) ? "未設定" : bean.getPersonInCharge(); String line = String.format( "%s\t%s\t%s\t%s", personInCharge, bean.getTaskId(), bean.getTaskName(), endDate); messageBuf.append(line); messageBuf.append("\n"); } messageBuf.append("--------------------"); messageBuf.append("\n"); messageBuf.append("\n"); messageBuf.append(footer); String message = new String(messageBuf); listener.getLogger().println("[EVM Tools] : --- 要注意タスク--- "); listener.getLogger().println(message); listener.getLogger().println("[EVM Tools] : --- 要注意タスク--- "); DescriptorImpl descriptor = (DescriptorImpl) Jenkins.getInstance().getDescriptor(EVMToolsBuilder.class); boolean useMail = !StringUtils.isEmpty(descriptor.getAddresses()); listener.getLogger().println("[EVM Tools] メール送信する? :" + useMail); String address = StringUtils.isEmpty(otherAddresses) ? descriptor.getAddresses() : otherAddresses; listener.getLogger().println("[EVM Tools] 宛先:" + address); listener.getLogger().println("[EVM Tools] 期限切れ以外も通知?:" + sendAll); if (useMail && !StringUtils.isEmpty(address)) { String[] addresses = Utils.parseCommna(address); for (String string : addresses) { System.out.printf("[%s]\n", string); } try { if (addresses.length > 0) { PMUtils.sendMail(addresses, subject, message); } else { String errorMsg = "メール送信に失敗しました。宛先の設定がされていません"; listener.getLogger().println("[EVM Tools] " + errorMsg); throw new AbortException(errorMsg); } } catch (MessagingException e) { String errorMsg = "メール送信に失敗しました。「システムの設定」で E-mail 通知 の設定や宛先などを見直してください"; listener.getLogger().println("[EVM Tools] " + errorMsg); throw new AbortException(errorMsg); } } }