gpt4 book ai didi

jenkins - @NonCPS 在第一个构建步骤后停止

转载 作者:行者123 更新时间:2023-12-04 01:41:13 24 4
gpt4 key购买 nike

@NonCPS 注释函数中,仅执行第一个 jenkins 构建步骤之前的代码。有没有人有同样的问题?我错过了什么吗?我正在使用 Jenkins LTS...只是说 (2.73.2)。

这是我的代码:

@NonCPS
def hello() {
println 'Output "hello":'
sh 'echo Hello'
println 'Output "World":'
sh 'echo World'
}

node {
stage('Test') {
hello()
}
}

我希望这段代码能正常运行,但输出如下:

[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/Sandbox/pipeline-test
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] echo
Output "hello":
[Pipeline] sh
[pipeline-test] Running shell script
+ echo Hello
Hello
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

最佳答案

您不能在 @NonCPS 方法中运行构建步骤。管道脚本被认为是“可序列化的”,允许它们在系统故障等情况下持久存在。只有管道脚本使用的 groovy 功能​​的一个子集是可序列化的 - 对于任何不可序列化的,您使用 @NonCPS执行它。

本质上,您的@NonCPS 方法需要执行其业务并将数据返回到“安全”的序列化执行堆栈。

在您的特定示例代码中,我完全看不出为什么 hello() 必须是 @NonCPS - 我只能假设您的实际功能正在做一些更复杂的事情.

(编辑)刚刚查看了您的问题历史记录和原始脚本;我不知道最新版本是否仍然如此,但是当我大约 6 个月前编写我们的脚本时,each { thing -> 迭代不可序列化。

关于jenkins - @NonCPS 在第一个构建步骤后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46705985/

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