在带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。
原代码报错的原因
- 当步骤设置
if: always()时,success()表达式返回的是整个工作流完成后的最终状态,而非前置步骤的状态,不符合你的需求。 - 在
github-script的with参数中直接嵌套${{ ... }}表达式,会被GitHub Actions的语法解析器误处理,导致JSON格式错误。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

