如何在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条件:
- 在仓库中创建复合动作文件
.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
- 在主工作流中调用该复合动作:
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
相关产品推荐
相关产品推荐

