我的Jenkins文件中有选择属性,如下所示:
properties(
[parameters([
choice(choices: ["app1", "app2"].join("\n"),
description: 'global parameter',
name: 'globalParam'),
choice(choices: ["foo", "bar", "baz"].join("\n"),
description: 'job-specific parameter',
name: 'localParam')
])
]
)
这有效,但我有多个作业(=多个Jenkisnfiles)都使用相同的globalParam
数组,因此当我想添加另一个选项(例如'app3'
)时,我必须更新每个 Jenkinsfile。
有多种方法可以在多个Jenkins文件之间共享这样的全局参数吗?
事实上,还有一些其他的全球价值观"在多个Jenkins文件中使用,所以我已经考虑过使用一个全局 YAML -file来存储这些值 - 所以我可以在readYAML
- 块中使用node{}
来填充我的变量。但我不知道是否/如何在properties()
- 块中使用此yaml。
EDIT1: 我也尝试过:
import org.yaml.snakeyaml.Yaml
def myyaml = new Yaml().load(new FileReader('../../properties.yml'))
properties( ... )
但是我得到了
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use new org.yaml.snakeyaml.Yaml
EDIT2: 根据@herm的建议,我尝试使用库插件:
import groovy.json.JsonSlurperClassic;
def propsText = libraryResource 'my/lib/properties.json'
def jsonSlurper = new JsonSlurperClassic()
def properties = jsonSlurper.parseText(propsText)
def jobEnv = 'release'
properties(
[parameters([
choice(choices: properties.params.modules.keySet().join("\n"),
description: properties.props.module.description[jobEnv],
name: 'globalParam'),
choice(choices: ["foo", "bar", "baz"].join("\n"),
description: 'job-specific parameter',
name: 'localParam')
])
]
)
我可以在Jenkins UI中看到正确的选择参数! Based on this question,我批准了JsonSlurperClassic。 但是工作仍然失败 - 没有错误消息(并且没有待批准)。 那么问题是什么?
答案 0 :(得分:0)
是的,您可以使用全局共享库插件,并在库中包含这些参数
答案 1 :(得分:0)
最后,它有效:
我在vars
文件夹中添加了一个库:
// vars/jsonParse.groovy
import groovy.json.JsonSlurperClassic;
@NonCPS
def call(def json) {
return new groovy.json.JsonSlurperClassic().parseText(json)
}
我的json文件位于resources/some/project/properties.json
我的詹金斯文件:
def propsText = libraryResource 'some/project/properties.json'
def properties = jsonParse(propsText)
def jobEnv = 'release'
properties(
[parameters([
choice(choices: properties.params.modules.keySet().join("\n"),
description: properties.props.module.description[jobEnv],
name: 'globalParam'),
choice(choices: ["foo", "bar", "baz"].join("\n"),
description: 'job-specific parameter',
name: 'localParam')
])
]
)
编辑:
可悲的是,我无法为Declarative Pipeline
解决这个问题。