问题
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
'''
}
}
}
}
这样的话任务执行状态如图所示
子任务执行报错后,继续执行下面的子任务,总任务状态只要有一个报错的任务,就是红色失败状态