Jenkins Job DSL返回脚本结果

时间:2017-06-01 16:22:11

标签: shell maven jenkins jenkins-job-dsl

我正在将我现有的构建作业转换为由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步骤? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我会考虑重新实现构建的这一部分,并避免使用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测试更好

您的代码可以使用更少的语言,更清晰,更易于维护和理解。