私のJenkinsパイプラインでは、通常、post
宣言関数を使用して、パイプラインが失敗した場合にメールを送信します。
post
関数の簡単な構文は次のとおりです。
post {
failure {
mail to: '[email protected]',
subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
body: "Something is wrong with ${env.BUILD_URL}"
}
}
上記の電子メールでは、パイプラインのどのステージ(パイプラインに5〜6ステージがあるとしましょう)が失敗したかについても言及したいと思います。どうやってやるの?どんな助けも大歓迎です。
上記の要件に対する拡張機能は、失敗通知電子メールの一部として(失敗したステージの)実際のエラーログをユーザーに提供することです。
アイデアは、ユーザーがジェンキンスから障害通知を受け取ったときに、パイプラインのどの段階がエラーログとともに失敗したかを知る必要があるということです。
前もって感謝します。
使用できるenv.STAGE_NAME
という変数があります。ただし、post
ステージでenv.STAGE_NAME
を取得すると、結果はDeclarative: Post Actions
になるため、おそらく、ステージ名を別の変数に格納する必要があります。代わりに、すべてのステージの変数にステージ名を保存する必要があります。そのため、ステージが失敗すると、ジェンキンスは次のステージを続行しないため、「失敗した」ステージ名になります。
以下に例を示します。
def FAILED_STAGE
pipeline {
agent { label "master" }
stages {
stage("Stage 1") {
steps {
script {
FAILED_STAGE=env.STAGE_NAME
echo "stage 1"
}
}
}
stage("Stage 2") {
steps {
script {
FAILED_STAGE=env.STAGE_NAME
echo "stage 2"
error "failed for some reason."
}
}
}
stage("Stage 3") {
steps {
script {
FAILED_STAGE=env.STAGE_NAME
echo "stage 3"
}
}
}
}
post {
failure {
echo "Failed stage name: ${FAILED_STAGE}"
}
}
}
より良い方法があるかもしれませんが、私は今のところ見つけていません。
ログについて- JENKINS-40526 では、APIを使用してそこからログファイルを取得できますが、パイプライン内から必要なパラメーターを取得できるかどうかはわかりません。もう1つの解決策は、 emailext を使用して、ビルドログファイル全体を電子メールで送信することです。
emailext attachLog: true, body: '', compressLog: true, subject: 'Build failed.', to: '[email protected]'