jenkins管道使用不同的节点进行不同的阶段

时间:2017-06-11 06:46:43

标签: jenkins groovy jenkins-pipeline

我正在尝试在我的jenkins管道中的不同节点上运行不同的阶段,例如第1阶段是结帐,阶段2是构建,阶段3单元测试。 例如:

node ('linux1')
{
stage ('checkout')
..........
}

node ('linux2')
{
stage ('build')
........
}


node ('linux3')
{
stage ('unit testing')
...........
}

如果我尝试这样做,我的问题是如果我在Linux1节点中签出代码,那么当签出的代码在node1中时,其他阶段如何在不同的节点中运行。

如何分发代码,如果我的理解不正确,我如何实现并行性并确保每个阶段可以并行并缩短时间。

如果可能,请建议任何用于编写Jenkins管道的groovy管道文档。

1 个答案:

答案 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中,以及在连续交付的概念中),阶段不会并行执行。只有单个阶段中的步骤并行执行。

如果您的舞台有长时间运行的任务,请使用parallel步骤。此article可能有助于进一步了解此步骤。