簡體   English   中英

在 github 操作中切換環境變量

[英]switch environment variable in github actions

我使用 github 操作進行集成測試。

問題是,測試不應該在具有相同配置的多個實例上並行運行(測試會失敗)。

但是,它可以在配置 1 下運行一次,在配置 2 下並行運行一次。

正如這篇博文所述,無法確保工作流不會並行運行。

有沒有辦法切換配置,配置1和配置2交替?

在這種情況下,具有相同配置的工作流工作流不太可能並行運行(如果需要,我可以添加更多配置)。

例如,這可以通過一個全局可寫(對於工作流)變量來完成,該變量交替為 1 或 2,並且工作流選擇該配置。

示例工作流(秘密confToSwitch應該被切換):

name: test
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: "load configuration"
      run: echo "configuration=$conf" >> ./conf
      env:
        conf: ${{ secrets.confToSwitch }}
    - name: "integration tests"
      run: "mvn -B integration-test"

您可以嘗試使用以下matrix配置:

name: test
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        token: [token1, token2, etc...]
    steps:
    - uses: actions/checkout@v1
    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: "load configuration"
      run: echo "configuration=$conf" >> ./conf
      env:
        conf: ${{ matrix.token }}
    - name: "integration tests"
      run: "mvn -B integration-test"

這將創建N個作業,其中N是列表中的標記數,並且每個帶有conf: ${{ matrix.token }}將解析為當前作業的列表中的一個標記。


我認為也可以將您的令牌存儲為機密並設置矩陣,如:

strategy:
  matrix:
    token: ["${{secrets.token1}}", "${{secrets.token2}}", etc...]

不過,我還沒有測試過這個。

編輯

我發現了一個使秘密令牌起作用的技巧:

  1. 創建您的秘密並將它們token1token2
  2. 使用令牌(即機密的名稱)創建矩陣配置:
strategy:
  matrix:
    token: [token1, token2]
  1. 在您作業的 env 中,創建以下環境變量:
env:
  token: ${{secrets[matrix.token]}}
  1. 現在,每個構建矩陣的令牌的實際值存儲在環境變量${{env.token}} (在表達式上下文中操作時)或$token (在 bash 中)中。

環境變量仍然是一個秘密,所以你不會丟失任何東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM