Ste*_*ing 4 groovy jenkins jenkins-pipeline
我想根据测试工具的输出并行化Jenkins阶段.但是,我遇到了一个问题,因为所有并行节点都得到了相同的定义(除了jenkins-workflow插件中当前损坏的循环).修剪工作流脚本示例:
instances = ["one", "two", "three"]
print "Testing instances: " + instances
test_nodes = [:]
for (int i = 0; i < instances.size(); i++) {
instance_name = instances.get(i)
println "Processing instance " + instance_name
test_nodes["tk-${instance_name}"] = {
node {
stage name: ('stage ' + instance_name)
echo instance_name
}
}
}
echo "test_nodes: ${test_nodes}"
parallel test_nodes
Run Code Online (Sandbox Code Playgroud)
虽然我期望得到如下结果:
node {
stage name: 'stage one'
echo 'one'
},
node {
stage name: 'stage two'
echo 'two'
},
node {
stage name: 'stage three'
echo 'three'
}
Run Code Online (Sandbox Code Playgroud)
我将所有三个节点定义为三个 - 在下面的输出中可以看到(注意重复输出three):
[Pipeline] echo
Testing instances: [one, two, three]
[Pipeline] echo
Processing instance one
[Pipeline] echo
Processing instance two
[Pipeline] echo
Processing instance three
[Pipeline] echo
test_nodes: [tk-one:org.jenkinsci.plugins.workflow.cps.CpsClosure2@3febb2f8, tk-two:org.jenkinsci.plugins.workflow.cps.CpsClosure2@b32d891, tk-three:org.jenkinsci.plugins.workflow.cps.CpsClosure2@37281d55]
[Pipeline] Execute in parallel : Start
[Pipeline] [tk-one] parallel { (Branch: tk-one)
[Pipeline] [tk-two] parallel { (Branch: tk-two)
[Pipeline] [tk-three] parallel { (Branch: tk-three)
[Pipeline] [tk-one] Allocate node : Start
[tk-one] Running on master in /var/lib/jenkins/jobs/cookbook-pipeline-cookbook-site-mstypo3org/workspace
[Pipeline] [tk-two] Allocate node : Start
[tk-two] Running on master in /var/lib/jenkins/jobs/cookbook-pipeline-cookbook-site-mstypo3org/workspace@2
[Pipeline] [tk-three] Allocate node : Start
[tk-three] Running on master in /var/lib/jenkins/jobs/cookbook-pipeline-cookbook-site-mstypo3org/workspace@3
[Pipeline] [tk-one] node {
[Pipeline] [tk-two] node {
[Pipeline] [tk-three] node {
[Pipeline] [tk-one] echo
[tk-one] three
[Pipeline] } //node
[Pipeline] [tk-two] echo
[tk-two] three
[Pipeline] } //node
[Pipeline] [tk-three] echo
[tk-three] three
[Pipeline] } //node
[Pipeline] Allocate node : End
[Pipeline] Allocate node : End
[Pipeline] Allocate node : End
[Pipeline] } //parallel
[Pipeline] } //parallel
[Pipeline] } //parallel
[Pipeline] Execute in parallel : End
[Pipeline] End of Pipeline
Run Code Online (Sandbox Code Playgroud)
为什么会这样?这是另一个错误workflow-cps,还是我弄错了?该平行例如不访问任何变量.
尝试 def instance_name = instances.get(i)
没有它,它就像你只是引用了instance_name,它在循环之后最终变为三.它的方式与此相同..
结果:
[Pipeline] echo
Testing instances: [one, two, three]
[Pipeline] echo
Processing instance one
[Pipeline] echo
Processing instance two
[Pipeline] echo
Processing instance three
[Pipeline] echo
test_nodes: [tk-one:org.jenkinsci.plugins.workflow.cps.CpsClosure2@4cb28325, tk-two:org.jenkinsci.plugins.workflow.cps.CpsClosure2@5bc01979, tk-three:org.jenkinsci.plugins.workflow.cps.CpsClosure2@20c885fe]
[Pipeline] Execute in parallel : Start
[Pipeline] [tk-one] parallel { (Branch: tk-one)
[Pipeline] [tk-two] parallel { (Branch: tk-two)
[Pipeline] [tk-three] parallel { (Branch: tk-three)
[Pipeline] [tk-one] Allocate node : Start
[tk-one] Running on master in /var/lib/jenkins/jobs/pipeline/workspace
[Pipeline] [tk-two] Allocate node : Start
[tk-two] Running on master in /var/lib/jenkins/jobs/pipeline/workspace@2
[Pipeline] [tk-three] Allocate node : Start
[Pipeline] [tk-one] node {
[Pipeline] [tk-two] node {
[tk-three] Running on master in /var/lib/jenkins/jobs/pipeline/workspace
[Pipeline] [tk-one] stage (stage one)
[tk-one] Entering stage stage one
[tk-one] Proceeding
[Pipeline] [tk-one] echo
[tk-one] one
[Pipeline] } //node
[Pipeline] [tk-two] stage (stage two)
[tk-two] Entering stage stage two
[tk-two] Proceeding
[Pipeline] [tk-two] echo
[tk-two] two
[Pipeline] } //node
[Pipeline] Allocate node : End
[Pipeline] [tk-three] node {
[Pipeline] Allocate node : End
[Pipeline] } //parallel
[Pipeline] } //parallel
[Pipeline] [tk-three] stage (stage three)
[tk-three] Entering stage stage three
[tk-three] Proceeding
[Pipeline] [tk-three] echo
[tk-three] three
[Pipeline] } //node
[Pipeline] Allocate node : End
[Pipeline] } //parallel
[Pipeline] Execute in parallel : End
[Pipeline] End of Pipeline
Finished: SUCCESS
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |