Gitlab:仅在创建和更新时,CI Webhook在合并请求触发

时间:2018-06-20 14:44:59

标签: git continuous-integration gitlab gitlab-ci

我想根据合并请求在gitlab中为CI运行一些工作。

我创建了一个Webhook和一个触发器,并且Webhook在合并请求事件

上触发

enter image description here

此触发器触发两次:在创建和合并时触发。

我不希望在合并时触发该触发器,因为对我而言这没用。

我该如何解决?

谢谢

4 个答案:

答案 0 :(得分:0)

据我所知,push事件运行正常

https:// {$ jenkins.url} /git/notifyCommit?url=ssh://git@gitlab.ing.net:2222/ {$ group} / {$ project} .git

答案 1 :(得分:0)

如选项所述

  

创建/更新/合并

合并请求时,将触发此URL

使用json触发url。使用此json标识在什么条件下应该接受触发器。

doc's

答案 2 :(得分:0)

扩展Joao Vitorino的答案。 通过Webhook接收到json数据后,您可以根据“ action”的值进行决策。您可以在“ object_attributes”对象中找到它。

"object_attributes": {
    "assignee_id": 20,
    "author_id": 20,
    "created_at": "2018-09-04 09:39:25 UTC",
    "description": "blub\\r\\nblub2",
    "head_pipeline_id": null,
    "id": 85,
    "iid": 3,
    "last_edited_at": "2018-09-04 09:50:21 UTC",
    "last_edited_by_id": 20,
    "merge_commit_sha": "035683abb9eae299399210ddd79a0f3b93bc4bbd",
    "merge_error": null,
    "merge_params": {
        "force_remove_source_branch": "0"
    },
    "merge_status": "can_be_merged",
    "merge_user_id": null,
    "merge_when_pipeline_succeeds": false,
    "milestone_id": null,
    "source_branch": "sourceBranch",
    "source_project_id": 34,
    "state": "merged",
    "target_branch": "develop",
    "target_project_id": 34,
    "time_estimate": 0,
    "title": "Feature/olatce 11380",
    "updated_at": "2018-09-04 09:50:25 UTC",
    "updated_by_id": 20,
    "url": "url-to-gitlab.com",
    "source": {
    },
    "target": {
    },
    "last_commit": {

    },
    "work_in_progress": false,
    "total_time_spent": 0,
    "human_total_time_spent": null,
    "human_time_estimate": null,
    "action": "merge"
},

这是对象中的最后一个字段,可以具有以下值:

  • 打开(用于新创建的合并请求)
  • 更新(对于更新的MR,源分支中的新提交或MR的编辑)
  • 重新打开
  • 关闭
  • 合并

有了这个,您应该能够决定如何处理触发器。

答案 3 :(得分:0)

您可以为此使用Generic Webhook Trigger Plugin

如果配置这些变量:

  • MR_OBJECT_KIND$.object_kind
  • MR_ACTION$.object_attributes.action
  • MR_OLD_REV$.object_attributes.oldrev

,过滤文字为:$MR_OBJECT_KIND $MR_ACTION $MR_OLD_REV

将表达式过滤为:^merge_request\s(update\s.{40}$|open.*)

然后,作业仅应在创建或更新时触发。

这里有一个完整的测试用例:https://github.com/jenkinsci/generic-webhook-trigger-plugin/blob/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd/gitlab/gitlab-mergerequest.feature