【问题标题】:Jenkins Job DSL return script resultsJenkins Job DSL 返回脚本结果
【发布时间】: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


    【解决方案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 测试

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

    【讨论】:

    • 非常感谢 Rob,我确实看过 Sonar DSL 方法。在我的场景中,我已经使用之前的 Maven 调用运行了声纳分析(可以切换到使用 Job DSL。我现在要做的基本上是根据已经完成的声纳运行。我看不出 DSL 方法是如何完成的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多