启动 GitHub Actions 环境变量和秘密

如果您對GitHub Actions環境變量還不熟悉,您可能還不知道如何存儲它們。但是,這是可能的嗎?是的!

在本教程中,您將學習不同的方法來保存GitHub Actions環境變量和機密,以便在使用GitHub Actions時需要時使用。

準備好了嗎?繼續閱讀開始吧!

先決條件

本教程將進行實踐演示,需要安裝有Git的任何操作系統,本教程中使用Ubuntu操作系統。此外,需要對Git操作有基本的工作知識,以便將代碼提交到GitHub Actions環境變量存儲庫中。

設置GitHub Actions環境變量

在使用GitHub Actions工作流自動化流程時,您可能需要將環境變量附加到工作流中。如何實現呢?您首先需要使用env關鍵字在工作流中創建和指定自定義環境變量。

1. 創建一個名為.github/workflows的目錄,您將在其中存儲工作流文件。

2. 接下來,在 .github/workflows 目錄中建立一個以您喜好命名的檔案。但在這個例子中,檔案名稱為 main.yml。將以下代碼複製並貼上到 main.yml 檔案中。

以下代碼在代碼觸發 workflow 時設置並顯示 API_KEY 環境變數。

name: env_tutorial
## 觸發工作流程的條件為推送或 
## 拉取請求在主分支上
on: [pull_request, push] 

env:
  ## 設置環境變數
  API_KEY: XXXXXXXXXXXX    

jobs:
  job1:
    ## 工作將在哪種 runner 上運行,
    ## 這裡選擇在 ubuntu 最新版本上運行
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        ## 參考您的環境變數
        run: echo "The API key is:${{env.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 另一種參考您的環境變數的方法
        run: echo "The API key is:$API_KEY"

3. 提交並推送代碼到您的 GitHub 存儲庫。

git add .
git commit -m "update"
git push
Pushing updates to the GitHub Actions environment variables repository

4. 現在,打開您的網頁瀏覽器,並導航到 GitHub 上的專案。點擊 Actions 選項卡,然後點擊當前提交。

您將看到類似下面圖片的內容,顯示 GitHub 已運行了工作流程。

GitHub actions Environment variables for repository

5. 最後,點擊job1job2,你將看到你已成功引用了你初始化的環境變量。

Viewing Referenced Environment Variable (job1)
Viewing Referenced Environment Variable (job2)

為工作定義一個環境變量

現在你已經在工作流程檔案中初始化了環境變量,任何工作都可以引用這個環境變量。但或許你只想讓一個工作引用這個環境變量。如果是這樣,將env關鍵字放在工作本身。

1. 用下面的代碼替換你的main.yml檔案中的代碼。

下面的代碼顯示當你將環境變量放在特定的工作中時,其他工作不能引用這個環境變量。

name: env_tutorial
## 當有推送或
## 在主分支上有拉取請求時觸發工作流程
on: [pull_request, push] 

jobs:
  job1:
    ## 工作將運行在的運行器類型
    runs-on: ubuntu-latest 
    env:
      ## 環境變量
      API_KEY: XXXXXXXXXXXX    
    steps:
      - name: step 1
        ## 引用你的環境變量
        run: echo "The API key is:${{env.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 另一種引用你的環境變量的方式
        run: echo "The API key is:$API_KEY"  

2. 提交你的更改並像之前一節中那樣將工作從你的代碼推送到GitHub Actions環境變量。

3. 最後,導航到你在GitHub上的項目,然後點擊job1job2來看它們的比較:

  • 工作1 – 您會發現您已經完美地參考了環境變數。
  • 工作2 – API 金鑰是空白的。
Viewing Referenced Environment Variable (job1)
Viewing Referenced Environment Variable (job2)

定義步驟的環境變數

現在您已經學會如何在工作中指定環境變數,您一定會想知道如何在步驟中進行相同操作。

對於工作中的步驟,您像對待工作一樣在步驟中指定環境變數。

1. 使用下面的代碼替換您在main.yml文件中的代碼。

在下面的代碼中,您在步驟1中指定環境變數,但在步驟2中沒有指定,您將在後續步驟中看到效果。

name: env_tutorial
## 觸發工作流程的條件:當主分支上有推送或 
## 拉取請求時
on: [pull_request, push] 

jobs:
  job1:
    ## 作業將在其上運行的運行器類型
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        env:
          ## 步驟1的環境變數
          API_KEY: XXXXXXXXXXXX    
        ## 引用您的環境變數
        run: echo "The API key is:${{env.API_KEY}}"   
      - name: step 2
        ## 引用您的環境變數
        run: echo "The API key is:${{env.API_KEY}}"   

2. 現在提交更改並將代碼推送到 GitHub。

3. 最後,轉到GitHub Actions 環境變數中的項目,並點擊工作1

即使您在同一個工作(job1)中的兩個步驟中引用了兩個 API 金鑰,但是在第二步中,API 金鑰(空白)無法被評估,如下所示。 為什麼呢?因為您在代碼中沒有在第二步內指定環境變量。

Setting environment variables for steps

通過 GitHub Actions 環境變量和 Secrets 管理環境變量

您可以選擇使用 GitHub secrets 安全地存儲您的環境變量,而不是將其硬編碼。 GitHub Actions 環境變量會將您放入 secrets 的值加密,因此它們在肉眼中不可見,也無法讀取。

使用此方法創建的密鑰對整個工作流程、工作和步驟都是可訪問的;沒有限制。

要將您的環境變量存儲在 GitHub Secrets 中:

1. 首先,像在前幾個部分中那樣將代碼推送到 GitHub。

2. 接下來,轉到 GitHub 上的您的項目,並單擊設置選項卡。

在下方的選項卡中單擊Secrets以開始添加秘密。

Storing environment variables in Secrets

3. 接下來,單擊新存儲庫秘密,然後您將看到一個表格,填寫有關您要添加的秘密的詳細信息。

Creating new repository secret

4. 填寫表格(名稱)並單擊添加秘密按鈕提交。 現在,API_KEY已保存在 GitHub Secrets 中。 在此表單中,GitHub 將環境變量安全地設置為秘密,您可以在 GitHub Actions 中使用它們。

Filling name and value of the new secret

5. 編輯您的 main.yml 檔案,將 env 關鍵字替換為 secrets

下面,您可以看到您以 ${{secrets.API_KEY}} 格式參考 API 金鑰,而不是直接將 API 金鑰硬編碼在程式碼中。

name: env_tutorial
## 觸發工作流程的條件是當進行推送或
## 主分支上的拉取請求時
on: [pull_request, push] 

jobs:
  job1:
    ## 工作將運行的 Runner 類型
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        ## 參考您的環境變數
        run: echo "The API key is:${{secrets.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 參考您的環境變數
        run: echo "The API key is:${{secrets.API_KEY}}"  

6. 最後,將代碼提交並推送至 GitHub,然後導航到 GitHub Actions 環境變數中的專案。 參考第一部分。

您將看到類似下面圖片的內容,但您無法看到實際的 API_key,因為 GitHub 會對您放入 secrets 的值進行加密。

Displaying API key from GitHub Actions environment variables secrets

參考默認的 GitHub 環境變數

GitHub 提供了一些 默認環境變數,您可以使用這些變數來訪問存儲庫中的文件系統,而不是直接將路徑硬編碼在程式碼中。 默認的 GitHub 環境變數使您能夠在參考 GitHub 提供的環境變數時更加靈活。

您可以使用默認環境變數獲取的一些路徑如下:

  • GITHUB_JOB – 提供當前工作的 job_id。
  • GITHUB_ACTION – 提供當前操作的 id。
  • GITHUB_ACTION_PATH – 提供操作所在路徑。
  • GITHUB_ACTOR – 提供啟動工作流程的人或應用程式的名稱,例如您的 GitHub 使用者名稱。
  • GITHUB_RUN_ID – 提供run指令的唯一編號。

用以下代碼替換您main.yml文件中的內容。以下代碼顯示了代碼中所述的默認環境變數。

name: env_tutorial

## 當主分支上有推送或拉取請求時觸發工作流程


## 工作將在哪種類型的運行器上運行

on: [pull_request, push] 

jobs:
  job1:
    
## 引用工作將運行的默認環境變數

    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        run: |
          echo "The job_id is: $GITHUB_JOB"   
# 引用默認環境變數

          echo "The id of this action is: $GITHUB_ACTION"   
# 引用默認環境變數

          echo "The run id is: $GITHUB_RUN_ID" 
          echo "The GitHub Actor's username is: $GITHUB_ACTOR"
      - name: step 2
        run: |
          echo "The run id is: $GITHUB_RUN_ID"

提交並將代碼更改推送到 GitHub,檢查您的 GitHub Actions 環境變數項目中的操作,您將看到類似下圖的內容。

Referencing the Default GitHub environment variables

結論

在本教程中,您已經學會了如何管理 GitHub Actions 環境變數。您現在應該已經具有將環境變數安全存儲以及如何使用 GitHub 提供的默認環境變數的基礎知識。

現在您打算如何在使用 GitHub Actions 時整合這些新獲得的知識呢?也許是保存部署所需的 API 金鑰?

Source:
https://adamtheautomator.com/github-actions-environment-variables/