gpt4 book ai didi

Jenkins 管道在使用 catchError 后获取当前阶段状态

转载 作者:行者123 更新时间:2023-12-03 20:27:12 29 4
gpt4 key购买 nike

这是我之前问题的后续:

Set a stage status in Jenkins Pipelines

事实证明,我可以将管道保持为成功,但如果我愿意,可以通过 catchError 将单个阶段标记为不稳定。像这样:

node()
{
stage("Stage 1")
{
catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE')
{
sh 'exit 1'
}
}
}

如果我想获取管道本身的当前状态,我可以使用 currentBuild.getCurrentResult()但我没有看到 currentStage与此类似。

我有兴趣尝试在我的阶段可能看起来像这样的模式:
stage("1") {
catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {
// do stuff
}
// perhaps more catchError() blocks
if(currentStage.getCurrentResult() == "UNSTABLE") {
// do something special if we're unstable
}
}

但这会失败,因为没有 currentStage可用的。

所以基本上, catchError()很好,但我想知道如果我的舞台发生变化,我如何捕捉状态变化......有谁知道你如何从管道访问当前阶段的状态?

最佳答案

虽然目前还没有直接的方法来访问管道中阶段的结果,但您可以解决它。这是考虑到您只对 SUCCESS 感兴趣或 UNSTABLE阶段结果根据问题而不是在 FAILURE .

解决方法是在管道顶部初始化一个空映射以存储每个阶段的结果。现在,而不是 catchError()方法,使用 unstable()方法与 try-catch 块结合使用。这是因为后者不仅可以让您将结果设置为不稳定,还可以执行其他操作,例如将结果添加到 except 块中的 map 。然后你可以从你的 if 中的 map 中读取这个存储的结果。陈述。

示例

stageResults = [:]
...
stage("1") {
try {
// do stuff
// Add to map as SUCCESS on successful execution
stageResults."{STAGE_NAME}" = "SUCCESS"
} catch (Exception e) {
// Set the result and add to map as UNSTABLE on failure
unstable("[ERROR]: ${STAGE_NAME} failed!")
currentBuild.result = "SUCCESS"
stageResult."{STAGE_NAME}" = "UNSTABLE"
}
if(stageResults.find{ it.key == "{STAGE_NAME}" }?.value == "UNSTABLE") {
// do something special if we're unstable
}
}

关于Jenkins 管道在使用 catchError 后获取当前阶段状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58736150/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com