前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GitLab 冷知识:使用 Gitlab Webhook 触发 Pipeline

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

作者头像
郭旭东
发布2022-12-05 14:33:09
2.4K0
发布2022-12-05 14:33:09
举报
文章被收录于专栏:云原生工具箱

笔者入职极狐 GitLab 已经一年有余,在日常工作中高强度使用 GitLab,积累了不少使用经验和技巧。遂将这些经验归纳总结,开启一个名为《GitLab 冷知识》的新系列文章,介绍那些 GitLab 中比较冷门却十分好玩的功能。

前言

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

Step By Step

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

获取 Webhooks 触发令牌

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

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

pipeline triggers

配置 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

webhook

修改 .gitlab-ci.yml

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

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

代码语言:javascript
复制
job:
  ...
  only:
    - trigger

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

$CI_PIPELINE_SOURCE value

only/except keywords

Trigger method

trigger

triggers

In pipelines triggered with the pipeline triggers API[2] by using a trigger token[3].

pipeline

pipelines

In multi-project pipelines[4] triggered with the pipeline triggers API[5] by using the `$CI_JOB_TOKEN`[6], or by using the `trigger`[7] keyword in the CI/CD configuration file.

获取 Webhook 事件请求参数

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

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

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

代码语言:javascript
复制
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 和自动化工作流,只需掌握一些编程技巧就可以玩出千变万化的效果。

参考资料

[1]

极狐GitLab: https://jihulab.com/

[2]

pipeline triggers API: https://docs.gitlab.com/ee/api/pipeline_triggers.html

[3]

trigger token: https://docs.gitlab.com/ee/ci/triggers/index.html#create-a-trigger-token

[4]

multi-project pipelines: https://docs.gitlab.com/ee/ci/pipelines/multi_project_pipelines.html#create-multi-project-pipelines-by-using-the-api

[5]

pipeline triggers API: https://docs.gitlab.com/ee/api/pipeline_triggers.html

[6]

$CI_JOB_TOKEN: https://docs.gitlab.com/ee/ci/jobs/ci_job_token.html

[7]

trigger: https://docs.gitlab.com/ee/ci/yaml/index.html#trigger

[8]

文件类型的 CI/CD Variable: https://docs.gitlab.com/ee/ci/variables/index.html#cicd-variable-types

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Step By Step
    • 获取 Webhooks 触发令牌
      • 配置 Webhook
        • 修改 .gitlab-ci.yml
          • 获取 Webhook 事件请求参数
          • 结语
            • 参考资料
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档