jenkins - 如何传递管道变量来发布构建 gerrit 消息?

标签 jenkins jenkins-pipeline gerrit

我有一个 Pylint 在 Jenkins 管道中运行。为了实现它,我使用了 Gerrit 触发器插件和下一代警告插件。一切都按预期进行 - Jenkins 正在加入审核,使用 pylint 检查更改并生成报告。

现在,我想在自定义“构建成功”消息中发布 pylint 分数。我想将 pylint 分数传递给环境变量,并在专用窗口中使用它来显示 Gerrit 插件消息。

不幸的是,无论我尝试什么,我都无法将任何"new"变量传递给消息。传递嵌入在管道中的参数(例如补丁集编号)。

我在配置 Jenkins 菜单中创建了新的环境变量,尝试导出到 shell,写入它(通过 $VAR 和 env. 语法),但没有任何效果 - 也就是说,构建消息显示像 $VAR 这样的原始字符串,而不是变量包含的内容。

我应该如何将本地 pylint 分数(每次管道发生的情况都不同)传递给 Gerrit 的自定义构建消息?

最佳答案

我认为自定义消息不能用于此目的。这应该只是一条静态消息。

我这样做的方式是使用 SSH 命令来执行审查。您还可以使用 REST API 实现相同的目的。

首先,我运行 linting 和空格检查脚本,该脚本将生成一个 json 文件,其中包含我想要传递给 Gerrit 的信息。接下来我使用 SSH 将其发送给 Gerrit。请参阅下面的管道脚本和示例 json 文件。

作为奖励,我添加了机器人评论。现在,这将作为 Jenkins 的评论显示在您的评论中,即我的 Jenkins 文件的第 8 行有一个尾随空格。您可以轻松地将其替换为您喜欢的 lint 结果,或者忽略它并只放置消息。使用 json 文件更容易,因为它可以更轻松地创建多行消息


node('master') {
  sh """
    cat lint_change.json | ssh -p ${env.GERRIT_PORT} ${env.GERRIT_HOST} gerrit review ${env.GERRIT_PATCHSET_REVISION} --json
    """
}

示例 json 文件:

{
  "labels": {
    "Code-Style": "-1"
  }, 
  "message": "Lint Bot Review\nLint Results:\n  Errors: 0\n  Warnings: 0\n\nWhitespace results:\n  Errors: 1", 
  "robot_comments": {
    "Jenkinsfile": [
      {
        "robot_id": "lint-bot", 
        "line": "8", 
        "message": "trailing whitespace."
      }
    ]
  }
}

或者,您可能想查看新的 gerrit-code-review-plugin这应该会让事情变得更加容易。不过,我还没有尝试过。

关于jenkins - 如何传递管道变量来发布构建 gerrit 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55497194/

相关文章:

git - 如何让 Jenkins 将 Git merge 提交视为更改?

gerrit - 更改默认的 gerrit commit-msg

git - 为 Gerrit 及其所有 Git 存储库设置镜像的最佳方式

jenkins - Jenkins错误:标签必须遵循必需的规范

linux - 如何通过 SSH 将 Sudo 与 Jenkins bash 脚本一起使用?

Jenkins 管道中未设置 Maven 工具

Jenkinsfile ${steps.env.BUILD_NUMBER} : bad substitution

gerrit - 在 Gerrit 中搜索之前被审阅者拒绝的提交

java - Jenkins 无法识别 Java 1.6

jenkins - 从自动触发 Jenkins 构建中排除 .yaml 和 .md 文件