GitLab:编辑 merge 请求描述会触发发送 merge 请求 Hook

标签 git jenkins gitlab webhooks

对于我在 GitLab 上的存储库,我配置了一个Merge Request Hook,它会触发 Jenkins CI 机器上的构建。当 merge 请求打开时, Hook 会按预期工作。

webhook 配置了以下触发器:

最近,当我编辑 merge 请求的描述时, Hook 也会通知 CI 机器。
这是一个 POST 请求示例:

请求 header :

Content-Type: application/json
X-Gitlab-Event: Merge Request Hook

请求正文:

{
  "object_kind": "merge_request",
  "event_type": "merge_request",
  "user": {
    "name": "User Name",
    "username": "username",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/145/avatar.png"
  },
  "project": {
    "id": 39,
    "name": "app",
    "description": "Lorem ipsum.",
    "web_url": "https://gitlab.example.com/projects/app",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/project/avatar/39/app.png",
    "git_ssh_url": "git@gitlab.example.com:projects/app.git",
    "git_http_url": "https://gitlab.example.com/projects/app.git",
    "namespace": "projects",
    "visibility_level": 0,
    "path_with_namespace": "projects/app",
    "default_branch": "develop",
    "ci_config_path": null,
    "homepage": "https://gitlab.example.com/projects/app",
    "url": "git@gitlab.example.com:projects/app.git",
    "ssh_url": "git@gitlab.example.com:projects/app.git",
    "http_url": "https://gitlab.example.com/projects/app.git"
  },
  "object_attributes": {
    "assignee_id": null,
    "author_id": 5,
    "created_at": "2019-03-19 16:42:28 UTC",
    "description": "- s. https://fabric.io/development/projects/apps/com.example.app/issues/5974e5ffbe077a4dcc044254?time=last-thirty-days\r\n- Lorem ipsum.",
    "head_pipeline_id": 7473,
    "id": 9258,
    "iid": 844,
    "last_edited_at": "2019-03-20 09:00:21 UTC",
    "last_edited_by_id": 145,
    "merge_commit_sha": null,
    "merge_error": null,
    "merge_params": {
      "force_remove_source_branch": "1"
    },
    "merge_status": "can_be_merged",
    "merge_user_id": null,
    "merge_when_pipeline_succeeds": false,
    "milestone_id": null,
    "source_branch": "fix/random",
    "source_project_id": 39,
    "state": "opened",
    "target_branch": "develop",
    "target_project_id": 39,
    "time_estimate": 0,
    "title": "Fix random",
    "updated_at": "2019-03-20 09:00:21 UTC",
    "updated_by_id": 145,
    "url": "https://gitlab.example.com/projects/app/merge_requests/844",
    "source": {
      "id": 39,
      "name": "app",
      "description": "Lorem ipsum.",
      "web_url": "https://gitlab.example.com/projects/app",
      "avatar_url": "https://gitlab.example.com/uploads/-/system/project/avatar/39/app.png",
      "git_ssh_url": "git@gitlab.example.com:projects/app.git",
      "git_http_url": "https://gitlab.example.com/projects/app.git",
      "namespace": "projects",
      "visibility_level": 0,
      "path_with_namespace": "projects/app",
      "default_branch": "develop",
      "ci_config_path": null,
      "homepage": "https://gitlab.example.com/projects/app",
      "url": "git@gitlab.example.com:projects/app.git",
      "ssh_url": "git@gitlab.example.com:projects/app.git",
      "http_url": "https://gitlab.example.com/projects/app.git"
    },
    "target": {
      "id": 39,
      "name": "app",
      "description": "Lorem ipsum.",
      "web_url": "https://gitlab.example.com/projects/app",
      "avatar_url": "https://gitlab.example.com/uploads/-/system/project/avatar/39/app.png",
      "git_ssh_url": "git@gitlab.example.com:projects/app.git",
      "git_http_url": "https://gitlab.example.com/projects/app.git",
      "namespace": "projects",
      "visibility_level": 0,
      "path_with_namespace": "projects/app",
      "default_branch": "develop",
      "ci_config_path": null,
      "homepage": "https://gitlab.example.com/projects/app",
      "url": "git@gitlab.example.com:projects/app.git",
      "ssh_url": "git@gitlab.example.com:projects/app.git",
      "http_url": "https://gitlab.example.com/projects/app.git"
    },
    "last_commit": {
      "id": "cdda6f7d200468955ecbd224f0437932db607087",
      "message": "Fix random\n\n",
      "timestamp": "2019-03-20T08:45:40Z",
      "url": "https://gitlab.example.com/projects/app/commit/cdda6f7d200468955ecbd224f0437932db607087",
      "author": {
        "name": "User Name",
        "email": "username"
      }
    },
    "work_in_progress": false,
    "total_time_spent": 0,
    "human_total_time_spent": null,
    "human_time_estimate": null,
    "action": "update"
  },
  "labels": [
    {
      "id": 22,
      "title": "Bug fix",
      "color": "#FF0000",
      "project_id": null,
      "created_at": "2018-10-19 09:55:26 UTC",
      "updated_at": "2018-11-05 15:17:08 UTC",
      "template": false,
      "description": "",
      "type": "GroupLabel",
      "group_id": 15
    }
  ],
  "changes": {
    "description": {
      "previous": "s. https://fabric.io/development/projects/apps/com.example.app/issues/5974e5ffbe077a4dcc044254?time=last-thirty-days\r\nLorem ipsum.",
      "current": "- s. https://fabric.io/development/projects/apps/com.example.app/issues/5974e5ffbe077a4dcc044254?time=last-thirty-days\r\n- Lorem ipsum."
    },
    "last_edited_at": {
      "previous": "2019-03-19 16:42:50 UTC",
      "current": "2019-03-20 09:00:21 UTC"
    },
    "last_edited_by_id": {
      "previous": 5,
      "current": 145
    },
    "updated_at": {
      "previous": "2019-03-20 08:52:38 UTC",
      "current": "2019-03-20 09:00:21 UTC"
    },
    "updated_by_id": {
      "previous": 5,
      "current": 145
    }
  },
  "repository": {
    "name": "app",
    "url": "git@gitlab.example.com:projects/app.git",
    "description": "Lorem ipsum.",
    "homepage": "https://gitlab.example.com/projects/app"
  }
}

响应头:

Server: nginx/1.10.3 (Ubuntu)
Date: Wed, 20 Mar 2019 09:00:21 GMT
Transfer-Encoding: chunked
Connection: close
X-Content-Type-Options: nosniff

Jenkins 插件如下所示:

Jenkins GitLab plugin

在 Jenkins 机器上安装了以下 GitLab 插件:

Installed Jenkins GitLab plugins

如何配置在创建或更新 pull 请求的分支时只将 POST 请求发送到 CI 机器?

最佳答案

在触发器(设置 -> 集成)下执行以下操作:

  1. 启用推送事件(可选分支名称 - 甚至在 MR 可能之前通过推送事件创建分支)
  2. 在您的项目仓库中启用 MR 事件触发器

This URL will be triggered when a merge request is created/updated/merged

enter image description here

在 Jenkins 插件配置中 -

  1. 检查“推送事件”(任何通过直接推送或创建的方式提交)
  2. 取消选中“打开的 merge 请求事件”
  3. 检查“已接受的 merge 请求事件”(通过 merge 请求进行的任何提交)

关于GitLab:编辑 merge 请求描述会触发发送 merge 请求 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55284986/

相关文章:

java - 如何在现有项目中激活 GitLab Pages?

gitlab - 此 GitLab CI 配置无效 : root config contains unknown keys: tags

git mergetool 告诉 "No files need merging"而不是冲突的文件

git - 在我自己的网站上托管 git 项目

git - 当 git push 失败并显示 .. ."local out of date"时我该怎么办?

c# - Jenkins 是否支持 XUnit.Net?

authentication - 通过另一个应用程序访问 jenkins 资源

克隆 repo 时的 Gitlab/Gitolite 问题

git - 如果超过一组特定的行发生更改,如何让 git 仅识别文件已更改?

Jenkins多分支管道: How to select a build node?