Примеры конвейера Jenkins для выбора другого узла Jenkins - PullRequest
0 голосов
/ 15 марта 2019

Наша установка Jenkins состоит из главных узлов и различных / выделенных рабочих узлов для выполнения заданий в среде dev, test и prod.Как мне создать сценарий конвейерного кода, который позволяет пользователям выбирать среду (возможно, из главного узла) и в зависимости от выбранной среды выполнять оставшуюся часть работы в выбранном узле?Вот моя первоначальная мысль:

stage('Select environment ') {

  script {
    def userInput = input(id: 'userInput', message: 'Merge to?',
    parameters: [[$class: 'ChoiceParameterDefinition', defaultValue: 'strDef', 
      description:'describing choices', name:'Env', choices: "dev\ntest\nprod"]
    ])

    println(userInput);  
  }
  echo "Environment here ${params.Env}" // prints null here

  stage("Build") {
    node(${params.Env}) { // schedule job based upon the environment selected earlier
      echo "My test here"
    }
  }
}

Я нахожусь на правильном пути или я должен смотреть на что-то еще?

Еще один дополнительный вопрос заключается в том, что задание выполняется на работнике.узел также требует дополнительного пользовательского ввода.Есть ли способ объединить пользовательский ввод за один раз, чтобы пользователям не предлагалось отображать несколько пользовательских экранов?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Завершено выполнение следующих действий для сценария конвейера:

Код для выбора среды может быть запущен на любом узле (будь то главный или подчиненный с запущенным агентом). Параметр может быть введен в переменную окружения: env ..

node {
  stage('Select Environment'){
    env.Env = input(id: 'userInput', message: 'Select Environment',
                    parameters: [[$class: 'ChoiceParameterDefinition', 
                    defaultValue: 'strDef', 
                    description:'describing choices', 
                    name:'Env', 
                    choices: "jen-dev-worker\njen-test-worker\njen-prod-worker"]
              ])
    println(env.Env); 
  }

  stage('Display Environment') {
    println(env.Env);  
  }
}

Следующий фрагмент кода обеспечивает выполнение сценария в среде, выбранной на последнем шаге. Требуются работники Jenkins с ярлыками: jen-dev-worker, jen-test-worker, jen-prod-worker).

node (env.Env) {
  echo "Hello world, I am running on ${env.Env}"   
}
0 голосов
/ 15 марта 2019

Если вы передаете среду в качестве параметра сборки при запуске задания и у вас есть соответствующие метки на ваших узлах, вы можете сделать что-то вроде:

agent = params.WHAT_NODE
agentLabels = "deploy && ${agent}"

pipeline {

    agent  { label agentLabels }

    ....

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...