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

Red*_*har 2 groovy jenkins jenkins-pipeline

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

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

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


node ('linux3')
{
stage ('unit testing')
...........
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ste*_*ing 7

要在不同节点之间传输工作空间,请使用stash/unstash.

node('linux1') {
  stage('checkout') {
    checkout(..)
    stash 'name-of-the-stash'
  }
}
node('linux2') {
  stage('build') {
    unstash 'name-of-the-stash'
    sh 'make'
  }
}
Run Code Online (Sandbox Code Playgroud)

由于存储和释放的这种开销,以及当执行程序繁忙时(下一个节点分配与其他构建竞争)可能更长的执行时间,我不建议过多的node分配.

相反,在一个node街区内尽可能多地做.你也可以混合和匹配node { stage {..}}stage { node {..}}您的管道代码中.

按照设计(在Jenkins中,以及在连续交付的概念中),阶段不会并行执行.只有步骤的单级并行执行.

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