如何传递管道变量以发布构建Gerrit消息?

时间:2019-04-03 14:09:58

标签: jenkins pipeline gerrit

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

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

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

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

我应该怎么做才能将本地pylint分数(每个管道发生的情况都不同)传递给Gerrit的自定义生成消息?

2 个答案:

答案 0 :(得分:0)

您是否尝试过 echo“ $ var” ,可以共享您的代码

答案 1 :(得分:0)

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

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

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

作为奖励,我添加了机器人注释。现在,这将显示在您的评论中,作为詹金斯(Jenkins)的一句话,即我的詹金斯文件的第8行带有空白。您可以轻松地将其替换为您喜欢的不起毛的结果,也可以忽略它而只放置邮件。使用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,它将使事情变得更加容易。但是,我还没有尝试过。