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

GitHub Actions中如何实现if else if多条件分支判断

GitHub Action 单步骤内实现if/else if多条件判断方案

GitHub Actions 原生的步骤级if字段仅支持返回布尔值决定步骤是否执行,本身不提供分支路由能力,要在单个步骤内实现多分支判断,最稳定通用的方案是直接在步骤的run块内写对应shell的分支逻辑,不需要拆分多个步骤。

通用实现方式

直接在run字段内写shell分支判断,支持任意数量的else if分支,适配绝大多数场景:

  • 先把需要用到的GitHub上下文、表达式计算结果通过env注入环境变量,避免直接在shell中拼接表达式导致的转义问题、特殊字符解析错误
  • 按照目标shell的语法写if/elif/else分支逻辑,把对应场景要执行的命令放到对应分支块里即可

示例配置:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 按场景执行对应逻辑
        # 跨平台运行可以显式指定shell: bash,不用适配Windows的powershell/cmd语法
        shell: bash
        env:
          # 提前把要判断的变量存入环境变量
          TRIGGER_EVENT: ${{ github.event_name }}
          CURRENT_BRANCH: ${{ github.ref_name }}
          IS_TAG: ${{ startsWith(github.ref, 'refs/tags/') }}
        run: |
          if [ "$IS_TAG" = "true" ]; then
            echo "检测到标签推送,执行正式版本发布流程"
            # 对应命令写在这里,比如:
            # npm run publish
          elif [ "$TRIGGER_EVENT" = "pull_request" ]; then
            echo "检测到PR事件,执行代码校验流程"
            # 比如 npm run lint && npm run test
          elif [ "$CURRENT_BRANCH" = "main" ]; then
            echo "检测到main分支推送,执行生产环境部署流程"
            # 比如 npm run build:prod && ./deploy.sh prod
          elif [ "$CURRENT_BRANCH" = "develop" ]; then
            echo "检测到develop分支推送,执行测试环境部署流程"
            # 比如 npm run build:staging && ./deploy.sh staging
          else
            echo "未匹配到特殊规则,执行默认开发构建流程"
            # 比如 npm run build:dev
          fi

注意事项

  • 不要尝试在单个步骤的if字段中硬写多分支逻辑,if仅做布尔判断,无法实现路由分流
  • shell中做字符串比较时,变量两侧要加双引号,避免变量为空时出现语法报错
  • 如果使用Windows自托管runner,不想适配powershell语法的话,给步骤加shell: bash配置即可统一用bash语法写逻辑
  • 判断条件中涉及到GitHub内置表达式的计算(比如startsWith、contains这类函数),统一放到env块里提前计算好,不要放到shell逻辑里处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:01:15