解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线

本文来自
杨洪丽 极狐GitLab 高级网站可靠性工程师(SRE)

只使用极狐GitLab 存放代码? 那你就 OUT 啦!

如果你也遇到了如图 A / B / C / D 各位同学的烦恼,不要错过这篇能够让你日常工作更高效的内容。

解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线_第1张图片

使用极狐GitLab Webhook 触发 Pipeline,打通工作消息通知

关于 A 和 B 同学的烦恼,可以使用 Webhook 触发 Pipeline,打通工作消息通知 的功能来解决。

众所周知,极狐(GitLab) 采用远程办公工作模式,必然有许多需要协同处理的工作,这些工作当然是采用极狐GitLab 自带的 issue 提交到协同方。

关于需要 SRE 协同处理的工作,目前是在 Teamwork 中创建 issue,里面有模板,大家可以根据自己的需求填写。

紧急❗❗或一般事件也无需担心该 issue assign 给谁,因为对于 SRE 来说,他们有 on-call 的工作流程,所以我们会由 on-call 的同事来进行响应和处理。

1. 如何配置

获取触发器令牌

首先,需要选择一个 Project,新建或者现有项目都行。根据下面步骤获取 Webhook 触发令牌

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

解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线_第2张图片

注: 在上述配置页面也会有使用 webhook 配置的 url ,可直接复制替换令牌使用。
配置 webhook

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

如当前我们需要的是当有新的 issue 创建时触发该 Pipeline。

解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线_第3张图片

注:其中 URL 为上述获取 trigger 令牌时复制的URL。

2. 整个通知流水线的实现

1.我们可以用自己的喜好和擅长的语言写脚本来完成以下功能:

  • 获取 Webhook 事件请求参数,所有请求参数都会以文件类型的 CI/CD Variable 形式保存在 CI Job 中,可以使用 cat $TRIGGER_PAYLOAD 或者运行类似的命令来查看;
  • 获取当时的 On-caller;
  • 自定义消息内容,发送消息至 Slack。

2.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"

3. 实现效果

通知消息内容如图:

解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线_第4张图片

这样,既解决了 A  同学的没法及时响应,也解决了 B 同学的不知道 assign 给谁的问题。

使用极狐 GitLab 计划流水线,打通工作消息通知

C 和 D 同学的问题,既然是机械式的工作,那我们可以设置定时任务去触发流水线来完成需要手动处理的工作

  • SRE 按照 Milestone 来管理日常的工作,周期是固定的,Manager 可能会忘记 Milestone 快结束了,但是程序不会忘记;
  • 作为 SRE,每周都会进行升级,如果都由一个人来操作创建 issue 并完成部署升级,效率可想而知。极狐GitLab 可以帮助你实现自动排班并创建 issue。

1. 如何设置

设置计划流水线

解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线_第5张图片

1.Milestone 结束提醒设置计划流水线触发策略:

  • 变量:$NOTIFY_MILESTONE_END_ISSUE == "1"
  • 时间:

    • 首次提醒:14 号早上 10 点 0 10 14 * *
    • 最后提醒:17 号 18 点最后再友情提示一下:0 18 17 * *

2.自动化部署 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"

2. 整个通知流水线的实现

我们可以用自己的喜好和擅长的语言写脚本来完成以下功能

  • Milestone 结束提醒:

    • 获取当前 Milestone;
    • 统计所有 SRE 成员的 issue 个数;
    • 自定义消息发送到 Slack。
  • Auto release issue 提醒:

    • 获取当时的 On-caller;
    • 获取创建 Auto release 的 issue 模版;
    • 创建 issue,Assign 给 On-caller;
    • 自定义消息内容发送到 Slack,@ On-caller。

3. 实现效果

Slack 通知消息如下:

  • Milestone 结束消息通知

解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线_第6张图片

  • Auto release 消息通知

解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线_第7张图片

以上只是使用极狐 GitLab 的一小部分自动化功能,极狐 GitLab 给开发者或运维人员都提供了非常大的空间来实现各自需要的自动化工作流,只需掌握一些简单的编程技巧就能实现丰富多彩的结果,期待你的探索与分享。

参考

  1. Slack 通知服务配置
  2. 消息变量
  3. 计划流水线

你可能感兴趣的:(解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线)