如何将管道变量传递给 post 构建 gerrit 消息?

How to pass pipeline variables to post build gerrit message?

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

现在,我想在自定义 "Build successful" 消息中 post pylint 评分。我想将 pylint 分数传递给环境变量,并在专用 window 中使用它来获取 Gerrit 插件消息。

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

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

我应该怎么做才能将本地 pylint 分数(每次出现的管道都不同)传递给 Gerrit 的自定义构建消息?

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

我这样做的方法是使用 SSH 命令来执行审查。您也可以使用 REST API.

实现相同的效果

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

作为奖励,我添加了机器人评论。现在,这将作为 Jenkins 的评论显示在您的评论中,即我的 Jenkins 文件的第 8 行有一个尾随的白色 space。您可以轻松地将其替换为您喜欢的 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,它应该会让事情变得更容易。但是,我还没有尝试过。