我有一個 Jenkins Pipeline,我在其中進行部署、運行自動化測驗,然后將結果發布到測驗管理系統。
如果部署階段失敗,我不想繼續運行測驗和發布結果階段。
如果運行測驗失敗,我仍然想繼續并將通過 失敗的測驗結果發布到測驗管理系統。
在每個階段,我想觸發相應階段失敗的電子郵件。
pipeline {
agent { label 'my-agent' }
stages {
stage('Deploy') {
steps {
// carry out deployment
}
post {
failure {
// send email that deployment failed
}
}
}
stage('Run Tests') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
// carry out run
}
}
post {
failure {
// send email that run tests failed
}
}
}
stage('Post Results') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
// post the results to the test management system
}
}
post {
failure {
// send email that posting results encountered error
}
}
}
}
}
問題:
部署和運行測驗的電子郵件觸發器作業正常。但是,當Run Tests失敗時;即使結果成功發布到測驗管理系統,控制也進入發布結果階段的失敗部分。
我嘗試將其設定buildResult為 SUCCESS 和stageResultFAILURE。但是,即使在同一階段,控制也不會進入失敗部分。
我需要進行哪些更改才能避免為Post Test失敗發送電子郵件,即使它通過但早期的Run Tests失敗了?
uj5u.com熱心網友回復:
這不是理想的解決方案。但是我通過將發布結果錯誤電子郵件觸發器從發布部分轉移到單獨的階段解決了上述問題。
后結果執行階段touch import_success最后有陳述句。只有當結果發布成功時才會執行。
發布結果錯誤電子郵件觸發階段有一個 when 子句來檢查 import_success 檔案是否存在以發送電子郵件(當 import_success 檔案不存在時觸發電子郵件)。
這是最終的管道,
pipeline {
agent { label 'my-agent' }
stages {
stage('Deploy') {
steps {
// carry out deployment
}
post {
failure {
// send email that deployment failed
}
}
}
stage('Run Tests') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
// carry out run
}
}
post {
failure {
// send email that run tests failed
}
}
}
stage('Post Results') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
// post the results to the test management system
sh 'touch import_success' // this is executed only when post results is successful
}
}
}
stage ('Post Results Error Email Trigger') {
when {
not {
expression {
fileExists 'import_success'
}
}
}
steps {
// send email that posting results encountered error
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/448426.html
