時間差不多囉 - 事件觸發器
《禮記·中庸》「凡事預則立,不預則廢。」說明了如果沒有預先設定事件觸發器,需要時 Action 也不會執行。
今天我們要來討論 GitHub Actions 中不同的事件觸發器。事件觸發器是 GitHub Actions 最重要的設定之一,它可以根據特定的 GitHub 事件自動啟動工作流程。讓我們可以在合適的時機自動執行各種操作,例如測試、部署等。在這篇文章中,我們將探討如何設定事件觸發器,並實作不同事件觸發的工作流程。
今日範例程式:https://github.com/Edit-Mr/2024-GitHub-Actions/tree/main/7
什麼是事件觸發器?
事件觸發器是一種機制,用於在特定 GitHub 事件發生時自動啟動工作流程。這些事件可以是程式推送、拉取請求建立、Issue 更新等。利用事件觸發器,我們可以在合適的時間自動執行指定的操作,從而實現自動化的工作流程。
在 GitHub Actions 工作流程文件(.yml)中,我們可以使用 on 關鍵字來指定觸發事件。以下是一個簡單的例子:
name: On Push Event
on:
push:
branches:
- main # 當推送到 main 分支時觸發工作流程
常見的事件類型
- push: 當程式推送到指定分支時觸發。例如,當我們向
main分支推送程式時。 - pull_request: 當建立或更新拉取請求時觸發。例如,當我們建立一個新的 Pull Request 或對現有的 Pull Request 進行更新時。
- issue: 當建立或更新 Issue 時觸發。例如,當我們報告一個新的問題或更新現有的問題描述時。
- schedule: 根據設定的時間表定期觸發。例如,每天、每周定期執行任務。
- workflow_dispatch: 手動觸發工作流程。例如,當需要在 GitHub UI 上手動啟動工作流程時。
實作:不同事件觸發的工作流程
現在,我們將實作幾個不同事件觸發的工作流程,包括推送、拉取請求、Issue、定時和手動觸發。我們將設定不同的事件觸發器,並在每個事件發生時執行相應的操作。
-
設定推送事件觸發器
在
.github/workflows/trigger-on-push.yml文件中,設定工作流程以在程式推送時觸發:123456789101112131415161718name: On Push Event on: push: branches: - main # 當推送到 main 分支時觸發工作流程 jobs: build: runs-on: ubuntu-latest steps: - name: Check out the code uses: actions/checkout@v3 - name: Run a script 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 建立或更新時觸發:123456789101112131415161718name: On Pull Request Event on: pull_request: branches: - main # 當拉取請求目標分支為 main 時觸發工作流程 jobs: review: runs-on: ubuntu-latest steps: - name: Check out the code uses: actions/checkout@v3 - name: Run a script 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 建立或更新時觸發:1234567891011121314151617name: On Issue Event on: issues: types: [opened, edited] # 當 Issue 建立或更新時觸發工作流程 jobs: notify: runs-on: ubuntu-latest steps: - name: Check out the code uses: actions/checkout@v3 - name: Notify run: echo "An Issue was created or edited."YAML 文件解析:
on: issues:指定當 Issue 建立或更新時觸發此工作流程。types:設定要觸發的事件類型(在這裡是opened和edited)。
-
設定定時事件觸發器
在
.github/workflows/trigger-on-schedule.yml文件中,設定工作流程以定期觸發:1234567891011121314name: On Schedule Event on: schedule: - cron: "0 0 * * *" # 每天午夜 12 點觸發工作流程 jobs: daily-task: runs-on: ubuntu-latest steps: - name: Run a script run: echo "起床重睡"YAML 文件解析:
on: schedule:設定定時觸發工作流程。cron:使用 cron 表達式來設定觸發時間(在這裡是每日午夜 12 點)。
-
設定手動觸發事件
在
.github/workflows/trigger-on-manual.yml文件中,設定工作流程以手動觸發:12345678910111213name: On Manual Trigger on: workflow_dispatch: # 允許手動觸發 jobs: manual-task: runs-on: ubuntu-latest steps: - name: Run a script 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 這個程式檢查工具。