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