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
相关产品推荐
相关产品推荐

