我尝试使用并行步骤进行后失败操作,但它永远不会有效。
这是我的JenkinsFile:
pipeline {
agent any
stages {
stage("test") {
steps {
withMaven(
maven: 'maven3', // Maven installation declared in the Jenkins "Global Tool Configuration"
mavenSettingsConfig: 'maven_id', // Maven settings.xml file defined with the Jenkins Config File Provider Plugin
mavenLocalRepo: '.repository') {
// Run the maven build
sh "mvn --batch-mode release:prepare -Dmaven.deploy.skip=true" --> it will always fail
}
}
}
stage("testing") {
steps {
parallel (
phase1: { sh 'echo phase1'},
phase2: { sh "echo phase2" }
)
}
}
}
post {
failure {
echo "FAIL"
}
}
}
但这里的失败后行动有点用处......我看不到任何地方。
感谢大家! 此致
答案 0 :(得分:8)
pipeline {
agent any
stages {
stage('Compile') {
steps {
catchError {
sh './gradlew compileJava --stacktrace'
}
}
post {
success {
echo 'Compile stage successful'
}
failure {
echo 'Compile stage failed'
}
}
}
/* ... other stages ... */
}
post {
success {
echo 'whole pipeline successful'
}
failure {
echo 'pipeline failed, at least one step failed'
}
}
您应该将可能失败的每一步都包装到catchError
函数中。这样做是:
build.result
设为FAILURE
... 最后一点非常重要:您的post{ }
块未被调用,因为您的整个管道在中止之后才有机会执行。
答案 1 :(得分:0)
以防万一其他人也犯了我同样的愚蠢错误,请不要忘记post
块必须位于pipeline
块内。
即这显然是有效的,但是(显然)不起作用:
pipeline {
agent { ... }
stages { ... }
}
// WRONG!
post {
always { ... }
}
这是正确的:
pipeline {
agent { ... }
stages { ... }
post {
always { ... }
}
}