jenkins管道中的字符串插值用于评估作为参数接收的字符串

时间:2018-12-17 09:31:10

标签: jenkins groovy

我是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;
    }
   }
  }
 }
}

在这种情况下如何获得字符串插值?基本上,我希望将环境变量值替换为其占位符,并由此导出路径。 我尝试使用单引号,双引号和转义引号都无济于事。

1 个答案:

答案 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;
      }
    }
  }
}