有没有办法在“脚本化管道”Jenkinsfile 中获取 Gitlab MR“标签”值?

时间:2021-01-08 17:28:16

标签: jenkins gitlab jenkins-pipeline

Gitlab 合并请求具有标签值,可以通过编程和手动(由审阅者)添加和删除。

Gitlab Labels

Gitlab 有一个 Jenkins 集成设置,它向 Jenkins 发送一个包含标签的 JSON blob:

  "labels": [
    {
      "id": 2132,
      "title": "blocked",
      "color": "#ffbb00",
      "project_id": 29634,
      "created_at": "2019-11-01 14:32:22 UTC",
      "updated_at": "2020-05-12 15:52:22 UTC",
      "template": false,
      "description": "MR cannot be merged; rationale should be described in-line.",
      "type": "ProjectLabel",
      "group_id": null
    },
    {
      "id": 1909,
      "title": "ready for review",
      "color": "#5843AD",
      "project_id": 29634,
      "created_at": "2019-08-19 23:59:00 UTC",
      "updated_at": "2019-08-19 23:59:00 UTC",
      "template": false,
      "description": "",
      "type": "ProjectLabel",
      "group_id": null
    }
  ],

Jenkins Gitlab 插件拦截该 JSON blob 并开始测试。

我猜这个 JSON blob 被写出到我可以在脚本化管道 Jenkinsfile 中访问的数据结构,但我找不到任何关于如何从中提取值的文档。我希望能够检查存在的标签,然后根据分配的标签采取不同的测试操作。

如何在脚本化管道 Jenkinsfile 中提取 Gitlab JSON 数据?

1 个答案:

答案 0 :(得分:0)

这里我们必须小心,当使用脚本化管道时,有两种可能性。 TL:博士;对于多分支管道作业,您确实有环境变量,而对于普通管道作业则没有。

在正常管道作业中,第一种方法是利用 jenkins gitlab plugin。使用此插件无法获取标签,到目前为止,有一个拉取请求已开放 2 年而没有交互。

第二种方式,如果您使用的是多分支管道,则最有可能使用 gitlab branchsource 插件。它提供了更多的环境变量,如 here 所述。

特别有趣的应该是以下内容

  • GITLAB_LABELS_COUNT
  • GITLAB_LABEL_ID_#
  • GITLAB_LABEL_TITLE_#
  • GITLAB_LABEL_COLOR_#
  • GITLAB_LABEL_PROJECT_ID_#
  • GITLAB_LABEL_CREATED_AT_#
  • GITLAB_LABEL_UPDATED_AT_#
  • GITLAB_LABEL_TEMPLATE_#
  • GITLAB_LABEL_DESCRIPTION_#
  • GITLAB_LABEL_TYPE_#
  • GITLAB_LABEL_GROUP_ID_#

其中 GITLAB_LABELS_COUNT 将返回您的数量,通过索引您可以解析所有这些。

例如。我创建了一个带有 DoingTo Do 标签的合并请求,并收到了以下环境变量

GITLAB_LABEL_TITLE_1=To Do
GITLAB_LABEL_TITLE_0=Doing
GITLAB_LABEL_GROUP_ID_0=<group id>
GITLAB_LABEL_GROUP_ID_1=<group id>
GITLAB_LABEL_ID_0=<label id 0>
GITLAB_LABEL_ID_1=<label id 2>
GITLAB_LABELS_COUNT=2
GITLAB_LABEL_TEMPLATE_1=false
GITLAB_LABEL_TEMPLATE_0=false
GITLAB_LABEL_COLOR_0=#5CB85C
GITLAB_LABEL_COLOR_1=#F0AD4E
# i skipped the Date fields

mr with labels