最开始我写的pipeline用的是groovy的脚本如下:

pipeline{
    agent any
    stages
    {
        stage("1"){
            when { expression { return A.contains("1") } }
            steps
            {
                build "1"
            }
         }
        stage("2"){
            when { expression { return A.contains("2") } }
            steps
            {
                build "2"
            }
         }
     }
  }

一直没有遇到问题,直到有一天我发现1构建报错了,导致2没有执行。
当然,如果你的需求是1报错,后续不执行,就不需要往下看了,哈哈哈。

但是我想要的是1报错,仍然继续往下执行完所有的流程,怎么办呢?
最先我查出来的解决办法是这样:

pipeline{
    agent any
    stages
    {
        stage("1"){
            when { expression { return A.contains("1") } }
            steps
            {
                catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') 
                {
                	build "1"
                }
            }
         }
        stage("2"){
            when { expression { return A.contains("2") } }
            steps
            {
                build "2"
            }
        }
     }
  }

然后我点了构建pipeline,直接执行报错了。。。
Running in Durability level: MAX_SURVIVABILITY
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 98: Invalid parameter “buildResult”, did you mean “null”? @ line 98, column 28.
catchError(buildResult: ‘SUCCESS’, stageResult: ‘FAILURE’)

WorkflowScript: 98: Invalid parameter “stageResult”, did you mean “null”? @ line 98, column 52.
Error(buildResult: ‘SUCCESS’, stageResul

提示没有"buildResult",“stageResult”
之后又是一翻搜索,找到了解决办法如下:
他是这么说的:如果要捕获build步骤的结果,则需要将其放入script块中。
然后改成了如下形式:

pipeline{
    agent any
    stages
    {
        stage("1"){
            when { expression { return A.contains("1") } }
            steps
            {
                script
                {
                	catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') 
                	{
                		build "1"
                	}
                }
            }
         }
        stage("2"){
            when { expression { return A.contains("2") } }
            steps
            {
                build "2"
            }
        }
     }
  }

再执行就不报错了,而且当1构建失败时,2仍然会继续执行直到整个流水线执行完成。

初次接触流水线,踩了很多坑,感觉要学习的东西还很多,今天也要继续加油啊!!

So keep your head up before your crown falls。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐