Jaz*_*idt 2 groovy jenkins jenkins-pipeline
在带@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()
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这段代码能够正常运行,但输出结果如下:
[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
Run Code Online (Sandbox Code Playgroud)
您无法在@NonCPS
方法内部运行构建步骤.管道脚本被认为是"可序列化的",允许它们在系统故障等方面保持持久性.管道脚本使用的groovy功能的一部分是可序列化的 - 对于任何不能@NonCPS
用于执行它的事物.
实质上,您的@NonCPS
方法需要执行其业务并将数据返回到"安全"的序列化执行堆栈.
在您的特定示例代码我看不出有什么理由hello()
必须是@NonCPS
在所有-我只能假设你的真正功能是做一些更复杂.
(编辑)刚看了你的问题历史和原始剧本; 我不知道最新版本是否仍然如此,但是当我编写脚本时〜6个月前,each { thing ->
迭代不可序列化.
归档时间: |
|
查看次数: |
1696 次 |
最近记录: |