我是jenkins / groovy的新手,在字符串插值时迷失了。
我们正在尝试从配置文件(以json格式存储)中读取步骤列表,并在jenkins管道脚本中基于该文件执行一些操作。
配置文件:
{
"actions": [ {
"operation": "create",
"args": [
{ "path": "${env.SVNRoot}\\trunk\\ABC" },
{ "path": "${env.SVNRoot}\\trunk\\XYZ" }
]
}, {
"operation": "delete",
"args": [
{ "path": "${env.SVNRoot}\\trunk\\ABC" },
{ "path": "${env.SVNRoot}\\trunk\\XYZ" }
]
}
] }
Jenkins管道代码:
node('master') {
echo "${env.SVNRoot}" //String interpolation works here, giving the right value
stage('ReadConfig'){
cfg = readJSON file: 'Cfg.json'
}
stage('ExecuteConfigActions'){
cfg.fileActions.each() {
switch(it.operation) {
case 'create':
it.args.each() {
echo it.path //String interpolation doesnt work here
break;
default:
break;
}
}
}
}
}
在这种情况下如何获得字符串插值?基本上,我希望将环境变量值替换为其占位符,并由此导出路径。 我尝试使用单引号,双引号和转义引号都无济于事。
答案 0 :(得分:0)
我所建议的最接近的方法是制定一个sprintf语句,该语句存储在配置文件中并在您的管道中进行评估。如果有人能够使用配置文件并替换他们想要的任何东西,后果自负。如果您需要在配置文件中指定哪个环境变量并仍然评估插值,请查看以下答案:evaluating a groovy string expression at runtime
配置文件:
{
"actions": [ {
"operation": "create",
"args": [
{ "path": "%s\\trunk\\ABC" },
{ "path": "%s\\trunk\\XYZ" }
]
}, {
"operation": "delete",
"args": [
{ "path": "%s\\trunk\\ABC" },
{ "path": "%s\\trunk\\XYZ" }
]
}
] }
管道代码:
node('master') {
echo "${env.SVNRoot}" //String interpolation works here, giving the right value
stage('ReadConfig'){
cfg = readJSON file: 'Cfg.json'
}
stage('ExecuteConfigActions'){
cfg.fileActions.each() {
switch(it.operation) {
case 'create':
it.args.each() {
echo sprintf(it.path,env.SVNRoot)
}
break;
default:
break;
}
}
}
}