Jenkins Job DSL return 脚本结果

Jenkins Job DSL return script results

我正在将我现有的构建作业转换为由 Jenkins Job DSL 生成。

作业主要基于 Maven 并调用 Sonar。现有作业执行几个 shell 命令,这些命令调用 Sonar 服务器以测试 Sonar 运行 是否通过了 Sonar Quality Gate。如果它通过了质量门,则作业继续,否则失败。代码块是:

#!/bin/bash
# Query the Sonar Quality Gate for this project; if good, proceed with the job

APP_GROUPID=$(cat pom.xml  | xpath /project/groupId/text\(\) 2>/dev/null)
APP_ARTIFACTID=$(cat pom.xml  | xpath /project/artifactId/text\(\) 2>/dev/null)

export SONAR_RESULT=$(curl --silent -H "Accept: application/xml"  "http://<sonar-server>/api/resources/index?includealerts=true&metrics=alert_status&resource=${APP_GROUPID}:${APP_ARTIFACTID}" | xpath '/resources/resource/msr/alert/text()' 2>/dev/null)

echo $SONAR_RESULT
if [ "$SONAR_RESULT" == "OK" ]; then
  echo "*** SONAR_RESULT = [$SONAR_RESULT] Proceeding with deployment."
else
  echo "*** SONAR_RESULT = [$SONAR_RESULT] Halting deployment attempt!"
  exit -1
fi

我正在尝试在 Jenkins Job DSL 中复制此功能。为此,我需要获取 Maven 组和工件 ID 信息,构建查询 Sonar 服务器的命令,然后 return 查询结果。

我在作业 DSL 文档中没有看到任何关于如何 return shell 步骤状态的信息。到目前为止,我看到的唯一方法是 运行 1 个或多个 DSL shell 步骤来获取 Group + Artifact ID 信息,将结果制定为 Jenkins 环境变量并将它们写入临时文件;然后我将这些变量注入到构建作业中;完成后,我将调用 Sonar 服务器并将结果写入另一个临时文件并进行检查。显然这很笨拙。

有没有更好的方法,不必使用 shell 步骤? 提前致谢。

我会考虑重新实现您构建的这一部分并避免使用 shell 步骤。

如果您查看(优秀的)job-dsl api 文档,您可以看到 Sonar dsl 已准备好并等待您使用...

https://jenkinsci.github.io/job-dsl-plugin/#method/javaposse.jobdsl.dsl.helpers.publisher.MavenPublisherContext.sonar

在我看来,更好 使用处理 Sonar 的 Job DSL,而不是 运行 通过 [=24] 进行 Sonar 测试=] 脚本

您的代码需要应对的语言更少、更简洁、更易于维护和理解。