【问题标题】:How to pass pipeline variables to post build gerrit message?如何传递管道变量以发布构建 gerrit 消息?
【发布时间】:2019-04-03 14:09:58
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: jenkins jenkins-pipeline gerrit


    【解决方案1】:

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

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

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

    作为奖励,我添加了机器人 cmets。现在,这将显示在您的评论中,作为 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,它应该会使这件事变得更容易。但是,我还没有尝试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2022-07-29
      • 2020-08-11
      • 2020-08-17
      • 2019-03-05
      相关资源
      最近更新 更多