在詹金斯的多个节点上运行相同的阶段

时间:2019-06-08 07:00:34

标签: jenkins groovy jenkins-pipeline jenkins-groovy

我关注了Jenkinsfile,我想在3个节点上运行舞台。 我已经按照this answer使用了&&运算符。

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

但是我犯了以下错误。

  

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

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

我可以使用并行实现此目的,但是由于我需要在3个节点上运行它,因此它将是重复的。

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

1 个答案:

答案 0 :(得分:3)

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

例如,当您有带有标签maven windows selenium的业务代表A和具有maven linux docker的业务代表B,具有maven gcc linuxnode('maven')的业务代表C时,将选择节点A,B或C关于执行程序的可使用性,当您混入了某些仅用于Linux的sh步骤时,这可能是一个问题,因此您可以使用node('maven && linux')来让jenkins选择后两个代理之一,它们都包含这些标签

如果要在多个节点上运行相同的内容,则可以遍历一系列节点标签。

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

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