Я пытаюсь адаптировать несколько старых мультизадач в декларативном конвейере.
Мне бы хотелось, чтобы на каждом этапе параллельного шага в декларативном конвейере использовался собственный исполнитель.
Мне показалось, что Дженкинс использует одного и того же исполнителя для выполнения всех этапов.
pipeline {
agent { label 'macmini'}
stages() {
stage('SCM') {
steps{
//clone repo
}
}
stage('Heavy build Stage'){
parallel {
stage ("First Job"){
steps {
//do some heavy work
sleep 100
}
}
stage ("Second Job"){
steps {
//do some heavy work
sleep 100
}
}
}
}
}
}
В приведенном выше примере я хочу, чтобы на этапе («Первое задание») и («Второе задание») использовался собственный исполнитель. Но Дженкинс использует только одного исполнителя для выполнения обоих этапов ... также важно, чтобы они использовали одно и то же рабочее пространство.
Если я установлю агент / узел после каждого этапа, они будут работать в своем собственном исполнителе, но это также создаст новое рабочее пространство (my-job @ 2).
Редактировать
Просто чтобы прояснить ситуацию, я привык работать с исполнителем, чтобы сбалансировать работу между моими разными рабами. Я знаю (опытным путем), что каждый раб может выполнять 4 этапа параллельно. Эти задания запускаются веб-крючком.
Так что, если работа начнется, я получу
slave 1
1. idle
2. idle
3. (Heavy Build Stage) #1
4. idle
Если сработают еще три задания, я получу следующий сценарий
slave 1
1. (Heavy Build Stage) #2
2. (Heavy Build Stage) #3
3. (Heavy Build Stage) #1
4. (Heavy Build Stage) #4
Это означает, что у меня 8 этапов работы (2 этапа параллельно * 4 сборки)
То, что я ищу, - это способ разделить каждую стадию, чтобы использовать собственного исполнителя, поэтому я могу получить следующий сценарий
Build Queue
1. job #3
2. job #4
slave 1
1. (Heavy Build Stage / Second Jo) #2
2. (Heavy Build Stage / First job) #2
3. (Heavy Build Stage / Second Job) #1
4. (Heavy Build Stage / First job) #1
Когда я пытаюсь решить проблему установки агента / узла после каждого этапа
stage("First Job"){
agent{ label SLAVE_NAME }
...
}
Это работает, но каждый этап выполняется в своем собственном рабочем пространстве (создает новую папку с @ 2), но я бы хотел, чтобы они выполнялись в одном рабочем пространстве.
У меня такое же поведение при использовании опции customWorkspace для каждого этапа
agent {
node {
label "macmini"
customWorkspace 'teste'
}
}
Логи показывают
Running in /Users/mobile/jenkins/teste
[Pipeline] {
[Pipeline] ws
Running in /Users/mobile/jenkins/teste@2