快取、共用和偵錯工作流程

已完成

在本單元中,您將瞭解如何優化效能、在作業之間傳遞數據,以及使用記錄和令牌對工作流程進行疑難解答。

若要實作此程式,您將瞭解如何:

  • 快取相依性以加快工作流程。
  • 在工作之間傳遞成品資料。
  • 啟用工作流程的偵錯記錄。
  • 從 GitHub UI 和 REST API 存取工作流程記錄。
  • 使用安裝令牌進行 GitHub 應用程式驗證。

快取動作的快取相依性

當您建置工作流程時,通常需要重複使用相同的輸出,或從一個執行下載相依性到另一個執行。 您不需再次下載這些相依性,而是可以快取這些相依性,讓您的工作流程執行速度更快且更有效率。 快取相依性可減少在工作流程中執行特定步驟所需的時間,因為 GitHub 裝載的執行器上的工作每次都會在乾淨的虛擬環境中啟動。

若要快取工作的相依性,請使用 GitHub 的 cache 動作。 此動作會擷取依您提供的唯一索引鍵所識別的快取。 當動作找到快取,就會將快取的檔案擷取到您設定的路徑。 若要使用 cache 動作,您需要設定一些特定參數:

參數 說明 為必填項目
Key 是指儲存和搜尋快取時所建立的金鑰識別碼。 是的
Path 是指執行器上要快取或搜尋的檔案路徑。 是的
Restore-keys 由替代的現有快取鍵組成,以便在找不到所需的快取鍵時使用。
steps:
  - uses: actions/checkout@v2

  - name: Cache NPM dependencies
    uses: actions/cache@v2
    with:
      path: ~/.npm
      key: ${{ runner.os }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
      restore-keys: |
        ${{ runner.os }}-npm-cache-

在上述範例中,path 設定為 ~/.npm,而 key 包含執行器的作業系統和 package-lock.json 檔案的 SHA-256 雜湊。 當您使用 npm-cache 後援且擁有多個快取時,將索引鍵前端加上識別碼 (此範例中的 restore-keys) 會很有用。

在工作之間傳遞成品資料

類似於在工作流程內快取相依性的概念,您可以在相同工作流程內的工作之間傳遞資料。 您可以使用 upload-artifactdownload-artifact 動作來傳遞資料。 相依於先前工作成品的工作必須等候先前工作順利完成,然後才能執行。 如果您有一系列作業需要根據從先前作業上傳的成品順序執行,這個方法會很有用。 例如,job_2 會使用 job_1 語法來要求 needs: job_1

name: Share data between jobs
on: push
jobs:
  job_1:
    name: Upload File
    runs-on: ubuntu-latest
    steps:
      - run: echo "Hello World" > file.txt
      - uses: actions/upload-artifact@v2
        with:
          name: file
          path: file.txt

  job_2:
    name: Download File
    runs-on: ubuntu-latest
    needs: job_1
    steps:
      - uses: actions/download-artifact@v2
        with:
          name: file
      - run: cat file.txt

此範例有兩項工作。 job_1 會在檔案中 file.txt 寫入一些文字。 然後它會使用 actions/upload-artifact@v2 動作來上傳此成品,並儲存資料供未來於工作流程內使用。 job_2 需要使用 job_1 語法來完成 needs: job_1。 然後會使用 actions/download-artifact@v2 動作來下載該成品,接著列印 file.txt 的內容。

在工作流程中啟用步驟偵錯記錄

在某些情況下,預設工作流程記錄無法提供足夠的詳細數據,讓您診斷特定工作流程執行、作業或步驟失敗的原因。 在這些案例中,您可以針對兩個選項啟用更多偵錯記錄: 執行步驟。 將需要存放庫 admin 存取權的兩個存放庫祕密設定為 true 以啟用此診斷記錄。

  • 若要開啟執行診斷記錄,請將 ACTIONS_RUNNER_DEBUG 包含工作流程的存放庫中的秘密設定為 true
  • 若要啟用步驟診斷記錄,請將包含工作流程的存放庫中的 ACTIONS_STEP_DEBUG 密碼設定為 true

存取 GitHub 中的工作流程記錄

當您考慮成功的自動化時,您會想要花最少的時間查看自動化專案,以便專注於相關的專案。 但有時事情沒有按計劃進行,你需要審查發生了什麼事。 偵錯流程可能會令人受挫。

GitHub 有清楚且結構化的配置,可協助您在作業之間快速移動,同時保留目前偵錯步驟的內容。

若要在 GitHub 中檢視工作流程執行的記錄:

  1. 在您的存放庫中,前往 [動作] 索引標籤。
  2. 在左窗格中,選取工作流程。
  3. 在工作流程執行的清單中,選取執行。
  4. 在 [ 工作 ] 底下,選取工作。
  5. 讀取記錄輸出。

如果您在工作流程內執行數次,您可以在選取工作流程後選取 [ 狀態 ] 篩選,並將它設定為 [ 失敗 ] ,只顯示該工作流程中失敗的執行。

從 REST API 存取工作流程記錄

除了透過 GitHub 檢視記錄之外,您還可以使用 GitHub REST API 來檢視工作流程執行的記錄、重新執行工作流程,或甚至取消工作流程執行。 若要使用 API 檢視工作流程執行的記錄,請將要求傳送 GET 至記錄端點。 請記住,擁有存放庫讀取權限的任何人都可以使用此端點。 如果存放庫是私人的,您必須對範圍 repo 使用存取權杖。

例如, GET 檢視特定工作流程執行記錄的要求會遵循下列路徑:

GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs

識別何時從 GitHub 應用程式使用安裝令牌

當您的 GitHub 應用程式安裝在某一個帳戶上時,您可以利用 installation access token 來驗證這個安裝程式,並使用它進行 REST 和 GraphQL API 的請求。 此步驟可讓應用程式存取安裝所擁有的資源,前提是應用程式已獲得必要的存放庫存取權和許可權。 應用程式安裝所產生的 REST 或 GraphQL API 要求會歸因於應用程式。

在下列範例中,您會將 INSTALLATION_ACCESS_TOKEN 取代為安裝存取令牌。

curl --request GET \
--url "https://api.github.com/meta" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer INSTALLATION_ACCESS_TOKEN" \
--header "X-GitHub-Api-Version: 2022-11-28"

您也可以使用安裝存取權杖來驗證 HTTP 型 Git 存取。 您的應用程式必須具有存放 Contents 庫許可權。 接著,您可以使用安裝存取令牌作為 HTTP 密碼。

將範例中的 TOKEN 替換為安裝存取權杖:

git clone https://x-access-token:TOKEN@github.com/owner/repo.git