雅典軍隊如果有 Slack 通知,斐迪庇得斯就不用趕著從馬拉松跑回雅典了。

在持續集成和持續部署 (CI/CD) 流程中,及時了解工作流程的狀態對於快速響應和改進至關重要。本文將介紹如何在 GitHub Actions 工作流程中集成 Slack 通知服務,以便在工作流程運行時獲得實時通知,以及如何生成報告文件來跟蹤工作流程的結果。

今日範例程式:https://github.com/Edit-Mr/2024-GitHub-Actions/tree/main/26

今天的文章假設你會使用 Slack,並且已經有一個 Slack 工作區。如果你還沒有,可以參考 Slack 官方文檔 來創建一個。

GitHub Actions 中配置 Slack 通知

創建 Slack 應用並獲取 Webhook URL

  1. 創建 Slack 應用

    1. 進入 Slack API 頁面。
    2. 點擊 Create New App
    3. 選擇 From scratch,並輸入應用的名稱和所屬工作區。
    4. 點擊 Create App
  2. 設置 Incoming Webhook

    1. 在應用設置頁面,點擊 Incoming Webhooks
    2. 點擊 Activate Incoming Webhooks
    3. 點擊 Add New Webhook to Workspace
    4. 選擇要發送通知的頻道,並點擊 Allow
    5. 複製 Webhook URL,稍後會在 GitHub Actions 中使用。

配置 GitHub Actions 工作流程

  1. 創建工作流程文件

    .github/workflows 目錄下創建一個新的工作流程文件,例如 notify-slack.yml,並加入以下內容:

    1name: Notify Slack
    2
    3on:
    4    push:
    5        branches:
    6            - main
    7    pull_request:
    8
    9jobs:
    10    notify:
    11        runs-on: ubuntu-latest
    12
    13        steps:
    14            - name: Checkout code
    15              uses: actions/checkout@v3
    16
    17            - name: Notify Slack
    18              uses: slackapi/slack-github-action@v1
    19              with:
    20                  slack-token: ${{ secrets.SLACK_TOKEN }}
    21                  channel-id: "C1234567890" # 替換為你的頻道 ID
    22                  text: "工作流程已完成!查看詳細信息:[工作流程鏈接](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})"

    解釋:

    • slack-token: 使用 GitHub Secrets 存儲你的 Slack Token。
    • channel-id: 你的 Slack 頻道 ID。
    • text: 訊息文本,包括工作流程鏈接。
  2. 配置 GitHub Secrets

    將你的 Slack Token 添加到 GitHub Secrets:

    1. 進入你的 GitHub repository 頁面。
    2. 點擊 Settings > Secrets and variables > Actions
    3. 點擊 New repository secret
    4. 添加名為 SLACK_TOKEN 的 secret,並填入你的 Slack Token。

生成報告文件

編寫生成報告的腳本

  1. 創建報告生成腳本

    src 目錄下創建一個腳本文件,例如 generate-report.js,並添加以下內容:

    1import fs from "fs";
    2import path from "path";
    3
    4const reportFilePath = path.join(__dirname, "report.md");
    5
    6// 模擬生成報告的內容
    7const reportContent = `
    8# 工作流程報告
    9
    10**日期**: ${new Date().toLocaleDateString()}
    11
    12## 總結
    13
    14本次工作流程運行成功。
    15
    16## 詳細信息
    17
    18- [工作流程鏈接](https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID})
    19`;
    20
    21// 將報告內容寫入文件
    22fs.writeFileSync(reportFilePath, reportContent, "utf8");
    23
    24console.log("報告已生成");

步驟 2: 配置 GitHub Actions 生成報告文件

  1. 更新工作流程文件

    .github/workflows 目錄下創建流程文件,例如 generate-report.yml,並加入以下內容:

    1name: Generate Report
    2
    3on:
    4    push:
    5        branches:
    6            - main
    7    pull_request:
    8
    9jobs:
    10    report:
    11        runs-on: ubuntu-latest
    12
    13        steps:
    14            - name: Checkout code
    15              uses: actions/checkout@v3
    16
    17            - name: Set up Node.js
    18              uses: actions/setup-node@v3
    19              with:
    20                  node-version: "20"
    21
    22            - name: Install dependencies
    23              run: npm install
    24
    25            - name: Generate report
    26              run: node src/generate-report.js
    27
    28            - name: Commit and push report
    29              run: |
    30                  git config --local user.email "action@github.com"
    31                  git config --local user.name "GitHub Actions"
    32                  git add report.md
    33                  git commit -m "📝 Update report"
    34                  git push

    解釋:

    • Generate report: 運行生成報告的腳本。
    • Commit and push report: 將生成的報告文件提交到 repository。

小結

在本文中,我們介紹了如何在 GitHub Actions 工作流程中配置 Slack 通知,以便實時了解工作流程的狀態,並如何生成報告文件以跟蹤工作流程的結果。當然今天的練習非常的簡單,你可以根據實際需求進行擴展,例如添加更多通知類型、生成更複雜的報告等。

毛哥EM

一位喜歡把簡單的事,做得不簡單的高三生。