如何给极狐GitLab 配置 webhook,自动触发 Pipeline?
本文根据工作中的痛点来举例介绍如何使用极狐 GitLab,让你的日常工作更高效。
还在只使用极狐 GitLab 存放代码? 那你就 OUT 啦。
赶紧看看这篇文章,让你的日常工作更高效。
使用 Gitlab Webhook 触发 Pipeline,打通工作消息通知
关于 A/B 同学的问题,我想可以使用 Webhook 触发 Pipeline,打通工作消息通知的功能来解决他们的烦恼。
众所周知,极狐采用的是远程办公的工作模式,那么肯定有许多需要协同处理的工作,这些工作当然是采用极狐 GitLab 自带的 issue 提交到协同方。
关于需要 SRE 协同处理的工作,目前是在 Teamwork 中创建 issue,里面有模板,大家可以根据自己的需求填写。
紧急‼️或一般事件也无需担心该 issue assign 给谁,因为对于 SRE 来说,他们有on-call 的工作流程,所以我们会由 on-call 的同事来进行响应和处理。
如何配置
获取触发器令牌
首先需要选择一个 Project,新建或者现有项目都行。根据下面步骤获取 Webhook 触发令牌:
设置 -> CI/CD -> 流水线触发器 -> 添加触发器 -> 复制触发令牌
注: 在上述配置页面也会有使用 webhook 配置的 url ,可直接复制替换令牌使用。
配置 webhook
设置 -> Webhooks -> 选择想要触发 Webhook 的事件进行勾选。
如当前我们需要的是 当有新的 issue创建时触发该 pipeline。
其中:URL: 为上述获取 trigger 令牌时 复制的 url
整个通知的流水线的实现
- 我们可以用自己的喜好和擅长的语言写脚本来完成以下功能:
- 获取 Webhook 事件请求参数,所有的请求参数都会以文件类型的 CI/CD Variable 形式保存在 CI Job 中,可以使用 cat $TRIGGER_PAYLOAD 或者运行类似的命令来查看。
- 获取当时的 ON-CALLER;
- 自定义消息内容,发送消息至 Slack。
- CI Job 文件配置,设置只有trigger 时才执行此 Job
notify-sre:
stage: notify-sre
script:
- chmod +x scripts/***.py
- export TRIGGER_PAYLOAD=`cat $TRIGGER_PAYLOAD`
- python3 scripts/***.py
only:
refs:
- triggers
variables:
- $ISSUE_WEBHOOK == "true"
通知消息内容如图
这样,即解决了 A 同学的没法及时响应,也解决了 B 同学的不知道 assign 给谁的问题。
使用极狐 GitLab 计划流水线,打通工作消息通知
C/D 同学的问题,既然是机械式的工作,那我们可以设置定时任务去触发流水线来完成需要手动处理的工作。
- SRE 的工作内容也是按照 milestone 来管理日常的工作,周期也是固定的,Manager 可能会忘记 milestone 快结束了,但是程序不会忘记;
- 作为 SRE,每周都会进行升级,但是我们不能都由一个人来操作创建 issue 并完成部署升级,怎么实现自动排班并创建issue。
如何实现
- 设置计划流水线:
- milestone 结束提醒设置计划流水线触发策略:
- 变量:$NOTIFY_MILESTONE_END_ISSUE == "1"
- 时间:
- 首次提醒: 14号 早上10点 0 10 14 * *
- 最后提醒: 17 号 18 点最后再友情提示一下:0 18 17 * *
- 自动化部署saas的 issue创建和提醒:
- 变量:$NOTIFY_RELEASE == "1"
- 时间:
- 每周四上午11点 0 11 * * 4
- 编写 CI yml
- 设置 CI_PIPELINE_SOURCE 为 schedule
- 特定 variable 执行特定的 job
image: ****:1.0
stages:
- notify_sre
milestone_issue:
stage: notify_sre
script:
- chmod +x scripts/1***.py
- python3 scripts/1.py
rules:
- if: $CI_PIPELINE_SOURCE == "schedule" && $NOTIFY_MILESTONE_END_ISSUE == "1"
release-saas:
stage: notify_sre
script:
- chmod +x scripts/2.py
- python3 scripts/2.py
rules:
- if: $CI_PIPELINE_SOURCE == "schedule" && $NOTIFY_RELEASE == "1"
- 整个通知的流水线的实现,我们可以用自己的喜好和擅长的语言写脚本来完成以下功能:
- milestone 结束提醒:
- 获取当前 milestone;
- 统计所有 sre 的成员的 issue 个数;
- 自定义消息发送到slack;
- auto release issue 提醒
- 获取当时的on-caller;
- 获取创建 auto release 的issue 模版
- 创建issue,assign给on-caller
- 自定义消息内容发送到 slack,艾特 on-caller
- Slack 通知消息如下:
- milestone 结束消息通知:
auto release 消息通知:
以上只是使用极狐 GitLab 实现的一小部分自动化的功能,极狐 GitLab 给开发者或运维人员都提供了非常大的空间来实现各自需要的自动化工作流,只需掌握一些简单的编程技巧就能实现丰富多彩的结果。
关注【极狐GitLab】获取更多 DevOps 行业最佳实践。