GitHub Actions 如何將開發工作自動化?

已完成

我們將在此處介紹 GitHub Actions 和工作流程。 您將了解可以使用的動作類型,以及可找到這些動作類型的位置。 您也可以查看這些動作類型的範例,以及這些動作類型如何融入工作流程中。

GitHub 減少從概念到部署的時間

GitHub 旨在協助開發人員和 DevOps 工程師小組快速建置及部署應用程式。 GitHub 中有許多功能可促成此目標,但多為以下兩種類別的其中之一:

  • 溝通:想想看 GitHub 那些能讓開發人員小組輕鬆交流軟體開發專案的所有方式:程式碼檢閱的提取要求、GitHub 問題、專案版面、wiki、通知等等。
  • 自動化:GitHub Actions 讓您的小組在從整合、傳遞到部署的軟體開發程序中,能夠將每個步驟中的工作流程自動化。 您甚至可以將標籤自動新增至提取要求,並檢查過時的問題和提取要求。

這些功能結合起來,讓上千個開發小組有效減少從最初概念到部署所花費的時間。

使用工作流程自動化來減少開發時間

在本課程模組中,我們會著重於自動化,所以讓我們花點時間了解一下,小組如何利用自動化減少完成一般開發和部署工作流程所花費的時間。

請考慮在撰寫完程式碼「之後」,但能可靠地用在預定用途之前,必須執行的所有工作。 視組織的目標而定,您可能需要執行下列一或多項工作:

  • 確定程式碼通過所有單元測試
  • 執行程式碼品質和合規性檢查,以確保原始程式碼符合組織的標準
  • 檢查程式碼及其相依性是否有已知的安全性問題
  • 建置整合 (可能) 多名參與者所出新來源的程式碼
  • 確定軟體通過整合測試
  • 建立新組建的版本
  • 將新的二進位檔傳遞至適當的檔案系統位置
  • 將新的二進位檔部署到一或多部伺服器
  • 如果上述工作中有任一項未通過,請向適當的個人或小組回報以解決問題

挑戰就在於如何能可靠、一致且持續地執行這些工作。 這是工作流程自動化的理想作業。 如已習慣使用 GitHub,建議您使用 GitHub Actions 來設定工作流程自動化。

什麼是 GitHub Actions?

GitHub Actions 是封裝的指令碼,可以將 GitHub 軟體開發工作流程中的工作自動化。 您可以設定 GitHub Actions 觸發符合組織需求的複雜工作流程;在每次開發人員將新的原始程式碼簽入特定分支時觸發、按時間間隔觸發,或透過手動方式觸發。 結果就是可靠持續的自動化工作流程,大幅減少了開發時間。

哪裡可以找到 GitHub Actions?

GitHub Actions 是符合 yml 資料格式的指令碼。 每個存放庫都有一個 [動作] 索引標籤,能讓您快速輕鬆地開始設定您的第一段指令碼。 如果您發現了可能成為絕佳起點的工作流程,只要選取 [設定] 按鈕,即可新增指令碼並開始編輯來源 yml。

GitHub Actions [動作索引標籤] 的螢幕擷取畫面,顯示簡單的工作流程和設定此工作流程的按鈕。

不過,除了 GitHub Actions [動作] 索引標籤上的功能以外,您還可以:

  • GitHub Marketplace 中搜尋 GitHub Actions。 GitHub Marketplace 可讓您探索及購買能擴充工作流程的工具。
  • 搜尋開放原始碼專案。 例如,GitHub Actions 組織提供的許多熱門開放原始碼存放庫,皆包含您可使用的 GitHub Actions。
  • 從頭開始撰寫您自己的 GitHub Actions。 此外,如有需要,您也可以將其設為開放原始碼,或甚至發佈至 GitHub Marketplace。

使用開放原始碼 GitHub Actions

許多 GitHub Actions 都是開放原始碼,可供任何人使用。 不過,就像使用任何開放原始碼軟體一樣,您需要先仔細檢查,再使用在專案中。 類似開放原始碼軟體的建議社群標準 (例如,包含讀我檔案、管理辦法、參與檔案和問題範本),您可以在使用 GitHub Actions 時,遵循下列建議:

  • 請針對輸入、輸出檢閱動作的 action.yml 檔案,並確保程式碼執行其所述功能。
  • 檢查動作是否在 GitHub Marketplace 中。 即使動作不一定要在 GitHub Marketplace 上才有效,這也是一個不錯的檢查方式。
  • 檢查動作在 GitHub Marketplace 中是否已經過驗證。 這表示 GitHub 已核准使用此動作。 不過,您仍然應該在使用前先檢閱。
  • 藉由指定 Git 參考、SHA 或標籤來包含您正在使用的動作版本。

GitHub 動作類型

有三種 GitHub 動作類型:容器動作、JavaScript 動作和複合動作。

使用容器動作時,動作程式碼包含環境。 這些動作只能在 GitHub 裝載的 Linux 環境中執行。 容器動作支援許多不同的語言。

JavaScript 動作的程式碼不包含環境。 您必須指定要執行這些動作的環境。 您可以在雲端或內部部署的 VM 中執行這些動作。 JavaScript 動作支援 Linux、macOS 和 Windows 環境。

複合動作可讓您在一個動作內合併多個工作流程步驟。 例如,您可以使用此功能來將多個執行命令一起組合到一個動作中,然後就會有一個使用該動作作為單一步驟來執行組合命令的工作流程。

剖析 GitHub 動作

以下是對於存放庫執行 git 簽出的動作範例。 此動作 (actions/checkout@v1) 是工作流程步驟的一部分。 此步驟也會建置已簽出的 Node.js 程式碼。我們將在下個章節介紹工作流程、作業和步驟。

steps:
  - uses: actions/checkout@v1
  - name: npm install and build webpack
    run: |
      npm install
      npm run build

假設您想要使用容器動作來執行容器化程式碼。 動作看起來會像這樣:

name: "Hello Actions"
description: "Greet someone"
author: "octocat@github.com"

inputs:
    MY_NAME:
      description: "Who to greet"
      required: true
      default: "World"

runs:
    uses: "docker"
    image: "Dockerfile"

branding:
    icon: "mic"
    color: "purple"

請注意 inputs 區段。 在這裡,您會取得名為 MY_NAME 的變數值。 這個變數會在執行此動作的工作流程中設定。

runs 區段中,請注意您是在 uses 屬性中指定 docker。 在您這麼做時,您必須提供 Docker 映像檔案的路徑。 在這裡稱為 Dockerfile。 這裡不會介紹 Docker 的細節,但如果您想要了解詳細資訊,請參閱 Docker 容器簡介課程模組。

如果您決定在 GitHub Marketplace 發佈,最後一節的加入商標會在 GitHub Marketplace 中將您的動作個人化。

GitHub Actions 的中繼資料語法中,您可以找到動作中繼資料的完整清單。

什麼是 GitHub Actions 工作流程?

GitHub Actions 工作流程是為了將軟體開發生命週期工作 (包括 GitHub Actions) 自動化而在存放庫中設定的流程。 藉由工作流程,您就可以在 GitHub 上建置、測試、封裝、發行和部署任何專案。

若要建立工作流程,請將動作新增至 GitHub 存放庫的 .github/workflows 目錄中出現的 yml 檔案。

在後續練習中,工作流程檔案 main.yml 看起來會像這樣:

name: A workflow for my Hello World file
on: push
jobs:
  build:
    name: Hello world action
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - uses: ./action-a
      with:
        MY_NAME: "Mona"

請注意 on: 屬性。 這是指定此工作流程執行時間的觸發程序。 這會在您的存放庫有推送事件時觸發執行。 您可以指定單一事件 (例如 on: push)、事件陣列 (例如 on: [push, pull_request]),或排程工作流程或將工作流程執行限制在特定檔案、標記或分支變更的事件設定對應。 對應看起來會像這樣:

on:
  # Trigger the workflow on push or pull request,
  # but only for the main branch
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  # Also trigger on page_build, as well as release created events
  page_build:
  release:
    types: # This configuration does not affect the page_build event above
      - created

除非您指定類型,否則事件將對於事件的所有活動類型觸發。 若想取得完整的事件清單及其活動類型,請參閱:GitHub 文件裡的可觸發工作流程的事件

工作流程至少必須有一個作業。 作業是與執行器相關聯之工作流程的一個區段。 執行器可以是 GitHub 裝載或自我裝載,而作業可以在電腦上或容器中執行。 您將使用 runs-on: 屬性指定執行器。 在這裡,您會指示工作流程在 ubuntu-latest 上執行此作業。

每項工作都有要完成的步驟。 在我們的範例中,步驟會使用動作 actions/checkout@v1 來簽出存放庫。 uses: ./action-a 值很有趣,這是您在 action.yml 檔案中建置的容器動作所屬的路徑。 我們在〈什麼是 GitHub Actions?〉一節中介紹過 action.yml 檔案的內容。

此工作流程檔案的最後一個部分會設定此工作流程的 MY_NAME 變數值。 回想容器動作使用名稱為 MY_NAME 的輸入。

如需工作流程語法的詳細資訊,請參閱〈GitHub Actions 的工作流程語法〉

GitHub 裝載與自我裝載執行器

簡要說明與作業相關聯的執行器。 執行器只是一個已安裝 GitHub Actions 執行器應用程式的伺服器。 在先前的工作流程範例中,作業區塊內有個 runs-on: ubuntu-latest 屬性,它會告知工作流程,作業將使用在 ubuntu-latest 環境中執行的 GitHub 裝載執行器來執行。

當談到執行器時,有兩個選項可供選擇:GitHub 裝載的執行器或自我裝載的執行器。 如果您使用 GitHub 裝載的執行器,每個作業會在虛擬環境的全新執行個體中執行,該環境是由您定義的 GitHub 裝載執行器類型所指定,runs-on: {operating system-version}。 使用自我裝載的執行器時,您必須套用自我裝載標籤、其作業系統和系統結構。 例如,具有 Linux 作業系統和 ARM32 結構的自我裝載執行器看起來如下所示:runs-on: [self-hosted, linux, ARM32]

每種類型的執行器都有其優點,但 GitHub 裝載的執行器可提供更快速、更簡單的方式來執行您的工作流程,儘管選項有限。 自我裝載的執行器是一種可設定性很高的方式,可在您自己的自訂本機環境中執行工作流程。 您可以在內部部署或在雲端中執行自我裝載的執行器。 您也可以使用自我裝載的執行器來建立具有更多處理能力或記憶體的自訂硬體設定,以執行較大的作業、在區域網路上安裝可用的軟體,以及選擇 GitHub 裝載的執行器未提供的作業系統。

GitHub Actions 可能有使用量限制

GitHub Actions 的使用方式會有所限制,取決您的 GitHub 方案以及執行器是 GitHub 裝載或是自我裝載。 如需使用量限制的詳細資訊,請參閱 GitHub 文件中的使用量限制、計費與管理