多重作业和部署保护

问题描述 投票:0回答:1

我有一个包含多个执行部署任务的作业的工作流程。我使用矩阵策略将它们部署在多个环境中,例如

dev
tst
stg
。所以每个作业的策略配置如下

    strategy:
      matrix:
        target_env: ${{ fromJson(needs.determine_target_env.outputs.target_env) }}

此外,如果部署的环境是 tst 或 stg,我需要有人来审查部署(开发人员不需要审查)。我在 GitHub 中创建了环境为

test-environment
stg-environment
并按如下方式使用它们

environment: >-
        ${{ 
          matrix.target_env == 'tst' && 'test-environment' ||
          matrix.target_env == 'stg' && 'stage-environment' ||
          ''
        }}

这会触发批准,审核者可以批准/拒绝部署。这是这个问题:

  1. 由于我有几份工作,它一直要求所有工作都获得批准

  2. 如果我将环境移动到首先执行的单独作业(见下文),则无法捕获该拒绝或批准的输出,因为当被拒绝时,工作流程就会失败,并且如果我提供

    continue-on-error
    对于该工作,即使它被拒绝,它也会将其标记为
    success

      environment_approval:
        needs: determine_target_env
        runs-on: [default]
        strategy:
          matrix:
            target_env: ${{ fromJson(needs.determine_target_env.outputs.target_env) }}
          fail-fast: false
        continue-on-error: true //If this is not set, rejections marks this job as failure. If it is set, the job is always a success.
        outputs:
          approval_status: ${{ steps.check_approval.outcome }}
        environment: >-
          ${{ 
            matrix.target_env == 'tst' && 'test-environment' ||
            matrix.target_env == 'stg' && 'stage-environment' ||
            ''
          }}
        steps:
          - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
            with:
              fetch-depth: 0
          - name: Check approval status
            continue-on-error: true
            id: check_approval
            run: |
              echo "status=success" >> $GITHUB_OUTPUT
    

是否有一种集中方式来处理部署保护并将其应用到工作流程中的所有作业?

我也尝试过使用

  • 复合操作,这没有帮助,因为它不支持
    environment:
    上下文
  • 可重复使用的操作,与内联使用相同
github github-actions
1个回答
0
投票

我的方法是为每项工作设置正确的“如果”条件。

举个例子:

      - name: Check approval status
        if: matrix.target_env == '<env>'
        continue-on-error: true
        id: check_approval
        run: |
          echo "status=success" >> $GITHUB_OUTPUT
© www.soinside.com 2019 - 2024. All rights reserved.