jenkins - Jenkins 声明性管道从前一阶段的输出设置全局环境变量
问题描述
在 Jenkins 声明式管道中,有没有办法根据前一阶段的输出设置一个阶段的全局环境变量?我希望能够基于此动态设置代理。我有一个不起作用的代码(如下),但这说明了我正在尝试做的事情:
pipeline {
agent { node { label 'standard' } }
stages {
stage ('first') {
steps {
sh 'MYSTRING=`myapp.py getstring`'
}
}
stage ('second') {
agent { node { label "${MYSTRING}-agent" } }
...
}
}
}
解决方案
这会奏效。
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'
}
}
推荐阅读
- excel - VBA如何按值将对象添加到数组中
- bash - 如何在 java-key-store 中检查证书链的客户端证书?
- python - 如何在具有要求和设置的现有 python 包中使用 tox
- twig - 替换 N 次出现的字符串
- azure - Azure 集成 CICD 的最佳实践
- ruby-on-rails - 将帮助文件加载到 FactoryBot 文件中会导致“无法加载此类文件”
- javascript - 是否可以在一个堆栈中实现多个队列?
- c++ - 使用四元数使用 glm 更新基于欧拉的相机
- redis - 向 Redis 集群添加更多节点时是否会产生性能成本?
- kubernetes - Kubernetes:如何防止 emptyDir 删除目录中所有预先存在的文件?