首页 > 解决方案 > 在 Jenkins 的多个节点上运行同一阶段

问题描述

我有关注 Jenkinsfile,我想在 3 个节点上运行舞台。我按照这个答案使用了 && 运算符。

pipeline{
agent {
    label 'webserver && serverex && composeserver'
}
stages{
stage('run this on 3 nodes'){
      steps{
         script{
         sh 'echo $HOSTNAME'
       }
   }}
}}

但是我得到以下错误。

没有标签为“webserver&&serverex&&composeserver”的节点</p>

上面的stage是一个例子,我在同一个stage下有多个脚本。

我可以使用并行来实现这一点,但它会是重复的,因为我需要在 3 个节点上运行它。

我可以知道 AND (&&) 运算符有什么问题吗?根据链接中提到的答案,它是否从 Jenkins 中删除,因为它看起来像以前一样工作?

标签: jenkinsgroovyjenkins-pipelinejenkins-groovy

解决方案


我认为你误解了这个答案。您只能在 中引用单个节点node([...]),这&&允许您声明 jenkins 在选择适当节点时将查找的多个标签。

例如,当您有带有标签的代理 A 和带有 的maven windows selenium代理 B,带有maven linux docker的代理 C 时maven gcc linuxnode('maven')将根据执行程序的可用性选择节点 A、B 或 C,当您在某些仅 linux 的sh步骤中混合时,这可能是一个问题,因此您可以用于node('maven && linux')让詹金斯选择后两个都包含这些标签的代理之一。

如果你想在多个节点上运行相同的东西,你可以遍历一个节点标签数组。

def labels = ['label1', 'label2']

for (label in labels) {
  node(label) {
    stage('Running on ' + label){
      // Do stuff
    }
  }
}

推荐阅读