gpt4 book ai didi

jenkins - 使用 groovy 解析 Jenkin 的 shell 脚本中的 JSON 对象

转载 作者:行者123 更新时间:2023-12-02 19:31:53 28 4
gpt4 key购买 nike

假设我有一个如下的 JSON:

{"id":"1.0.0-6",
"version":"1.0.0",
"build":6,
"tag":"android-v1.0.0-6",
"commitHash":"5a78c4665xxxxxxxxxxe1b62c682f84",
"dateCreated":"2020-03-02T08:11:29.912Z"}

我想从 Jenkins Groovy 文件中取出版本 ID,并将版本 ID 传递给名为 XRAY 的 JIRA 插件,以便它将在 JIRA 中创建一个构建版本作为标签。

stage('Get App version') {
steps {
container('devicefarm') {
steps {
sh "LATEST_VERSION=$(curl ${APP_ARTIFACTORY_URL}/${XRAY_PLATFORM}/builds/latest.json | sed \"s/.*$VERSION_KEY\":\"\\([^\"]*\\).*/'\\1'/\")"
}
}
}
}
environment {
AWS_DEFAULT_REGION = 'uk-xxx'
XRAY_ENVIRONMENT = 'e2e'
VERSION_KEY = 'id'
XRAY_PLATFORM = 'Android'
APP_ARTIFACTORY_URL = 'https://artifactory.example.com/mobile'
LATEST_VERSION = ''
}

我有两个问题,curl 命令的结果是否会按预期分配给名为“LATEST_VERSION”的同一 Jenkins 文件中定义的变量?

我可能可以通过在 Jenkins 上运行管道来测试它,但我遇到了另一个问题,阻止我这样做,它提示“需要标识符或代码块”。

error while include sh bash in groovy Jenkins file

在 sh 文件中运行相同的内容时,没有此问题,版本 ID 已按预期从 JSON 中检索。

最佳答案

有几个步骤可以实现这一目标。首先,我们需要修复 shell 方法的执行。我们将其转换为有效的 shell 执行,该执行返回执行的标准并将其分配给变量:

build_json = sh(label: 'Retrieve Build Info', script: "curl ${APP_ARTIFACTORY_URL}/${XRAY_PLATFORM}/builds/latest.json", returnStdout: true)

这是一个有效的 shell 方法执行,它还将返回标准输出并将其分配给一个变量。请参阅documentation了解更多信息。

接下来,我们需要解析生成的 JSON,并将该返回值分配给变量:

build_map = readJSON(text: build_json)

请参阅documentation了解更多信息。

最后,我们现在有了一个 Map,我们可以在其中访问 latest_version 键的值并将其分配给变量。我们可以使用以下语法访问:

latest_version = build_map['version']

或者这个:

latest_version = build_map.version

请注意,虽然这确实回答了您的问题,但您无法在管道执行期间将动态值传递给 environment block (您的问题意味着您希望稍后执行)。因此,您将需要尝试不同的路线,并且可能需要询问有关它的后续问题。

关于jenkins - 使用 groovy 解析 Jenkin 的 shell 脚本中的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61654487/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com