使用 jq 将 JSON 文件值分配给 Jenkinsfile 中的变量

问题描述 投票:0回答:1

我有一个 JSON 文件,其结构如下:

{
"name":"John",
"address": "24th Avenue"
}

我试图在一个 Jenkinsfile 阶段中从这个 JSON 文件中提取地址信息,并将其分配给一个变量,并在以下步骤中使用该变量,我的代码如下:

parameters {

        string(
          name: 'json_file_location',defaultValue:"config.json")
}

stages {
    stage("read json file"){
            steps {
                sh """
                    address=jq -r '.address' ${params.json_file_location}
                """
        }
    }

    stage("print"){
            steps {
                sh """
                    echo "$address"
                """
        }
    }
}

但是上面的代码无法将

jq
结果正确分配给地址变量,我也尝试过here描述的方法。但还是不行。

jq
结果分配给变量以便我可以在不同阶段重用它的正确方法是什么?

shell jenkins
1个回答
0
投票

正如 @Benjamin W 的评论中提到的,这里的问题是您当前正在设置一个 bash shell 变量

address
但这仅在该步骤的范围内,您正在寻找的是设置一个 groovy 方法shell 步骤的 stdOut。

所以说:

address = sh (
  returnStdout: true,
  script: "jq -r '.address' ${params.json_file_location}"
).trim()

应该为你创建一个常规变量,以便你稍后可以在 Jenkinsfile 中使用。

© www.soinside.com 2019 - 2024. All rights reserved.