2017-01-07 2 views
1

У меня есть три проекта трубопровода, проект-a, project-b и project-c. project-c принимает параметр. При успешном завершении проекта-a или project-b я хочу вызвать сборку проекта-c с параметром.Как вызвать параметризованную сборку на успешную сборку в Дженкинсе?

я могу сделать это в проект-а и проект-б с этим кодом в трубопроводе:

stage('trigger-project-c') { 
    def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: 'somevalue']] 
} 

Но это требует двух исполнителей. Я хочу, чтобы project-a или project-b полностью завершили работу перед запуском project-c с параметрами.

ответ

3

Ваш трубопровод, скорее всего, выглядит следующим образом:

node { 
    stage('build') { 
    // sh "make" 
    } 

    // ... 

    stage('trigger-project-c') { 
     def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: 'somevalue']] 
    } 
} 

По оборачивать все внутри node закрытия, работа по потоку project-c срабатывает рядную, без задания перед быть приостановлено/выпускает исполнитель.

Следовательно, вещи, которые по существу ничего не делают в течение длительного времени, не должны быть обернуты в шаге node, чтобы не блокировать исполнителя. Очень похожий случай, когда using the input step to wait for user feedback.

Вместо этого ваш трубопровод должен выглядеть, например. как следует, что - так сказать - лучшая практика (как вы не блокировать ваш исполнитель):

stage('build') { 
    node { 
    // sh "make" 
    } 
} 

// or 

node { 
    stage('build') { 
    // sh "make" 
    } 

    stage('unit') { 
    // sh "make" 
    } 
} // node 

// note: the following code is _not_ wrapped inside a `node` step 
stage('trigger-project-c') { 
    def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: 'somevalue']] 
} 

Там нет необходимости, чтобы обернуть build шаг в node, т.е. блокировать исполнителя для Это. Для других шагов (например, sh) выполнение конвейера вызовет ошибку и напомнит вам, что он не может быть запущен за пределами выделения node.

+0

Спасибо за объяснение, теперь имеет смысл! –

1

Добавьте параметр wait: false в этап build, чтобы продолжить выполнение трубопровода, не дожидаясь выполнения задания ниже по течению.

EDIT: это поможет, если вы не заботитесь о успехе другой последующей работы по этому конвейеру. Если вам нужно подождать, пока он не будет завершен, а затем продолжите работу над конвейером (вверх по работе), тогда см. Мой другой ответ.

+0

Следующее задание продолжает выполнение с этим, но не освобождает исполнителя для запуска следующего проекта. Поэтому, если я задал Дженкинсу только один исполнитель и запустил 'project-a', работа никогда не завершается, потому что' project-c' требует своего собственного исполнителя. –

+0

Затем вам нужно изменить порядок 'node' и' stage'. Не запускайте 'build' в закрытии' node', но внутри самого мухи-исполнителя. – StephenKing

+0

Спасибо, это прекрасно работает, я немного обеспокоен тем, что я нарушаю лучшие практики, запустив проект на мухи-исполнителе. Знаете ли вы о другом способе достижения этого без мухи-исполнителя? Наверное, я действительно ищу что-то вроде параметризованного триггерного плагина - те, которые я пробовал до сих пор, не работают. –

Смежные вопросы