本文來自:
楊洪麗 極狐GitLab 進階網站可靠性工程師(SRE)
隻使用極狐GitLab 存放代碼? 那你就 OUT 啦!
如果你也遇到了如圖 A / B / C / D 各位同學的煩惱,不要錯過這篇能夠讓你日常工作更高效的内容。
使用極狐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 → 流水線觸發器 → 添加觸發器 → 複制觸發令牌。
注: 在上述配置頁面也會有使用 webhook 配置的 url ,可直接複制替換令牌使用。
配置 webhook
設定→ Webhooks → 選擇想要觸發 Webhook 的事件進行勾選。
如目前我們需要的是當有新的 issue 建立時觸發該 Pipeline。
注:其中 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. 實作效果
通知消息内容如圖:
這樣,既解決了 A 同學的沒法及時響應,也解決了 B 同學的不知道 assign 給誰的問題。
使用極狐 GitLab 計劃流水線,打通工作消息通知
C 和 D 同學的問題,既然是機械式的工作,那我們可以設定定時任務去觸發流水線來完成需要手動處理的工作。
- SRE 按照 Milestone 來管理日常的工作,周期是固定的,Manager 可能會忘記 Milestone 快結束了,但是程式不會忘記;
- 作為 SRE,每周都會進行更新,如果都由一個人來操作建立 issue 并完成部署更新,效率可想而知。極狐GitLab 可以幫助你實作自動排班并建立 issue。
1. 如何設定
設定計劃流水線
1. Milestone 結束提醒設定計劃流水線觸發政策:
- 變量:
$NOTIFY_MILESTONE_END_ISSUE == "1"
-
時間:
首次提醒:14 号早上 10 點
最後提醒:17 号 18 點最後再友情提示一下:0 10 14 * *
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 結束消息通知 👇
- Auto release 消息通知 👇
以上隻是使用極狐 GitLab 的一小部分自動化功能,極狐 GitLab 給開發者或運維人員都提供了非常大的空間來實作各自需要的自動化工作流,隻需掌握一些簡單的程式設計技巧就能實作豐富多彩的結果,期待你的探索與分享。
參考
- Slack 通知服務配置
- 消息變量
- 計劃流水線