如何在GitHub Actions中通过环境变量传递.pem密钥避免YAML解析问题
解决GitHub Actions传递PEM密钥作为环境变量的YAML解析错误
问题根源在于PEM密钥包含换行符和---开头/结尾的行,YAML解析器会把---误判为文档分隔符,即使使用双引号包裹也无法完全规避多行内容的解析问题。以下是几种可行的解决方法:
方法1:使用YAML块标量语法保留多行格式
直接在环境变量赋值时使用YAML的|块标量符号,它会完整保留密钥的换行和格式,避免解析错误:
- name: Do Certain Step run: | # 直接通过$GITHUBAPP_KEY调用环境变量即可 Insert fancy command here env: GITHUBAPP_KEY: | ${{ secrets.GITHUBAPP_KEY }}
方法2:对PEM密钥进行Base64编码后传递
- 本地将PEM密钥文件编码为Base64字符串:
base64 -i your-private-key.pem > encoded-key.txt - 将
encoded-key.txt中的内容存入GitHub Secrets(命名为GITHUBAPP_KEY_B64) - 工作流中解码后使用:
- name: Do Certain Step run: | # 解码并写入文件 echo "$GITHUBAPP_KEY_B64" | base64 -d > private-key.pem # 赋予文件必要权限 chmod 600 private-key.pem # 执行后续命令 Insert fancy command here env: GITHUBAPP_KEY_B64: ${{ secrets.GITHUBAPP_KEY_B64 }}
方法3:直接将密钥写入文件(绕过环境变量传递)
如果你的命令需要读取密钥文件而非环境变量,可以直接在run步骤中将密钥写入文件,避免环境变量的解析问题:
- name: Do Certain Step run: | # 将密钥写入文件 echo "${{ secrets.GITHUBAPP_KEY }}" > private-key.pem # 设置文件权限(避免权限过高报错) chmod 600 private-key.pem # 执行依赖密钥文件的命令 Insert fancy command here
内容的提问来源于stack exchange,提问作者yung peso
相关产品推荐
相关产品推荐

