【发布时间】:2017-06-01 16:22:10
【问题描述】:
我正在将现有的构建作业转换为由 Jenkins Job DSL 生成。
这些作业主要基于 Maven 并调用 Sonar。现有作业执行几个 shell 命令,调用 Sonar 服务器以测试 Sonar 运行是否通过了 Sonar 质量门。如果它通过了质量门,则工作继续进行,否则它失败。代码块是:
#!/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 服务器的命令,然后返回查询结果。
我在 Job DSL 文档中没有看到任何关于如何返回 shell 步骤状态的信息。到目前为止,我看到的唯一方法是运行 1 个或多个 DSL shell 步骤以获取 Group + Artifact ID 信息,将结果制定为 Jenkins 环境变量并将它们写入临时文件;然后我将这些变量注入到构建作业中;完成后,我会调用 Sonar 服务器并将结果写入另一个临时文件并进行检查。显然这很笨拙。
有没有更好的方法来做到这一点,而不必使用 shell 步骤? 提前致谢。
【问题讨论】:
标签: shell maven jenkins jenkins-job-dsl