You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions工作流中基于布尔条件执行步骤块

解决GitHub Actions中基于单个条件执行多步骤的问题

你可以通过两种方式避免重复添加if条件,实现单个布尔变量控制多步骤执行:

方案一:复用条件表达式(无需额外文件)

将判断条件定义为环境变量,后续步骤直接引用该变量,只需编写一次条件逻辑:

name: ci

on:
  push:
    branches:
      - 'main'
env:
  # 定义条件变量,仅需修改此处即可调整判断逻辑
  SHOULD_EXECUTE_DOCKER_STEPS: ${{ vars.IS_CONDITION_MET == 'true' }}

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Login to Docker Hub
        uses: docker/login-action@v3
        if: ${{ env.SHOULD_EXECUTE_DOCKER_STEPS }}
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v5
        if: ${{ env.SHOULD_EXECUTE_DOCKER_STEPS }}
        with:
          context: .
          push: true
          tags: user/app:latest

方案二:使用复合动作封装步骤(更优雅的封装方式)

将需要条件执行的步骤打包为自定义复合动作,主工作流中只需调用该动作并添加一次if条件:

  1. 在仓库中创建复合动作文件 .github/actions/docker-push/action.yml:
name: 'Docker Login & Push'
description: '完成Docker Hub登录并构建推送镜像'
runs:
  using: 'composite'
  steps:
    - name: Login to Docker Hub
      uses: docker/login-action@v3
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}
    - name: Build and push
      uses: docker/build-push-action@v5
      with:
        context: .
        push: true
        tags: user/app:latest
  1. 在主工作流中调用该复合动作:
name: ci

on:
  push:
    branches:
      - 'main'

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Execute Docker Login & Push
        uses: ./.github/actions/docker-push
        if: ${{ vars.IS_CONDITION_MET == 'true' }}

方案对比

  • 方案一:无需额外文件,实现成本低,适合仅在当前工作流中复用少量步骤的场景。
  • 方案二:逻辑封装性更强,适合需要在多个工作流中重复使用这组步骤,或步骤数量较多的场景。

内容的提问来源于stack exchange,提问作者drmaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:05:13