Jenkins 声明式管道条件 post 操作取决于阶段(而非管道)状态

Jenkins declarative pipeline conditional post action depending on stage (not pipeline) status

我有一个 Jenkins 声明式管道,其中某些阶段有一个 post 操作:

stage('1 unit tests') { ..... }
stage('2 other tests') {
   steps { ..... }
   post {
      success { ...... }
   }
}

似乎如果单元测试失败(构建在阶段 1 中变得不稳定),则不会执行阶段 2 的条件 post 操作。

如何确保仅在构建状态更改时才跳过 post 操作 在当前阶段?

有一些“选项”,我不知道你会喜欢或接受什么。如果跳过一个阶段;它还会跳过所有内部结构。

1: 这不是您想要的,但您可以 manipulate/mark 一个不同于其他阶段的阶段,并使用 skipStagesAfterUnstable option or catchError. For more info see this 之类的东西继续执行post。但它也可能 heavy-handed 并迫使您获得有限的结果集或导致不必要的执行。

catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE')

2:您可以将舞台移动到单独的pipeline/job,并通过此管道运行或之后触发它

3: 另一种选择可能类似于下面的 pseudo-code,但这感觉更像是一种 hack 和添加 ('global') 'state flags' 增加混乱:

failedOne = false
failedTwo = false

pipeline {
    agent any
    stages {
        stage('Test One') {
            steps {...}
            post {
                failure {
                    failedOne=true
                    postFailureOne()
                }
            }
        }
        stage('Test Two') {
            steps {...}
            post {
                failure {
                    failedTwo=true
                    postFailureTwo()
                }
            }
        }
    }
    post {
        success { .... }
        failure {
            if (!failedTwo) postFailureTwo()
        }
    }
}

void postFailureOne() { echo 'Oeps 1' }
void postFailureTwo() { echo 'Oeps 2' }