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

GitHub Actions步骤默认是否采用set -e语义?

GitHub Actions 多命令执行的依赖逻辑问题

首先明确结论:你没误解官方文档,默认情况下,你写的那个工作流模式确实会出现第一个命令失败后,第二个命令仍执行的情况,必须手动加set -e或者显式指定shell: bash,才能实现「第一个命令成功才执行第二个」的预期。

具体原因拆解

  1. 默认shell的行为
    在Linux环境下,GitHub Actions默认使用的是sh而非bash。官方文档明确说明:只有显式指定shell: bash时,才会自动启用set -eo pipefail的快速失败特性——也就是命令返回非0时立即终止脚本。而默认的sh并没有开启set -e语义,所以脚本会忽略前面命令的失败,继续执行后续命令。

  2. Stack Overflow答案的问题
    那篇社区答案大概率是基于旧版本的GitHub Actions行为,或者作者混淆了默认shell的配置。当前官方文档的表述是准确的,默认情况下sh不会自动开启快速失败。

实现预期行为的三种可行方案

  • 方案一:显式指定shell: bash
    直接在步骤里添加shell配置,GitHub会自动为bash注入set -eo pipefail,无需手动设置:

    - name: Install and Build 🔧
      shell: bash
      run: |
        npm ci
        npm run build
    
  • 方案二:手动添加set -e
    不管用默认的sh还是指定其他shell,在脚本开头加上set -e,就能让脚本在第一个失败命令处停止:

    - name: Install and Build 🔧
      run: |
        set -e
        npm ci
        npm run build
    
  • 方案三:用&&连接命令
    这是最直观的写法,不需要依赖shell的set -e配置,只要前一个命令返回0,才会执行后一个:

    - name: Install and Build 🔧
      run: npm ci && npm run build
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:40:28