如何在GitHub Actions矩阵策略中控制Job的执行与跳过?
实现GitHub Actions矩阵Job的条件跳过(整个Job)
要实现满足条件才执行整个矩阵Job、不满足则直接跳过的需求,只需要把条件判断从步骤级别移到Job级别,具体修改如下:
修改后的完整配置
jobs: deploy: runs-on: ubuntu-latest # 关键:在Job级别添加条件判断,决定整个Job是否执行 if: ${{ matrix.deploy_condition }} strategy: matrix: include: - uppercase_env: 'DEV' lowercase_env: 'dev' secrets_prefix: 'dev_' deploy_condition: ${{ contains(github.ref_name, 'develop') && !inputs.env_name }} - uppercase_env: 'TST' lowercase_env: 'tst' secrets_prefix: 'tst_' deploy_condition: ${{ contains(github.ref_name, 'develop') && !inputs.env_name }} - uppercase_env: 'STG' lowercase_env: 'stg' secrets_prefix: 'stg_' deploy_condition: ${{ contains(github.ref_name, 'release') && inputs.env_name == 'STG' }} - uppercase_env: 'PRD' lowercase_env: 'prd' secrets_prefix: 'prd_' deploy_condition: ${{ (contains(github.ref_name, 'release') || contains(github.ref_name, 'hotfix')) && inputs.env_name == 'PRD' }} steps: - name: Do something # 步骤里的if可以移除,因为整个Job已经被条件控制了 run: echo "Deploying to ${{ matrix.lowercase_env }}"
核心修改点
- 修正条件表达式:把原配置里的
&&替换为&&——这是HTML转义字符,在YAML中直接写逻辑与运算符&&即可。 - Job级别添加if判断:在
deployJob的顶层增加if: ${{ matrix.deploy_condition }},GitHub Actions会根据这个条件决定是否创建并执行该矩阵条目对应的Job实例,不满足条件的话会直接标记为"skipped",不会运行任何步骤。 - 移除步骤级别的if:既然整个Job已经被条件控制,步骤里的
if判断可以直接删除,避免冗余。
内容的提问来源于stack exchange,提问作者Lex
相关产品推荐
相关产品推荐

