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
相关产品推荐
相关产品推荐

