在Jenkins声明式管道中,是否有一种方法可以根据前一阶段的输出来设置该阶段的全局环境var?我希望能够基于此动态设置代理。我有一个无效的代码(如下),但这说明了我正在尝试做的事情:
pipeline {
agent { node { label 'standard' } }
stages {
stage ('first') {
steps {
sh 'MYSTRING=`myapp.py getstring`'
}
}
stage ('second') {
agent { node { label "${MYSTRING}-agent" } }
...
}
}
}
答案 0 :(得分:1)
这可以。
class Global{
static nextNode
}
pipeline {
agent { label 'standard' }
stages {
stage ('first') {
steps {
script {
Global.nextNode=sh(script: 'myapp.py getstring', returnStdout: true).trim()
}
}
}
stage ('second') {
agent { label "${Global.nextNode}-agent" }
}
}
}
但是我强烈建议您不要忘记声明性管道语法,因为它可能会导致您很快地长出白发!
以下是脚本模式下的示例。 下面的示例实际上有效,而上面的示例需要两个执行程序。在我的情况下,主节点只有一个,因此由于代理嵌套而无法工作。
node('linux') {
stage ('first') {
nextNode=sh(script: 'echo \$NODE_NAME', returnStdout: true).trim()
echo nextNode
}
}
node ("${nextNode}") {
stage ('second') {
echo nextNode
sh 'ls'
}
}