1 時間ごとに実行するように構成された jenkins ジョブがあります。成功ビルドのメールを 1 日 1 回だけメールで送信したい。Email-Ext は、すべての成功、失敗などについてメールを送信するオプションを提供してくれます。
3 に答える
これは古い質問であり、おそらくすでに独自の回避策を見つけているでしょうが、同様のニーズがあり、とにかく解決策を共有すると思いました. 私がやろうとしていたのは、失敗した状態のジョブの要約メールを 1 日 1 回生成することでした。これは基本的に、単一のジョブの成功レポートを 1 日 1 回送信するのと非常によく似ています。
私のソリューションでは、Email-Ext プラグインの事前送信スクリプト機能と組み合わせた Groovy ビルド ステップを使用します。上記のコメントで参照されているNabble スレッドからアイデアを得ました。Jenkins サイトのEmail-Ext Recipesも参照してください。
以下は、どのビルドが失敗したかを判断する最初の groovy スクリプトで、Execute System Groovy Scriptの下に構成されています。ビルドが成功したか失敗したかを判断するために、同様のことを行うことができます。
// List the names of jobs you want to ignore for this check
ignore = [ ]
// Find all failed and unstable jobs
failed = hudson.model.Hudson.instance.getView("All").items.findAll{ job ->
job.getDisplayName() != "Daily Jenkins Job Nag" &&
!ignore.contains(job.getDisplayName()) &&
job.isBuildable() &&
job.lastCompletedBuild &&
(job.lastCompletedBuild.result == hudson.model.Result.FAILURE ||
job.lastCompletedBuild.result == hudson.model.Result.UNSTABLE)
}
// Log the job names so the build results are legible
failed.each { job ->
println(job.getDisplayName() +
" " + job.lastCompletedBuild.result +
" at build " + job.lastCompletedBuild.number +
" (" + job.lastCompletedBuild.timestamp.format("yyyy-MM-dd'T'HH:mm ZZZZ") + ")");
}
// Return failure if there are any failed jobs
return failed.size
次に、[編集可能な電子メール通知]セクションで、失敗時に通知するように Email-Ext プラグインを設定しました。Content TypeをPlain Text (text/plain)に設定し、 Default Contentを空のままにして、Pre-send Scriptとして次を設定します。
failed = hudson.model.Hudson.instance.getView("All").items.findAll{ job ->
job.getDisplayName() != "Daily Jenkins Job Nag" &&
job.isBuildable() &&
job.lastCompletedBuild &&
(job.lastCompletedBuild.result == hudson.model.Result.FAILURE ||
job.lastCompletedBuild.result == hudson.model.Result.UNSTABLE)
}
def output = StringBuilder.newInstance()
output << "<html>\n"
output << " <body>\n"
output << "<p>Jenkins reports the following failed jobs:</p>"
output << " <ul>\n"
failed.each { job ->
url = hudson.model.Hudson.instance.rootUrl + job.url + "/" + job.lastCompletedBuild.number + "/"
output << " <li>"
output << "<a href=\"" + url + "\">" + job.displayName + "</a>"
output << " " + job.lastCompletedBuild.result
output << " at build " + job.lastCompletedBuild.number
output << " (" + job.lastCompletedBuild.timestamp.format("yyyy-MM-dd'T'HH:mm ZZZZ") + ")"
output << "</li>\n"
}
output << " </ul>\n"
output << " </body>\n"
output << "</html>"
msg.setContent(output.toString(), "text/html")
重要なのは、 MimeMessagemsg
であるオブジェクトにアクセスできることです。MIME メッセージの内容は任意に設定できます。
この場合、失敗したジョブのリストを生成していますが、あなたの場合は、1 日 1 回の成功レポートで受け取りたいメッセージです。必要に応じて、失敗したビルドだけでなく、ビルドごとに Email-Ext に結果を送信させることもできます。
前回のメールから十分な時間が経過していない場合は、メールを抑制してはどうでしょうか。正確には何が要求されたわけではありませんが、このような事前送信スクリプトは、その単純さのために検討する価値があるでしょうか?
if (build.result != hudson.model.Result.SUCCESS) {
cancel = true;
}
else {
try {
long minEmailGap = 1000 * 60 * 60 * 16; // 16 hours in milliseconds
File file = new File("/TimestampForMyJob.txt");
if (file.exists() == false) {
file.createNewFile();
}
else {
long currentTime = (new Date()).getTime();
if (file.lastModified() + minEmailGap > currentTime) {
cancel = true;
}
else {
file.setLastModified(currentTime);
}
}
}
catch(IOException e) {
// We can't tell whether the e-mail should be sent out or not, so we do nothing
// and it just gets sent anyway - probably the best we can do with this exception.
}
}
まあ、それを行うことができるプラグインはありません。Jenkins のデフォルトのメール機能は非常にシンプルで、うまく機能します。ただし、 Email-ext プラグインがあり、これはさらに多くのことができます。
まず、Email-ext を使用すると、メール通知を送信する特定のトリガーを構成できます。これは、Jenkins のデフォルトの動作と同様に、成功時または失敗時に行うことができます。しかし、最初の失敗やまだ失敗しているような、より洗練されたものがあります。これにより、Jenkins がいつ、誰に (受信者リスト、コミッターまたはリクエスター) にメールを送信するかを大幅に制御できます。私の場合、ここでの適切な構成は、Jenkins によって生成された電子メール トラフィックに大いに役立ちます。また、特定の状況で特定のメールを特定のリストに送信することもできます。
もう 1 つのオプションは、そのレベルの制御が本当に必要なく、メール トラフィックを 1 日に 1 つの要約だけに制限したい場合、メーリング リストを設定することです。ほとんどのメーリング リスト エンジンでは、すべてのメール トラフィックの毎日のダイジェストをリストに送信できます。十分なはずですが、長期的には実際に良い選択肢だとは思いません. 私は間違いなく Email-ext プラグインを試してみます。