问题

       Jenkins的pipeline可以分步骤运行,但是正常运行的情况下,如果有一个错误了,将不会继续运行下面的任务,这样导致了,前面的第一个任务报错了,后面的所有任务都不知道是什么状态,所以如果说一次想看到所有任务的状态的话,这样肯定是不行的,下面是我的解决方法

解决方法

      首先大家应该知道,script 里面可以通过 catchError 来捕捉错误,那样我们只要在里面加入 catchError 就可以避免错误了,但是咱们最后的还需要看到任务的状态,所以下面就是任务状态的解决办法

script 中有 buildResult stageResult 两种记录状态的变量

buildResult是针对整个Stages过程而言,stageResult是针对该Stage而言,而无论buildResult还是stageResult他们都有以下状态

状态名含义
always不论当前状态是什么,都执行
changed只要当前完成状态与上一次完成状态不同就执行
fixed上一次完成状态为失败或者不稳定,当前完成状态为成功时执行
regression 上一次完成状态为成功,当前完成状态为失败、不稳定或中止时执行
aborted当前执行结果是中止状态时(一般为人为中止)执行
failure 当前完成状态为失败时执行
success当前完成状态为成功时执行
unstable当前完成状态为不稳定时执行
cleanup清理条件块,无论当前完成状态是什么,在其他所有条件块执行完成后都执行

那么咱们就可以在 script 里面更改两种状态来表示stage 和 stages 的状态,如下我的代码

    stage('native-lib') {
            steps {
                  script {
                      catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') 
                	{
                        sh '''
                            cd wamr-internal-test/tests/test_samples
                            python3 run.py --name native-lib
                            
                        '''
                	}
                  }
            }
        }
        
        stage('gui') {
            steps {
                  script {
                      catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') 
                	{
                        sh '''
                            cd wamr-internal-test/tests/test_samples
                            python3 run.py --name gui
                        '''
                	}
                  }
            }
        }
        

这样的话任务执行状态如图所示

 子任务执行报错后,继续执行下面的子任务,总任务状态只要有一个报错的任务,就是红色失败状态

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐