当前位置: 首页 > 知识库问答 >
问题:

jenkins管道在不同阶段使用不同节点

咸昀
2023-03-14

我试图在jenkins管道中的不同节点上运行不同的阶段,比如第一阶段是签出,第二阶段是构建,第三阶段是单元测试。例如:

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

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


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

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

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

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

共有1个答案

狄鹏
2023-03-14

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

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

由于这种隐藏和取消隐藏的开销,以及在执行者忙碌时可能需要更长的执行时间(下一个节点分配与其他构建竞争),我不建议过多的节点分配。

相反,在一个节点块中尽可能多地执行操作。您还可以在管道代码中混合和匹配节点{阶段{...}}和阶段{节点{...}}

根据设计(在詹金斯,以及在连续交付的概念中),阶段不会并行执行。只有单个阶段中的步骤是并行执行的。

如果您有一个具有长时间运行任务的阶段,请使用并行步骤。本文可能有助于进一步理解这一步骤。

 类似资料:
  • 我有一个多分支管道架构的以下Jenkinsfile 我试图在Ubuntu和Red Hat节点上并行运行“构建”阶段,而仅在Ubuntu节点上运行“测试”阶段。 任何人都可以帮助我指定如何选择在哪些节点上运行哪些阶段。我在网上找到的解决方案很少,但他们建议重写构建阶段两次:一次用于Red Hat节点,另一次用于Ubuntu节点。难道没有办法在没有代码重复的情况下做到这一点吗? 非常感谢

  • 问题内容: 目标 在同一节点上运行声明性Jenkins管道的多个阶段。 安装程序 这只是显示问题的一个最小示例。有2个Windows节点“ windows-slave1”和“ windows-slave2”,均标有“ windows”标签。 注意:我真正的Jenkinsfile无法使用全局代理,因为存在需要在不同节点上运行的阶段组(例如Windows与Linux)。 预期行为 Jenkins根据标

  • 目标 在同一节点上运行声明性Jenkins管道的多个阶段。 设置 这只是说明问题的一个最小示例。有两个Windows节点“Windows-slave1”和“Windows-slave2”都标有“Windows”标签。 注意:我的real Jenkins文件不能使用全局代理,因为需要在不同的节点(例如Windows和Linux)上运行多组阶段。 预期行为 Jenkins基于标签选择阶段1中的一个节点

  • 我是JavaFX新手。我有一个加载了垂直拆分窗格的窗口。在拆分页面的左侧,我有几个按钮。每次单击按钮时,我都需要在拆分窗格的右侧加载单独的fxml。所以在这里我粘贴屏幕截图以保持清晰。 从现在开始,当搜索按钮被点击时,我在不同的阶段,不同的场景中打开。现在我需要在baselayout窗口的右侧加载Searcher。下面是一些加载baseLayout的代码。 下面是一些点击按钮时加载搜索器的代码。

  • 我正在编写一个Groovy脚本,其中包含部署terraform的作业。我正在使用作业DSL并使种子作业由JCasC实现,一切正常。然后我有一个包含作业的Groovy文件的存储库。 如果我将Groovy文件保持为单个作业,它就可以正常工作。 然而,我希望能够构建具有构建阶段的管道。我知道我可以把管道写在詹金斯文件中 我有这个作为开始: 但是,我看到了这个错误: 我已经尝试了各种方法,并阅读了一堆文档

  • 我需要在 jenkins 管道的不同阶段分配相同的节点。场景是我需要运行分布式JMeter测试,并创建一个管道,如下所示: 第1阶段:并行设置一些代理,例如获取源代码和测试,编译源代码和安装依赖项,将jmeter服务器作为守护进程运行,获取当前节点的IP地址。 阶段2:在阶段1中分配相同的节点,并使用一个节点作为JMeter主节点,在该节点中,它将阶段1中所有节点的IP地址列表传递给 JMeter