写点什么

极狐 GitLab 冷知识:使用 Gitlab Webhook 触发 Pipeline

作者:郭旭东
  • 2022 年 8 月 12 日
    上海
  • 本文字数:951 字

    阅读完需:约 3 分钟

极狐GitLab冷知识:使用 Gitlab Webhook 触发 Pipeline

前言

新年新气象,本年度新开一个系列,介绍那些 GitLab 中比较冷门却十分好玩的功能,本篇为该系列开篇。


极狐 GitLab 提供了非常丰富事件以及 Webhook,这项功能常被用于与其他系统集成。事实上,极狐 GitLab 的 Webhook 也可以用来触发 GitLab CI 并运行 Pipeline 的,这只需一些简单的配置。

Step By Step

首先需要选择一个 Project,新建或者现有项目都行,推荐使用极狐GitLab,运行 CI 和触发 Webhook 的项目理论上可以是两个 Project,但为了管理和配置方便,这里推荐使用一个 Project。

获取 Webhooks 触发令牌

根据下面步骤获取 Webhook 触发令牌:


设置 -> CI/CD -> 流水线触发器 -> 添加触发器 -> 复制触发令牌


配置 Webhook

设置 -> Webhooks -> 选择想要触发 Webhook 的事件进行勾选


URL 中插入: https://GITLAB_HOST/api/v4/projects/PROJECT_ID/ref/REF_NAME/trigger/pipeline?token=TOKEN


其中:


  • GITLAB_HOST 为 GitLab 实例的域名,如:https://jihulab.com

  • PROJECT_ID: 项目 ID

  • REF_NAME: 分支名称

  • TOKEN: 触发令牌


最后点击 Add Webhook


修改 .gitlab-ci.yml

完成以上步骤,在出现相应事件时,就会触发 Webhook 并向指定 URL 发送请求,接下来介绍如何处理 Webhook 请求。


首先要确定 Webhook 的 CI 触发类型 trigger,在 .gitlab-ci.yml 文件中可以通过以下配置筛选触发类型:


job:  ...  only:    - trigger
复制代码


除了 only 关键字之外,还可以使用 rules 关键字配合 $CI_PIPELINE_SOURCE 环境变量来使用,参考下表:


获取 Webhook 事件请求参数

所有的请求参数都会以文件类型的 CI/CD Variable 形式保存在 CI Job 中,可以使用 cat $TRIGGER_PAYLOAD 或者运行类似的命令来查看。


注意:这里的 $TRIGGER_PAYLOAD 是一个文件地址,使用 echo 命令只能得到一个类似 /builds/xxx/xxx.tmp/TRIGGER_PAYLOAD 这样的地址,请求内容被以 JSON 形式保存在这个文件中。


同时还可以使用 variables[key]=value 这样的形式来给 CI Job 传递 Variable,例如:


curl --request POST \  --form token=TOKEN \  --form ref=main \  --form "variables[UPLOAD_TO_S3]=true" \  "https://jihulab.com/api/v4/projects/123456/trigger/pipeline"
复制代码

结语

GitLab 给开发者提供了非常大的自由空间来 DIY 和自动化工作流,只需掌握一些编程技巧就可以玩出千变万化的效果。


发布于: 刚刚阅读数: 3
用户头像

郭旭东

关注

服务可靠无异常,节点稳定不宕机 2018.09.08 加入

柴猫双全的码农

评论

发布
暂无评论
极狐GitLab冷知识:使用 Gitlab Webhook 触发 Pipeline_极狐GitLab_郭旭东_InfoQ写作社区