我正在尝试在我的jenkins管道中的不同节点上运行不同的阶段,例如第1阶段是结帐,阶段2是构建,阶段3单元测试。 例如:
node ('linux1')
{
stage ('checkout')
..........
}
node ('linux2')
{
stage ('build')
........
}
node ('linux3')
{
stage ('unit testing')
...........
}
如果我尝试这样做,我的问题是如果我在Linux1节点中签出代码,那么当签出的代码在node1中时,其他阶段如何在不同的节点中运行。
如何分发代码,如果我的理解不正确,我如何实现并行性并确保每个阶段可以并行并缩短时间。
如果可能,请建议任何用于编写Jenkins管道的groovy管道文档。
答案 0 :(得分:7)
要在不同节点之间传输工作空间,请使用stash
/unstash
。
node('linux1') {
stage('checkout') {
checkout(..)
stash 'name-of-the-stash'
}
}
node('linux2') {
stage('build') {
unstash 'name-of-the-stash'
sh 'make'
}
}
由于存储和取消存储的开销,以及执行程序繁忙(下一个节点分配与其他构建竞争)的执行时间可能更长,我不建议过多的node
分配。
相反,请在node
块中尽可能多地做。您还可以在管道代码中混合使用node { stage {..}}
和stage { node {..}}
。
按照设计(在Jenkins中,以及在连续交付的概念中),阶段不会并行执行。只有在单个阶段中的步骤并行执行。