dan*_*1st 8 concurrency continuous-integration github 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"
Run Code Online (Sandbox Code Playgroud)
sma*_*c89 10
您可以尝试使用以下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"
Run Code Online (Sandbox Code Playgroud)
这将创建N作业,其中N是列表中的令牌数量,并且每个作业conf: ${{ matrix.token }}将解析为当前作业的列表中的令牌。
我认为也可以将您的令牌存储为机密并设置矩阵,如:
strategy:
matrix:
token: ["${{secrets.token1}}", "${{secrets.token2}}", etc...]
Run Code Online (Sandbox Code Playgroud)
不过,我还没有测试过这个。
我发现了一个使秘密令牌起作用的技巧:
token1,token2等strategy:
matrix:
token: [token1, token2]
Run Code Online (Sandbox Code Playgroud)
env:
token: ${{secrets[matrix.token]}}
Run Code Online (Sandbox Code Playgroud)
${{env.token}}(在表达式上下文中操作时)或$token(在 bash 中)。环境变量仍然是一个秘密,所以你不会丢失任何东西。