我有以下(简化)Jenkins管道代码。
jobParams.groovy
List get(Object paramVars = {}) {
def params = []
params += [
choice(
choices: ['branch', 'tag'],
name: 'RELEASE_TYPE'
),
string(
defaultValue: '',
name: 'VERSION'
),
]
return params
}
pipeline.groovy
def call() {
properties([
parameters(
jobParams.get()
)
])
pipeline {
agent { label 'deploy-slave' }
stages {
stage('Prepare') {
steps {
script {
// Do some logic here and set a job parameter?
}
}
}
}
}
}
这很好用。当管道启动时,作业参数被设置,并可用于下一次作业运行。
但是,是否也可以在管道步骤中的某些逻辑之后动态设置作业参数?
4条答案
按热度按时间ef1yzkbh1#
原来这是相当容易的!
我在我的共享管道库中创建了一个jobProperties.groovy文件,它组成参数列表并调用properties()函数。
pipeline.groovy
我认为,如果没有共享管道库,jobParams.groovy的代码也可以直接放在管道的script {} Package 器中。
ehxuflar2#
是的,但是有一些复杂性,因为
params
是一个不可变的Map。当我们想要在作业执行期间更改参数时,我们使用我们编写的共享库函数。
这可能需要管理员批准脚本。
第一个函数用于设置一个新的字符串参数,或者用一个新值更新一个已有的字符串参数。第二个和第三个作业只是为当前作业或其他作业的选择参数添加一个新选项的接口。第四个是这个选择添加逻辑的主要部分。(不直接调用)
organizationFolder基于我们使用的Github分支源插件。
ovfsdjhp3#
如上所述,paramsMap是不可变的,但是,正如所述here Jenkins还为每个构建参数创建了一个环境变量
因此,我用来覆盖构建参数的选项是使用环境变量,而不是参数Map中的值,例如:
dtcbnfnu4#
我猜你是在谈论动态地决定一个作业的下游参数。它肯定可以通过下面的代码描述的方式来完成。