gpt4 book ai didi

Jenkins 共享库,CpsCallableInvocation

转载 作者:行者123 更新时间:2023-12-04 01:23:48 25 4
gpt4 key购买 nike

我正在尝试为 Jenkins 创建一个共享库。

我尝试创建一个脚本来通过 Teams 发送通知,这是代码:

def call(String buildStatus = null, String webook) {
def status
def color

switch(buildStatus) {
case { null || "SUCCESS" }:
status = "Success"
color = "Green"
break
case "FAILED":
status = "Failed"
color = "Red"
break
default:
status = null
color = null
}

println(status + " " + color)
}

问题是,如果我尝试在我的管道中运行它,我会得到这个异常:

Error when executing always post condition:
CpsCallableInvocation{methodName=call, call=com.cloudbees.groovy.cps.impl.CpsClosureDef@1ba818f1, receiver=org.jenkinsci.plugins.workflow.cps.CpsClosure2@22438c5c, arguments=[SUCCESS]}

这是我正在测试的管道:

pipeline{
agent{
label 'linux'
}

stages{
stage('Build') {
steps{
...snip...
}
}

}
post {
always {
notifyTeams(currentBuild.result, "XXXXX")
}
}

}

我做错了什么?谢谢!

最佳答案

问题是由switch 语句中使用的闭包引起的。 Jenkins 将每个闭包转换为 CPS 转换的闭包,这与常规的 Groovy 闭包不同。在多个用例中,使用 CPS 转换的闭包会导致意外错误。我想这个用例还没有记录,最接近你的是 using closure inside the GString one .

有两种方法可以解决。首先,您可以用常规值替换 switch 语句中的闭包,例如:

def call(String buildStatus = null, String webook) {
def status
def color

switch(buildStatus) {
case null:
status = "Success"
color = "Green"
break
case "SUCCESS":
status = "Success"
color = "Green"
break
case "FAILED":
status = "Failed"
color = "Red"
break
default:
status = null
color = null
}

println(status + " " + color)
}

或者,如果你想在 switch 语句中使用闭包,你需要将 switch block 提取到一个单独的方法中,用 @NonCPS 注释。这是 groovy-cps 不转换此方法内的代码的说明。 (您可以使用 @NonCPS 注释 call 方法,但是,如果您打算在其中使用流水线步骤,它将无法工作。流水线步骤必须在cps 模式。)

def call(String buildStatus = null, String webook) {
def (status, color) = switchBuildStatusAndColor(buildStatus)

println(status + " " + color)
}

@NonCPS
private static switchBuildStatusAndColor(String buildStatus) {
switch (buildStatus) {
case { null || "SUCCESS" }:
return ["Success", "Green"]

case "FAILED":
return ["Failed", "Red"]
}

return [null, null]
}

关于Jenkins 共享库,CpsCallableInvocation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62210311/

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