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

在带if: always()的actions/github-script步骤中使用success()报错的解决咨询

解决方案

你的问题核心是:在设置了if: always()的github-script步骤中,直接在参数里使用success()表达式会因为上下文和语法解析问题报错,且success()在这里返回的是整个工作流的最终状态,不是前置步骤的状态。以下是两种可行的实现方式:

1. 检查特定前置步骤的执行状态

如果需要精准判断某一个前置步骤是否成功,给目标前置步骤设置id,然后在github-script中通过steps.<step-id>获取其状态:

# 前置步骤(示例)
- name: Build project
  id: build
  run: npm run build

# 你的github-script步骤
- name: Determine color based on build step
  if: always()
  uses: actions/github-script@v6
  with:
    script: |
      // 获取前置步骤的执行结果
      const stepOutcome = steps.build.outcome;
      // 根据结果设置颜色
      const color = stepOutcome === 'success' ? '#36a64f' : '#ecb22e';
      // 后续可使用color变量执行逻辑,比如打印或调用API
      console.log(`Selected color: ${color}`);

这里steps.<step-id>.outcome的可选值包括:success、failure、cancelled、skipped,可以根据需求调整判断逻辑。

2. 检查工作流到当前步骤的整体状态

如果不需要针对单个步骤,而是判断整个工作流在当前步骤之前的全局状态,可以通过context对象获取:

- name: Determine color based on global status
  if: always()
  uses: actions/github-script@v6
  with:
    script: |
      // 获取当前作业的全局状态
      const jobStatus = context.jobStatus;
      const color = jobStatus === 'success' ? '#36a64f' : '#ecb22e';
      console.log(`Selected color: ${color}`);

context.jobStatus的可选值为:success、failure、cancelled。

原代码报错的原因

  1. 当步骤设置if: always()时,success()表达式返回的是整个工作流完成后的最终状态,而非前置步骤的状态,不符合你的需求。
  2. 在github-script的with参数中直接嵌套${{ ... }}表达式,会被GitHub Actions的语法解析器误处理,导致JSON格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:08:10