Rah*_*mar 8 yaml github github-actions
我正在尝试创建一个如下所示的工作流程,其中矩阵不仅仅包含一项作业,而是包含多个作业,对于我们想要构建、测试和部署的每个环境。
如果环境中的某个步骤失败,则不应运行该环境的后续步骤。
矩阵就像["Env A", "Env B", ... , "Env n"]
有没有其他方法可以在不重复代码的情况下做到这一点?
您可以为每个环境使用具有不同输入/秘密的可重用工作流程。它也适用于矩阵。
例子:
使用包含 3 个作业的第一个工作流程:
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"
Run Code Online (Sandbox Code Playgroud)
通过这样的可重用工作流程:
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 }}"
Run Code Online (Sandbox Code Playgroud)
在矩阵策略中使用时max-parallel: 1
,会遵守用作矩阵输入的列表的顺序,并且矩阵运行将遵循相同的顺序(更多详细信息请参考)。
请注意,如果删除该max-parallel: 1
字段,工作流程将执行得更快(因为所有作业将并行运行),并且仍将在每个环境中执行构建、测试和部署操作。
问题是,根据您的上下文,您可能希望先在一个环境中运行部署,然后再在其他环境中运行它。
以下max-parallel: 1
是在矩阵策略中使用上述实现(使用其他作业名称)后运行的工作流的输出。
观察:Github 工作流程运行图像 UI 没有帮助,但您可以在左侧看到每个作业都已按照您在问题中的预期执行。
最后一个作业等待所有可重用作业运行所有 3 个操作(构建、测试和部署)。
这max-parallel: 1
是没有在矩阵策略中使用的示例。正如您所看到的,它要快得多,但是可能不遵守矩阵执行顺序。
归档时间: |
|
查看次数: |
4308 次 |
最近记录: |