GitHub Actions同步骤引用环境变量失败,求解决方案
问题原因
GitHub Actions 中,写入 $GITHUB_ENV 的环境变量不会立即在当前步骤的shell会话中生效,而是要等到整个步骤执行完成后,才会被加载到工作流的环境上下文里。
具体到你的代码:
echo "image=2.1" >> $GITHUB_ENV只是把变量写入了文件,但当前shell还没读取这个文件,所以直接用$image找不到值;${{env.image}}是GitHub在步骤执行前就完成渲染的模板语法,这时候image还没被写入GITHUB_ENV,所以渲染结果是空字符串。
解决方案
你可以根据需求选择以下两种方式:
方案1:先在shell中定义变量,再批量写入GITHUB_ENV
先在当前shell里定义好所有需要的变量,再把它们写入$GITHUB_ENV,这样既可以在当前shell中使用,也能传递给后续步骤:
jobs: test-commands: runs-on: ubuntu-latest steps: - run: | image="2.1" image_ref="$image" image_ref_2="$image" # 将变量写入GITHUB_ENV echo "image=$image" >> $GITHUB_ENV echo "image_ref=$image_ref" >> $GITHUB_ENV echo "image_ref_2=$image_ref_2" >> $GITHUB_ENV - run: echo ${{env.image}} ${{env.image_ref}} ${{env.image_ref_2}}
方案2:手动加载GITHUB_ENV到当前shell
如果需要在写入$GITHUB_ENV后立即在当前步骤中使用这些变量,可以通过source $GITHUB_ENV命令让当前shell读取并加载这个文件的内容:
jobs: test-commands: runs-on: ubuntu-latest steps: - run: | echo "image=2.1" >> $GITHUB_ENV # 加载刚写入的环境变量到当前shell source $GITHUB_ENV echo "image_ref=$image" >> $GITHUB_ENV echo "image_ref_2=$image" >> $GITHUB_ENV - run: echo ${{env.image}} ${{env.image_ref}} ${{env.image_ref_2}}
这两种方案都能让image_ref和image_ref_2正确获取到值,并在后续步骤中输出。
内容的提问来源于stack exchange,提问作者sinha-shaurya
相关产品推荐
相关产品推荐

