У меня есть несколько агентов узла Jenkins, включая «master», «tiering_agent1» и «cirrus».Я пытаюсь установить узел, на котором сцена выполняется с помощью параметра {}.
У меня есть этот конвейерный код
def BuildAgentLabel='tiering_agent1'
pipeline {
agent { label 'master' }
parameters {
string(
name: 'NEW_LABEL',
defaultValue: '',
description: ''
)
}
stages {
stage( 'Init') {
steps {
script {
if ( params.NEW_LABEL != '' ){
echo "Setting BuildAgentLabel to '${params.NEW_LABEL}'"
BuildAgentLabel = params.NEW_LABEL
echo "BuildAgentLabel is now '${BuildAgentLabel}'"
}
}
}
}
stage( "Build") {
agent { label BuildAgentLabel }
steps {
echo "Performing Stage '${STAGE_NAME}' on NODE '${env.NODE_NAME}'"
echo "BuildAgentLabel=${BuildAgentLabel}"
}
}
}
}
Хотя на этапе 'Init' устанавливается глобальная переменная BuildAgentLabel с другим значением (если параметрами NEW_LABEL является строка длиной> 0), этап 'Build' всегда выполняется на любом узле, для которого изначально задана инструкция def BuildAgentLabel.
Вывод на консоль прогона повторяет это:
[Pipeline] node
Running on Jenkins in ...
[Pipeline] {
.
.
.
[Pipeline] stage
[Pipeline] { (Init)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
Setting BuildAgentLabel to 'master'
[Pipeline] echo
BuildAgentLabel is now 'master'
.
.
.
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] node
Running on tiering_agent1 in /opt/jenkins-agent/workspace/ine-multibranch-test_master-RGJIAQXOIAPL7XDIJW6DOGF4KUE5KBRXCAZ7U4IUW2YOTZVQTWCA
[Pipeline] {
.
.
.
[Pipeline] {
[Pipeline] echo
Performing Stage 'Build' on NODE 'tiering_agent1'
[Pipeline] echo
BuildAgentLabel=master
.
.
.
[Pipeline] End of Pipeline
Finished: SUCCESS
Это похоже на то, что объекты stage {} создаются почти одновременно и зацепляют метку своего агента в это время, но после этого выполняется этап.
Мне бы хотелось, чтобы этап «Init» мог влиять на узел, на котором выполняется этап «Сборка», но, похоже, не может заставить его работать.Как получить желаемый результат?