Запускать один и тот же этап на нескольких узлах в Jenkins - PullRequest
1 голос
/ 08 июня 2019

Я следую за Jenkinsfile, где хочу запустить сцену на 3 узлах.Я использовал оператор && согласно этому ответу .

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 Ответ

3 голосов
/ 08 июня 2019

Я думаю, что вы неверно истолковали этот ответ. Вы можете ссылаться только на один узел в пределах node([...]), && позволяет объявлять несколько меток, которые jenkins будет искать при выборе подходящего узла.

Например, если у вас есть агент A с метками maven windows selenium и агент B с maven linux docker, агент C с maven gcc linux, node('maven') выберет узел A, B или C в зависимости от доступности исполнителя, которая может быть проблема, когда вы смешались в каком-то шаге sh только для Linux, поэтому вы можете использовать node('maven && linux'), чтобы заставить Дженкинса выбрать одного из последних 2 агентов, которые оба содержат эти метки.

Если вы хотите запустить один и тот же материал на нескольких узлах, вы можете зациклить массив меток узлов.

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

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