在 Jenkins 的多个节点上运行相同的阶段

smc*_*smc 2 groovy jenkins jenkins-groovy jenkins-pipeline

我有以下 Jenkinsfile,我想在 3 个节点上运行舞台。我根据这个答案使用了 && 运算符。

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

但是我遇到了以下错误。

没有标签为“webserver&&serverex&&composeserver”的节点

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

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

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

Dom*_*art 6

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

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

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

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

for (label in labels) {
  node(label) {
    stage('Running on ' + label){
      // Do stuff
    }
  }
}
Run Code Online (Sandbox Code Playgroud)