在github操作中切换环境变量

时间:2019-12-12 10:03:16

标签: github concurrency continuous-integration github-actions

我将github操作用于集成测试。

问题在于,测试不应在具有相同配置的同时在多个实例上运行(测试将失败)。

但是,它可以与配置1一起运行一次,并与配置2并行运行一次。

this blog post所述,无法确保工作流不会并行运行。

有什么方法可以交替切换配置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"

1 个答案:

答案 0 :(得分:1)

您可以尝试通过以下方式进行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:
  token: ${{secrets[matrix.token]}}
  1. 现在,每个构建矩阵的令牌的实际值存储在环境变量${{env.token}}(在表达式上下文中操作时)或$token(在bash中)内部。

环境变量仍然是秘密,因此您不会丢失任何内容。