如何解决Jenkins-如何获取共享库中定义的属性/选择字段参数
我们在共享的Jenkins库中定义了选择参数集,我从事一项工作,希望能够为其中一些创建一组排列。例如。:
在共享的dynamic_params.groovy
中:
def dev_team() {
def teams = ['backend','frontend']
return choice(name: 'team',description: 'Choose the name of the team',choices: teams)
}
def environment() {
def environments = ['prod','qa','staging']
return choice(name: 'environment',description: 'Choose an environment',choices: environments)
}
然后,我要做的就是在工作中像这样:
def envTeams = [:]
for (env in dynamic_params.environment().choices) {
for (team in dynamic_params.dev_team().choices) {
envTeams[env] = team
}
}
......
(示例被嘲笑)
但是我得到org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such field found: field
我什至还不确定dynamic_params.environment()
时我会得到什么,因为詹金斯(Jenkins)打印
@choice(name=environment,description=Choose an environment,choices=[prod,qa,staging])
(这是否意味着我要上课?)
谢谢
解决方法
根据您对choice
(双关语)的选择,我了解到您想先填充作业的参数,然后再将其呈现给用户,例如“使用参数构建”页面。
这是一个常见的陷阱:您想运行一些代码来准备一个参数,但是为了执行代码,詹金斯需要运行您的管道,这是在按下“使用参数构建”之后发生的。
您有两个选择:要么使用ActiveChoice插件,要么在主管道之前运行脚本化管道。在您的情况下,可能看起来像这样:
my_choice = ''
node('master') {
stage('prepare choices') {
println "before: my_choice is ${my_choice}"
my_choice = get_choices() // def get_choices() { return ['prod','qa','staging'] }
println "after: my_choice is ${my_choice}"
}
}
pipeline {
agent any
parameters { choice(name: 'CHOICES',choices: my_choice,description: '') }
// rest of pipeline
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。