Jenkins工作流程:基于工具输出的并行化步骤

我想根据测试工具的输出来并行化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

虽然我希望得到如下结果:

node {

stage name: 'stage one'

echo 'one'

},

node {

stage name: 'stage two'

echo 'two'

},

node {

stage name: 'stage three'

echo 'three'

}

我将所有三个节点定义为 三个 -如以下输出所示(请注意重复的输出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

为什么会这样呢?这是中的另一个错误workflow-cps,还是我出了点问题?该 平行

例如不访问任何变量。

回答:

尝试 def instance_name = instances.get(i)

没有它,就像您只是对 instance_name 的引用一样,该引用在循环后以 3 结尾。那样是同一对象。

结果:

[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

在此处和此处阅读有关可变范围和绑定机制的内容。

以上是 Jenkins工作流程:基于工具输出的并行化步骤 的全部内容, 来源链接: utcz.com/qa/405300.html

回到顶部