Как вы можете использовать тот же самый подчиненный сервер Jenkins, который уже используется родительским заданием для дочернего задания, поскольку мы ll?

Допустим, у меня есть задание Jenkins "abc_job", которое в зависимости от определенных условий вызывает другое задание jenkins "xyz_job".

Теперь по некоторым причинам предполагается, что оба задания выполняются на одном подчиненном устройстве jenkins, что приводит к состоянию тупиковой ситуации, поскольку задание «abc_job» запускает «xyz_job», а «xyz_job» ожидает, пока «abc_job» освободит подчиненное устройство Дженкинса для него. начать работать.

Как преодолеть такой сценарий?

1
задан 13 August 2019 в 13:47
1 ответ

Есть три способа обойти это, о которых я знаю и которые я использовал в прошлом. Какой из них лучше, зависит от вашей конкретной ситуации.

  • Добавьте больше слотов исполнителя.Вы также можете поиграть с метками исполнителей и ограничить сборки определенными метками, чтобы всегда был свободный слот исполнителя для вашего последующего задания, но это сложно сделать правильно.
  • Не дожидайтесь завершения последующего задания. Запустите сборку с помощью build (wait: false, job: ...) . Родительское задание завершится немедленно, вместо того, чтобы использовать слот исполнителя, пока оно ожидает нисходящего потока. Это приводит к тому, что родительская сборка не завершится неудачно, если последующая сборка не удалась.
  • Не вызывайте build () внутри блока node {} . Код вне блока узла выполняется на мастере и не занимает слот исполнителя. Однако я считаю, что это возможно только при использовании сценариев конвейера, а не декларативного.
0
ответ дан 4 December 2019 в 02:44

Теги

Похожие вопросы