快取、共用和偵錯工作流程
在本單元中,您將瞭解如何優化效能、在作業之間傳遞數據,以及使用記錄和令牌對工作流程進行疑難解答。
若要實作此程式,您將瞭解如何:
- 快取相依性以加快工作流程。
- 在工作之間傳遞成品資料。
- 啟用工作流程的偵錯記錄。
- 從 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-artifact 和 download-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 中檢視工作流程執行的記錄:
- 在您的存放庫中,前往 [動作] 索引標籤。
- 在左窗格中,選取工作流程。
- 在工作流程執行的清單中,選取執行。
- 在 [ 工作 ] 底下,選取工作。
- 讀取記錄輸出。
如果您在工作流程內執行數次,您可以在選取工作流程後選取 [ 狀態 ] 篩選,並將它設定為 [ 失敗 ] ,只顯示該工作流程中失敗的執行。
從 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