如果 repo 变量存在则跳过 Github 作业

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

我们能够在 gitlabci 上执行此操作,但在我们转移到 github actions 之后就不行了。 如果为存储库设置了变量 DEPLOY=false,我们希望跳过某些作业,例如 *building docker images、部署 helm chart 等)。我们在许多存储库中使用通用的可重用工作流程。

jobs:
  dockerbuildpush:
    runs-on: [self-hosted, Ubuntu-22.04]
    if: env.BUILD != false

我已经尝试过 ${{ }} 语法,但它不被视为有效语法。看来我可以对动作做同样的事情,但不能对工作或工作流程做同样的事情。工作流包含许多作业,作业包含许多操作。我可以在 if 中做 env.WHATEVER:用于操作而不是用于作业或工作流?!

github github-actions cicd
2个回答
0
投票

您可以在工作和步骤级别使用

If
条件检查。

样本.yml

name: Sample

on:
  push:
 
env:
    PUSH: true
  
jobs:
  dockerbuildpush:
    if: ${{ vars.DEPLOY != 'false' }}
    uses: owner/repo/.github/workflows/reusable-workflow.yml@main
    with:
        key1: value1
        key2: value2
        push: ${{ env.push }}
    secrets: inherit

reusable-workflow.yml

name: Sample

on:
    workflow_call:
        inputs:
            push:
                required: true
                type: boolean
            key1:
                required: true
                type: string
            key2:
                required: false
                type: string
                default: ''
        secrets:
            ABC: 
                required: true
            PQR:
                required: true

jobs:
    buildpush:
        runs-on: [self-hosted, Ubuntu-22.04]
        steps:
            - name: Build
              run: ..
            - if: ${{ inputs.build != 'false' }}
              name: Push
              run: ..

sample.yml
中,只有
dockerbuildpush
变量为
DEPLOY
时,
true
作业才会运行,而在
reusable-workflow.yml
步骤中,
push
只有在输入
push
true

时才会运行

0
投票

在其他此类情况下,唯一对我们始终有效的是将存储库名称添加到可重用工作流程中的 if 条件中。

if: github.repository != 'my-org/my-repository'

如果明天我们需要从此类可重用的工作流程中排除更多的回购协议,那么我们会这样做

if: github.repository != 'my-org/my-repository' || 'my-org/my-repository1'

如果包含此类可重用工作流程的回购数量多于要排除的回购数量,那么我们始终可以使用

==
条件而不是
!=
条件。这也将修改的负担转移给了 devops,而不是 repo 的开发者/贡献者/维护者,这是应该的方式。如果将来决定从本地 github 迁移到非本地 github 或从一个 github 服务器迁移到另一个 github 服务器,那么大多数工作流配置都在 yaml 中,而不是 repo 中的 vars。

© www.soinside.com 2019 - 2024. All rights reserved.