on:
push:
jobs:
common-job-1:
runs-on: ubuntu-latest
outputs:
environments: ${{ steps.environments.outputs.environments }}
steps:
- name: Build Environments Array
id: environments
run: |
myArray=()
myArray+=("env1")
myArray+=("env2")
myArray+=("env3")
myArray=$(jq --compact-output --null-input '$ARGS.positional' --args -- "${myArray[@]}")
echo "Updated environments list: $myArray"
echo "environments=$myArray" >> $GITHUB_OUTPUT
shell: bash
reusable:
needs: [common-job-1]
strategy:
matrix:
environment: ${{ fromJSON(needs.common-job-1.outputs.environments) }}
fail-fast: true
max-parallel: 1
# environment:
# name: ${{ matrix.environment }}
uses: OWNER/REPO/.github/workflows/reusable.yml@main
with:
stage: ${{ matrix.environment }}
common-job-2:
needs: [common-job-1, reusable]
runs-on: ubuntu-latest
steps:
- name: Do something
run: echo "Do something"
注意:工作流文件可以在这里找到
使用这样的可重复使用的工作流:
on:
workflow_call:
inputs:
stage:
required: true
type: string
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Build in ${{ inputs.stage }}
run: |
echo "Build in ${{ inputs.stage }}"
test:
runs-on: ubuntu-latest
steps:
- name: Test in ${{ inputs.stage }}
run: |
echo "Test in ${{ inputs.stage }}"
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy in ${{ inputs.stage }}
run: |
echo "Deploy in ${{ inputs.stage }}"
注意:工作流文件可以在这里找到
在矩阵策略中使用max-parallel: 1
时,将尊重作为矩阵输入的列表的顺序,并且矩阵运行将按照相同的顺序进行(更多详细信息的参考)。
请注意,如果删除max-parallel: 1
字段,工作流将以更快的速度执行(因为所有作业将并行运行),并且仍将在每个环境中执行构建、测试和部署操作。
问题在于,根据您的上下文,您可能希望在其他环境中运行部署之前先在一个环境中运行它。
max-parallel: 1
在矩阵策略中运行的工作流程的输出。
观察:Github工作流程运行图形界面没有帮助,但是你可以在左侧看到每个作业都按照你在问题中期望的方式执行。max-parallel: 1
。如你所见,速度要快得多,但是矩阵的执行顺序可能不会被遵守。