Jenkins Pipeline: Catch Abort from UI and Handle It Safe for dockerized agent - PullRequest
0 голосов
/ 29 мая 2020

Я выполняю задание, определенное с помощью декларативного конвейера Jenkins.

Конвейер использует агент docker в качестве рабочего, который используется для запуска terraform (планирование и применение)

Когда пользователь нажимает «прервать» или «отменить» в пользовательском интерфейсе Jenkins, конвейер завершается (SIGTERM) отправляется процессу Docker (я думаю ...).

Это приводит к отключению terraform нечисто.

Я бы хотел сделать следующее:

  • Если пользователь нажимает кнопку «Прервать» в пользовательском интерфейсе Jenkins, поймайте это до того, как какой-либо процесс будет фактически завершен
  • и вместо этого выключите конвейер другим способом (возможно, заморозьте агент или что-то более безопасное, например, отправьте отмену запущенному процессу в контейнере docker).

Я пробовал следующее:

  • try{}catch(err){}, однако это прерывает конвейер, завершая работу агента docker перед фактическим выполнением действий в catch. Так что не много пользы.

  • действие post {} для этапа, которое также просто выполняет действие post в случае ABORT, но после прерывания.

Вопрос:

Есть ли в Jenkins метод (желательно с использованием декларативного конвейера Jenkins) для обработки сигнала ABORT до того, как он будет фактически применен, и решить, прервать его или нет?

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

Заранее благодарим за любую помощь!

...