有没有办法在 Jenkinsfile 中使用声明性语法直接用于阶段/步骤的“propagate=false”?

Mas*_*eld 5 jenkins jenkins-pipeline jenkins-declarative-pipeline

您可以在构建作业上使用传播,如下所述:

https://jenkins.io/doc/pipeline/steps/pipeline-build-step/

因此,您可以使用类似的方法来防止失败的步骤导致整个构建失败:

build(job: 'example-job', propagate: false)
Run Code Online (Sandbox Code Playgroud)

有没有办法将其用于舞台或步骤?我知道我可以用 try/catch 包围它,这几乎可以按照我想要的方式工作。它确实会忽略失败的阶段并恢复构建的其余部分,但不会将阶段显示为失败。现在我将所有失败的阶段写入一个变量并在稍后的阶段输出,但这并不理想。

如果我无法抑制阶段/步骤中的传播,是否有办法使用 build() 调用来执行相同的操作?也许如果我将它移动到另一个管道并通过 build() 调用它?

任何帮助表示赞赏。

Eri*_*k B 5

catchError可以防止失败的步骤导致整个构建失败:

pipeline {
    agent any
    stages {
        stage('1') {
            steps {
                sh 'exit 0'
            }
        }
        stage('2') {
            steps {
                catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
                    sh "exit 1"
                }
            }
        }
        stage('3') {
            steps {
                sh 'exit 0'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,所有阶段都将执行,管道将成功,但阶段 2 将显示为失败:

管道示例

正如您可能已经猜到的,您可以自由选择buildResultstageResult,以防您希望它不稳定或其他任何情况。您甚至可以使构建失败并继续执行管道。

只需确保您的 Jenkins 是最新的,因为这是一个相当新的功能。


Ash*_*dal 1

目前有很多关于脚本语法的建议,但对于声明性语法支持工作正在进行中。

跟踪https://issues.jenkins-ci.org/browse/JENKINS-26522的进度,它将所有部分组合在一起以实现这一目标。它有一些有趣的位已标记为“已解决”(意味着已进行代码更改),例如https://issues.jenkins-ci.org/browse/JENKINS-49764(“允许为管道阶段定义自定义状态” )。不幸的是,我找不到对 Jenkins 变更日志中涉及的任何票证的引用,这将是有意义的,因为父票证尚未完成。

感兴趣的可能还有以下内容:https://issues.jenkins-ci.org/browse/JENKINS-45579,由于问题而重新打开。这样做的环境是: 在此输入图像描述

诚然,跟踪这项工作的工单数量令人困惑,但这可能是因为正在实现的功能有许多用例。

另一个有趣的票证是“单个管道步骤和阶段/块应该具有结果状态”,我可以找到相关的 PR: https: //github.com/jenkinsci/workflow-api-plugin/pull/63


值得注意的是,声明性管道始终被设计为固执己见,因此并不意味着支持脚本语法的一切可能。对于无法满足您需求的更复杂的工作流程和用例,脚本语法可能是唯一(也是推荐的?)选项。

对于您所说的需求,如果产生了足够的噪音,声明性管道可能会在适当的时候进行修改以支持它。