Я думаю, что в проекте со свободным стилем было бы трудно реализовать ваше требование.
Конвейерный скрипт
Установите это, если вы не знаете этот плагин: Как создатьсценарий конвейера
В соответствии с этим ответом плагин конвейера позволяет писать задания, которые выполняются на нескольких подчиненных узлах, используя метки :
node('linux') {
git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'
sh "make"
step([$class: 'ArtifactArchiver', artifacts: 'build/program', fingerprint: true])
}
node('windows && amd64') {
git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'
sh "mytest.exe"
}
Я создал этот простой конвейерный сценарий и работаю (в этом примере нет метки, но вы можете его использовать):
def exitStatusInMasterNode = 'success';
node {
echo 'Hello World in node master'
echo 'status:'+exitStatusInMasterNode
exitStatusInMasterNode = 'failure'
}
node {
echo 'Hello World in node slave'
echo 'master status:'+exitStatusInMasterNode
}
переменная exitStatusInMasterNode может быть общей для всех узлов.
Таким образом, если ваш slave1 выходит из строя, вы можете установить exitStatusInMasterNode на сбой.И в начале вашего slave2 вы могли бы проверить, если exitStatusInMasterNode не выполнен, чтобы выполнить ту же сборку, но в этом ведомом устройстве.
Пример:
def exitStatusInMasterNode = 'none';
node {
try{
echo 'Hello World in Slave-1'
throw new Exception('Simulating an error')
exitStatusInMasterNode = 'success'
} catch (err) {
echo err.message
exitStatusInMasterNode = 'failure'
}
}
node {
if(exitStatusInMasterNode == 'success'){
echo 'Job in slave 1 was success. Slave-2 will not be executed'
currentBuild.result = 'SUCCESS'
return;
}
echo 'Re launch the build in Slave-2 due to failure on Slave-1'
// exec simple tasks or stages
}
Журнал смоделированной ошибки в slave1
Running on Jenkins in .../multiple_nodes
Hello World in Slave-1
Simulating an error
Running on Jenkins in .../multiple_nodes
Re launch the build in Slave-2 due to failure on Slave-1
Finished: SUCCESS
Журнал, когда в slave1 нет ошибки (прокомментируйте эту строку: выбросить новое исключение)
Running on Jenkins in .../multiple_nodes
Hello World in Slave-1
Running on Jenkins in .../multiple_nodes
Job in slave 1 was success. Slave-2 will not be executed
Finished: SUCCESS