Допустим, у меня есть задание Jenkins "abc_job", которое в зависимости от определенных условий вызывает другое задание jenkins "xyz_job".
Теперь по некоторым причинам предполагается, что оба задания выполняются на одном подчиненном устройстве jenkins, что приводит к состоянию тупиковой ситуации, поскольку задание «abc_job» запускает «xyz_job», а «xyz_job» ожидает, пока «abc_job» освободит подчиненное устройство Дженкинса для него. начать работать.
Как преодолеть такой сценарий?
Есть три способа обойти это, о которых я знаю и которые я использовал в прошлом. Какой из них лучше, зависит от вашей конкретной ситуации.
build (wait: false, job: ...)
. Родительское задание завершится немедленно, вместо того, чтобы использовать слот исполнителя, пока оно ожидает нисходящего потока. Это приводит к тому, что родительская сборка не завершится неудачно, если последующая сборка не удалась. build ()
внутри блока node {}
. Код вне блока узла выполняется на мастере и не занимает слот исполнителя. Однако я считаю, что это возможно только при использовании сценариев конвейера, а не декларативного.