如何在JavaScript Actions中根据执行状态执行不同Post操作?
在JavaScript Actions的Post脚本中获取主动作执行状态的方案
可以在post.js中获取主动作的执行状态,进而根据状态执行不同逻辑(比如发送不同的第三方通知),以下是两种可靠的实现方式:
方法一:使用官方@actions/core的状态存储(推荐)
GitHub Actions提供的@actions/core库专门支持主动作与post动作之间共享数据,通过saveState和getState方法实现状态传递:
- 在主脚本
index.js中保存执行状态
将主逻辑包裹在try-catch中,捕获执行结果并保存状态:
const core = require('@actions/core'); try { // 执行主动作核心逻辑 console.log('运行主动作任务'); // 执行成功时保存状态 core.saveState('actionStatus', 'success'); } catch (error) { // 标记动作失败,并保存失败状态 core.setFailed(error.message); core.saveState('actionStatus', 'failure'); }
- 在post脚本
post.js中读取状态并分支处理
读取保存的状态,根据结果执行不同的通知逻辑:
const core = require('@actions/core'); const actionStatus = core.getState('actionStatus'); if (actionStatus === 'success') { // 发送成功通知的逻辑 console.log('向第三方服务发送执行成功通知'); } else if (actionStatus === 'failure') { // 发送失败通知的逻辑 console.log('向第三方服务发送执行失败通知'); }
方法二:通过环境变量传递状态
也可以通过环境变量传递状态,主脚本将执行结果写入环境变量,post脚本读取该变量:
- 主脚本
index.js中设置环境变量
const core = require('@actions/core'); try { // 主逻辑执行 core.exportVariable('ACTION_EXEC_STATUS', 'success'); } catch (error) { core.setFailed(error.message); core.exportVariable('ACTION_EXEC_STATUS', 'failure'); }
- post脚本
post.js中读取环境变量
const actionStatus = process.env.ACTION_EXEC_STATUS; if (actionStatus === 'success') { // 成功通知逻辑 } else { // 失败通知逻辑 }
注意:相比环境变量,
saveState是官方专门为动作内主/Post环节共享数据设计的方案,优先级更高,也更可靠(比如主脚本异常退出时,saveState仍能在try-catch的捕获流程中执行)。
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

