我正在将我现有的构建作业转换为由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 Group&amp;工件ID信息,构建查询Sonar服务器的命令,然后返回查询的结果。
我在Job DSL文档中没有看到有关如何返回shell步骤状态的任何信息。到目前为止,我看到的唯一方法就是运行一个或多个DSL shell步骤来获取Group + Artifact ID信息,将结果表示为Jenkins环境变量&amp;将它们写入临时文件;然后我将这些变量注入构建作业;一旦完成,我接着调用Sonar Server并将结果写入另一个临时文件并检查它。显然这很糟糕。
有没有更好的方法来实现它,而不必使用shell步骤? 提前谢谢。
答案 0 :(得分:0)
我会考虑重新实现构建的这一部分,并避免使用shell步骤。
如果你去(优秀)job-dsl api文档,你可以看到有Sonar dsl准备就绪并等待你使用......
在我看来,使用处理Sonar的Job DSL而不是通过shell脚本运行Sonar测试更好
您的代码可以使用更少的语言,更清晰,更易于维护和理解。