GitHub Actions中环境变量替换失效问题排查
问题原因及解决方法
问题出在第一步创建模板文件时,bash会自动展开here-doc中的变量,而此时CLIENT_ID和CLIENT_SECRET并未定义,导致模板文件中的占位符被替换为空字符串。后续envsubst执行时,没有可替换的占位符,所以最终文件中这两个字段是空的。
解决方法是对here-doc的结束标记EOF添加单引号,阻止bash提前展开变量:
修正后的第一步步骤
- name: create the template for mdm file shell: bash run: | cat > mdm.xml.template <<'EOF' <dict> <key>organization</key> <string>myorg</string> <key>auth_client_id</key> <string>${CLIENT_ID}</string> <key>auth_client_secret</key> <string>${CLIENT_SECRET}</string> </dict> EOF
这样模板文件会保留${CLIENT_ID}和${CLIENT_SECRET}的原始字符串,当第二步执行envsubst时,就能正确替换为env字段中定义的FOO和BAR值。
本地执行时正常是因为你先export了变量,创建模板时变量已经存在,bash展开后是正确的值;但在GitHub Actions的第一步中这些变量未定义,所以展开为空。使用单引号包裹EOF可以避免这个问题,无论变量是否存在,都会保留占位符。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

