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

GitHub Actions如何在同一作业的不同步骤间存储和读取变量值

问题原因

GitHub Actions 每个 run 步骤都会启动独立的 shell 子进程,步骤执行完成后对应进程会直接销毁。单步骤内通过 export 声明的环境变量仅在当前步骤的 shell 会话内有效,无法穿透到同作业的其他后续步骤,所以Cleanup步骤读不到变量值。

解决方案

使用 GitHub Actions 内置的 $GITHUB_ENV 环境文件持久化变量,所有写入该文件的键值对,会自动注入到当前作业后续所有步骤的环境变量中,后续步骤直接按普通环境变量读取即可。
修正后的完整配置如下:

jobs:
  backup:
    name: "Backup"
    runs-on: self-hosted
    steps:
    - uses: actions/checkout@v2
    - name: Update Config 
      run: |
        echo "ORIGINAL_RDS_MAX_EXEC_TIME=123" >> $GITHUB_ENV
    - name: Create DB Backup
      run: |
         # 该步骤内也可直接读取变量值
         echo $ORIGINAL_RDS_MAX_EXEC_TIME
    - name: Cleanup
      if: always()
      run: |
        echo $ORIGINAL_RDS_MAX_EXEC_TIME # 正常输出123

补充场景说明

  • 多行变量存储:如果变量值包含多行内容,使用分隔符语法写入避免解析错误,示例:
- name: 写入多行变量
  run: |
    echo 'MULTI_LINE_CONTENT<<EOF' >> $GITHUB_ENV
    echo '第一行变量内容' >> $GITHUB_ENV
    echo '第二行变量内容' >> $GITHUB_ENV
    echo 'EOF' >> $GITHUB_ENV
  • 定向传值场景:如果变量不需要对所有后续步骤全局生效,仅要传递给指定步骤,可以使用步骤输出$GITHUB_OUTPUT实现:给定义变量的步骤设置唯一id,后续步骤通过steps.<步骤id>.outputs.<变量名>的格式读取即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:27:22