Pipeline Jenkins

Для сборки и деплоя в jenkins очень удобно использовать pipeline, но если тестирование ручное (как в случае моей компании), то между тестовым стендом продакшеном нужна отмашка тестировщиков. Иногда нужно подождать 10 минут, а иногда и 12 часов.

И вот при использовании ручного подтверждения — input, если не правильно использовать может возникнуть блокирующая jenkins проблема, что потребует ребута.

Если сталкивались, то вот…

Все шаги в pipeline заносят в stage для указания имени шага, и в node, чтобы обозначить на какой ноде будет выполнятся джоба.
Если всё это совместить это выглядит так:

stage 'Build' {
 node{
  build job: 'Build', parameters: [[$class: 'GitParameterValue', name: 'version', value: "1.0"]]
 }
}
stage 'Deploy TEST' {
 node{
  build job: 'Deploy_TEST', parameters: [string(name: 'stand', value: "TEST"), string(name: 'version', value: "1.0")]
 }
}
stage 'Approve TEST' {
 node{
    input 'Approve deployment?'
 }
}
stage 'Deploy PROD' {
 node{
  build job: 'Deploy_PROD', parameters: [string(name: 'stand', value: "PROD"), string(name: 'version', value: "1.0")]
 }
}

Но увы в таком формате, если  подтверждение будет более часа-двух, то jenkins воспримет джобу как зависшую и потребует перезагрузки. Чтобы этого избежать необходимо вывести выполнение input из ноды.

Формат при котором ошибка не выскочит:

stage 'Build' {
 node{
  build job: 'Build', parameters: [[$class: 'GitParameterValue', name: 'version', value: "1.0"]] 
 }
}
stage 'Deploy TEST' {
 node{
  build job: 'Deploy_TEST', parameters: [string(name: 'stand', value: "TEST"), string(name: 'version', value: "1.0")] 
 }
}
stage 'Approve TEST' {
 input 'Approve deployment?'
}
stage 'Deploy PROD' {
 node{
  build job: 'Deploy_PROD', parameters: [string(name: 'stand', value: "PROD"), string(name: 'version', value: "1.0")] 
 }
}

Статья которая поставила всё по своим местам

7. Don’t: Use input within a node block

While you can put an input statement within a node block, you definitely shouldn’t.

  • Why? The input element pauses pipeline execution to wait for an approval — either automated or manual. Naturally these approvals could take some time. The node element, on the other hand, acquires and holds a lock on a workspace and heavy weight Jenkins executor — an expensive resource to hold onto while pausing for input.

So, create your inputs outside your nodes.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s