設定 GitHub Actions 工作流程

已完成

在此,您會了解工作流程檔案內的一些常見設定。 您也可以探索事件類型的類別、停用和刪除工作流程,以及使用特定版本的動作以執行安全性最佳做法。

針對已排定事件設定要執行的工作流程

如先前所述,您可以設定在 GitHub 上發生特定活動時、在 GitHub 以外的發生事件時,或依排程時間執行工作流程。 schedule 事件可讓您使用 POSIX cron 語法,以觸發工作流程,在特定的 UTC 時間執行。 此 Cron 語法有五個 * 欄位,而且每個欄位代表一個時間單位。

Diagram of the five unit-of-time fields for scheduling an event in a workflow file.

例如,如果您想要每隔 15 分鐘執行一次工作流程,schedule 事件看起來如下所示:

on:
  schedule:
    - cron:  '*/15 * * * *'

而且,如果您想要在每個星期天的早上 3:00 執行工作流程,schedule 事件看起來如下所示:

on:
  schedule:
    - cron:  '0 3 * * SUN'

您也可以使用運算子來指定值的範圍,或是撥入排程的工作流程。 執行排程工作流程的最短間隔是每五分鐘一次,且工作流程會根據預設或基底分支上的最新認可來執行。

針對手動事件設定要執行的工作流程

除了已排定事件以外,您還可以使用 workflow_dispatch 事件手動觸發工作流程。 此事件可讓您使用 GitHub REST API,或在 GitHub 上的存放庫內選取 [動作] 索引標籤中的 [執行工作流程] 按鈕,來執行工作流程。 使用 workflow_dispatch,您可以選擇要執行工作流程的分支,並設定 GitHub 在 UI 中以表單元素呈現的選用 inputs

on:
  workflow_dispatch:
    inputs:
      logLevel:
        description: 'Log level'     
        required: true
        default: 'warning'
      tags:
        description: 'Test scenario tags'  

除了 workflow_dispatch 之外,您還可以使用 GitHub API 來觸發稱為 repository_dispatch 的 Webhook 事件。 此事件可讓您針對在 GitHub 外部發生的活動觸發工作流程,基本上是向您的存放庫的發出 HTTP 要求,要求 GitHub 透過動作或 Webhook 觸發工作流程。 使用此手動事件需要執行兩件事:將 POST 要求傳送至 GitHub 端點 /repos/{owner}/{repo}/dispatches,要求本文中包含 Webhook 事件名稱,並設定您的工作流程使用 repository_dispatch 事件。

curl \
  -X POST \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/octocat/hello-world/dispatches \
  -d '{"event_type":"event_type"}'
on:
  repository_dispatch:
    types: [opened, deleted]

針對 Webhook 事件設定要執行的工作流程

最後,您可以設定在 GitHub 上發生特定 Webhook 事件時要執行的工作流程。 您可從一個以上的 Webhook 活動中觸發大多數的 Webhook 事件,因此,如果 Webhook 有多個活動,您可以指定活動類型以觸發工作流程。 例如,您可以針對 check_run 事件 (但僅針對 rerequestedrequested_action 活動類型) 執行工作流程。

on:
  check_run:
    types: [rerequested, requested_action]

使用條件關鍵字

在您的工作流程檔案中,您可以存取內容資訊和評估運算式。 雖然運算式通常與工作流程檔案中的條件式 if 關鍵字一起使用,以判斷是否應該執行步驟,但您可以使用任何支援的內容和運算式來建立條件式。 請務必了解,在您的工作流程中使用條件時,必須使用特定的語法 ${{ <expression> }},這會告知 GitHub 評估運算式,而不是將其視為字串。

例如,某個工作流程使用 if 條件式來檢查 github.ref (觸發工作流程執行的分支或標籤參考) 是否與 refs/heads/main 相符,以便繼續進行工作流程中的下列步驟,這類工作流程看起來如下所示:

name: CI
on: push
jobs:
  prod-check:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      ...

請注意,在此範例中,語法缺少 ${{ }}。 使用某些運算式時,例如 if 條件式,您可以省略運算式語法。 GitHub 會自動評估其中一些常見的運算式,但您可以一律加入這些運算式,以免忘記 GitHub 會自動評估那些運算式。

如需工作流程語法和運算式的詳細資訊,請參閱 GitHub Actions 的工作流程語法

停用和刪除工作流程

將工作流程新增至存放庫之後,您可能會遇到想暫時停用工作流程的情況。 您可以在 GitHub 或透過 GitHub REST API 停止觸發工作流程,而不需要從存放庫中刪除檔案。 當您要再次啟用工作流程時,便可以使用相同的方法輕鬆地完成啟用。

Screenshot of disabling a workflow on GitHub.

在某些情況下,停用工作流程很有用,例如:

  • 工作流程的錯誤產生太多或錯誤的要求,對外部服務造成負面影響。
  • 您想要暫停非關鍵性的工作流程,該工作流程在您的帳戶上耗用太多時間。
  • 您想要暫停正在向已關閉服務提出要求的工作流程。
  • 您正在處理分支,且您不需要某些工作流程包含的所有功能 (例如,排程的工作流程)。

您也可以在 [動作] 索引標籤內的 GitHub UI 中,或使用 GitHub API 端點 DELETE /repos/{owner}/{repo}/actions/runs/{run_id},取消進行中的工作流程執行。 請記住,當您取消工作流程執行時,GitHub 會取消其執行內的所有作業和步驟。

使用組織的樣板化工作流程

如果您在組織內有一個工作流程由多個小組使用,與其為每個存放庫重新建立相同的工作流程,您可以使用組織 .github 存放庫中定義的工作流程範本,提升組織間的一致性。 組織內的任何成員都可以使用組織範本工作流程,而該組織內的任何存放庫都可以存取這些工作流程範本。

您可以導覽至組織內存放庫的 [動作] 索引標籤,選取 [新增工作流程],然後尋找標題為「依組織名稱建立的工作流程」的組織工作流程範本,來尋找這些工作流程。 例如,名稱為 Mona 的組織具有範本工作流程,如下所示。

Screenshot of a template organization workflow called greet and triage by Mona.

使用特定版本的動作

參考工作流程中的動作時,建議您參考該動作的特定版本,而不只是動作本身。 藉由參考特定版本,可防止將非預期的變更推送至可能會中斷工作流程的動作。 此處有幾種方式可供您參考特定版本的動作:

steps:    
  # Reference a specific commit
  - uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
  # Reference the major version of a release
  - uses: actions/setup-node@v1
  # Reference a minor version of a release
  - uses: actions/setup-node@v1.2
  # Reference a branch
  - uses: actions/setup-node@main

某些參考比其他參考更安全。 例如,參考特定分支將會根據該分支的最新變更來執行該動作,而這不一定是您想要的動作。 藉由參考特定版本號碼或認可 SHA 雜湊,您將對要執行的動作版本更加明確。 為了更加穩定和安全,我們建議您在工作流程中使用已發佈動作的認可 SHA。