時間差不多囉 - 事件觸發器

《禮記·中庸》「凡事預則立,不預則廢。」說明了如果沒有預先設定事件觸發器,需要時 Action 也不會執行。
今天我們要來討論 GitHub Actions 中不同的事件觸發器。事件觸發器是 GitHub Actions 最重要的設定之一,它可以根據特定的 GitHub 事件自動啟動工作流程。讓我們可以在合適的時機自動執行各種操作,例如測試、部署等。在這篇文章中,我們將探討如何設置事件觸發器,並實作不同事件觸發的工作流程。
今日範例程式:https://github.com/Edit-Mr/2024-GitHub-Actions/tree/main/7
什麼是事件觸發器?
事件觸發器是一種機制,用於在特定 GitHub 事件發生時自動啟動工作流程。這些事件可以是代碼推送、拉取請求創建、Issue 更新等。利用事件觸發器,我們可以在合適的時間自動執行指定的操作,從而實現自動化的工作流程。
在 GitHub Actions 工作流程文件(.yml
)中,我們可以使用 on
關鍵字來指定觸發事件。以下是一個簡單的例子:
1name: On Push Event
2
3on:
4 push:
5 branches:
6 - main # 當推送到 main 分支時觸發工作流程
常見的事件類型
- push: 當代碼推送到指定分支時觸發。例如,當我們向
main
分支推送代碼時。 - pull_request: 當創建或更新拉取請求時觸發。例如,當我們創建一個新的 Pull Request 或對現有的 Pull Request 進行更新時。
- issue: 當創建或更新 Issue 時觸發。例如,當我們報告一個新的問題或更新現有的問題描述時。
- schedule: 根據設定的時間表定期觸發。例如,每天、每周定期執行任務。
- workflow_dispatch: 手動觸發工作流程。例如,當需要在 GitHub UI 上手動啟動工作流程時。
實作:不同事件觸發的工作流程
現在,我們將實作幾個不同事件觸發的工作流程,包括推送、拉取請求、Issue、定時和手動觸發。我們將設置不同的事件觸發器,並在每個事件發生時執行相應的操作。
-
設置推送事件觸發器
在
.github/workflows/trigger-on-push.yml
文件中,設置工作流程以在代碼推送時觸發:1name: On Push Event 2 3on: 4 push: 5 branches: 6 - main # 當推送到 main 分支時觸發工作流程 7 8jobs: 9 build: 10 runs-on: ubuntu-latest 11 12 steps: 13 - name: Check out the code 14 uses: actions/checkout@v3 15 16 - name: Run a script 17 run: echo "Code was pushed to the main branch."
YAML 文件解析:
on: push:
指定當推送到main
分支時觸發此工作流程。jobs:
定義要執行的工作(在這裡是build
)。steps:
設定工作流程的具體步驟,包括檢出代碼和執行腳本。
-
設置 Pull Request 事件觸發器
在
.github/workflows/trigger-on-pr.yml
文件中,設置工作流程以在 PR 創建或更新時觸發:1name: On Pull Request Event 2 3on: 4 pull_request: 5 branches: 6 - main # 當拉取請求目標分支為 main 時觸發工作流程 7 8jobs: 9 review: 10 runs-on: ubuntu-latest 11 12 steps: 13 - name: Check out the code 14 uses: actions/checkout@v3 15 16 - name: Run a script 17 run: echo "A Pull Request was created or updated against the main branch."
YAML 文件解析:
on: pull_request:
指定當拉取請求創建或更新時觸發此工作流程。branches:
設定拉取請求目標分支(在這裡是main
)。
-
設置 Issue 事件觸發器
在
.github/workflows/trigger-on-issue.yml
文件中,設置工作流程以在 Issue 創建或更新時觸發:1name: On Issue Event 2 3on: 4 issues: 5 types: [opened, edited] # 當 Issue 創建或更新時觸發工作流程 6 7jobs: 8 notify: 9 runs-on: ubuntu-latest 10 11 steps: 12 - name: Check out the code 13 uses: actions/checkout@v3 14 15 - name: Notify 16 run: echo "An Issue was created or edited."
YAML 文件解析:
on: issues:
指定當 Issue 創建或更新時觸發此工作流程。types:
設定要觸發的事件類型(在這裡是opened
和edited
)。
-
設置定時事件觸發器
在
.github/workflows/trigger-on-schedule.yml
文件中,設置工作流程以定期觸發:1name: On Schedule Event 2 3on: 4 schedule: 5 - cron: "0 0 * * *" # 每天午夜 12 點觸發工作流程 6 7jobs: 8 daily-task: 9 runs-on: ubuntu-latest 10 11 steps: 12 - name: Run a script 13 run: echo "起床重睡"
YAML 文件解析:
on: schedule:
設定定時觸發工作流程。cron:
使用 cron 表達式來設定觸發時間(在這裡是每日午夜 12 點)。
-
設置手動觸發事件
在
.github/workflows/trigger-on-manual.yml
文件中,設置工作流程以手動觸發:1name: On Manual Trigger 2 3on: 4 workflow_dispatch: # 允許手動觸發 5 6jobs: 7 manual-task: 8 runs-on: ubuntu-latest 9 10 steps: 11 - name: Run a script 12 run: echo "This job was manually triggered."
YAML 文件解析:
on: workflow_dispatch:
允許手動觸發工作流程。
常見的應用案例
-
自動化測試:
- 使用
push
事件觸發工作流程,運行單元測試以確保新代碼不會破壞現有功能。
- 使用
-
自動部署:
- 使用
push
事件觸發工作流程,當代碼推送到main
分支時自動部署到生產環境。
- 使用
-
PR 驗證:
- 使用
pull_request
事件觸發工作流程,在拉取請求創建或更新時自動運行測試和代碼審查。
- 使用
-
Issue 通知:
- 使用
issues
事件觸發工作流程,當 Issue 創建或更新時自動發送通知或執行其他操作。
- 使用
-
定期任務:
- 使用
schedule
事件觸發工作流程,定期執行備份、清理或其他例行任務。
- 使用
-
手動控制:
- 使用
workflow_dispatch
事件觸發工作流程,允許手動啟動工作流程來進行特定操作,如發佈版本等。
- 使用
結語
今天我們探討了如何在 GitHub Actions 中設置事件觸發器,並實作了不同的工作流程來響應各種 GitHub 事件。我們探討了如何設置推送、PR、Issue、定時和手動觸發器,明天我們要來談談如何使用 eslint 這個代碼檢查工具。