buf*_*cat 6 jenkins jenkins-pipeline
我正在尝试在Jenkins脚本化管道中运行条件步骤,但是我不确定如何仅在上一步成功的情况下运行步骤。例如,在以下情况中,如果“测试”阶段成功,我只想运行“推送工件”阶段:
node ('docker2') {
stage ('Build') {
// build application
}
stage ('Test') {
// run tests
}
stage ('Push Artifacts') {
if (Tests Were Successful) {
// push to artifactory
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道声明性管道允许您使用“后”条件,但是我对Jenkins中的声明性管道与脚本化管道的理解是,脚本化管道提供了更大的灵活性。有没有一种方法可以基于脚本管道中其他阶段的成功来运行阶段?
在詹金斯管道中没有成功步骤或失败步骤的概念。只有构建状态(成功,失败,不稳定等)
您有两种方法可以解决问题:
第一。如果测试失败(使用“错误” jenkins步骤),则可以使管道失败。例如:
stage('Build') {
// build application
}
stage('Test') {
def testResult = ... // run command executing tests
if (testResult == 'Failed') {
error "test failed"
}
}
stage('Push Artifacts') {
//push artifacts
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您的命令在测试失败时传播错误(例如“ mvn test”),则可以这样编写:
stage('Build') {
// build application
}
stage('Test') {
sh 'mvn test'
}
stage('Push Artifacts') {
}
Run Code Online (Sandbox Code Playgroud)
在这些情况下,如果测试失败,您的管道就会失败。“测试”阶段之后的任何阶段都不会执行。
第二。如果只想执行某些步骤,则应根据执行的步骤将测试结果写入变量。您可以在运行步骤之前分析该变量的值。例如:
stage('Build') {
// build application
}
boolean testPassed = true
stage('Test') {
try{
sh 'mvn test'
}catch (Exception e){
testPassed = false
}
}
stage('Push Artifacts') {
if(testPassed){
//push to artifactory
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3560 次 |
| 最近记录: |