2017-02-22 47 views
0

У меня есть работа с конвейером и два задания Maven, как показано ниже.Как передать параметры из задания трубопровода на работу maven в Jenkins

node { 
    def res 
    stage('Build') { 
     node('rhel6') { 
      res = build job: "Build", parameters: 
           [ 
             string(name: 'jobname', value:'master'), 
             string(name: 'val1', value: 'MyValue') 
           ] 
     } 
    } 
    stage('Deploy') { 
     node('rhel6') { 
      build job: 'Deploy', parameters: 
        [ 
          string(name: 'resName', value: "$res.buildVariables.filename") 
          string(name: 'firstVal', value: 'First_Argument') 
        ] 
     } 
    } 
} 

Как вы можете видеть из определения моего конвейера, у меня есть работа по трубопроводу и два задания, выполняемые на этапах трубопровода. Задача «Build» содержит два строковых параметра и строит.

Задание развертывания принимает один ввод из задания и сборки сборки.

1) Это правильный способ передачи параметров между этапами в трубе дженкинсов? Я использую подход, похожий на this.

2) Как параметры, сопоставленные в задании трубопровода, с параметрами в фактическом задании? Пример: В работе над конвейером выше, на этапе «Build» у меня есть имя job и val1 в качестве параметров. Как эти параметры отображаются на фактические параметры в задании сборки?

3) Как автоматизировать генерацию этого задания на конвейер из сценариев работы dsl? Я имею в виду, как создать сам этот трубопровод в Дженкинсе?

+0

Пожалуйста задать один вопрос за один раз. Не могли бы вы изменить этот вопрос, пожалуйста. – Jayan

+0

Вопросы связаны. Человек, способный ответить на него, должен уметь дать представление о оставшихся двух. В противном случае я должен дублировать один и тот же код и три раза. – SalmanKhan

ответ

2

Чтобы ответить на два ваши первые вопросы:

  1. Да, это (один из) правильный путь (ы) для передачи параметров
  2. параметров, которые вы прошли просто интерпретируются как переменные в вашей вниз по течению работы , В вашей работе Build Maven вы можете использовать только $jobname и $val1, как и для любых переменных. Кстати, вы, вероятно, хотите убедиться, что имена ваших переменных достаточно ясны, поэтому у вас нет какой-либо двусмысленности в отношении использования переменных в вашей работе Maven.

Что касается третьего вопроса, я не уверен, что вы просите, не могли бы вы предоставить дополнительную информацию, небольшой контекст и т. Д.?

В общем, я не вижу смысла создавать конвейер, который является просто оболочкой для других заданий (здесь Build and Deploy). Вы должны, вероятно, рассмотреть либо:

  • Преобразование ваших заданий Maven в конвейерный код Groovy, чтобы вы могли добавить его прямо к своей текущей работе с трубопроводом.

Что-то вроде этого:

node('rhel6') { 
    def res 
    stage('Build') { 
     // Your build step here 
     sh "${env.mvnHome}/bin/mvn install" 
    } 
    stage('Deploy') { 
     // Your deploy step here 
     sh "${env.mvnHome}/bin/mvn deploy" 
    } 
} 

Конечно, это всего лишь пример, но вы видите точку ...

  • Цепной свои две работы Maven, не создавая третью работу , Вы сделали бы это, просто добавив «Trigger параметризованная сборка» в конце вашего задания Build Maven.

Если я не хватает чего-то здесь, кажется, бессмысленно просто создать оболочку, которая не добавляет ничего ценного для вашей сборки рабочих мест/Deploy ...

+0

Спасибо за ответ. Конечно, я мог бы использовать Trigger Parameterized build, но это не служит цели, когда я использую его для нескольких уровней. Мне нужно передать параметры от самого верхнего задания до задания самого низкого уровня, если задание самого низкого уровня хочет использовать какой-то параметр. – SalmanKhan

+0

Как это отличается от передачи параметров из вашего фактического конвейера? Можете ли вы объяснить, что такое «несколько уровней», я не уверен, что понял ... вы имеете в виду, что хотите, чтобы время от времени вы могли запускать свою работу вниз, вручную? – Pom12