如何在GitHub Actions中对多行敏感值实现完整掩码隐藏?
问题原因
GitHub Actions 内置的add-mask命令单次调用仅支持对单行字符串添加掩码。直接传入多行JSON变量时,变量中的换行符会截断命令,实际只有第一行内容被注册为需要掩码的敏感值,剩余内容会被直接作为普通文本输出到日志,因此出现部分明文泄露的问题。
解决方案
通用兼容方案
对多行敏感值的每一行单独调用add-mask注册,再额外对完整的多行值注册一次掩码,覆盖所有泄露场景:
- id: sets-a-secret run: | local_secret=$(doppler secrets get GAR_JSON_KEY --plain) # 逐行注册掩码,保留每行原始格式 while IFS= read -r line; do echo "::add-mask::$line" done <<< "$local_secret" # 注册完整多行值的掩码,覆盖整段输出场景 echo "::add-mask::$local_secret" # 设置输出 echo "::set-output name=my-secret::$local_secret" env: DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }}
新版输出语法适配(推荐)
旧版::set-output命令已被官方标记为废弃,推荐使用GITHUB_OUTPUT环境变量的方式传递输出,安全性更高:
- id: sets-a-secret run: | local_secret=$(doppler secrets get GAR_JSON_KEY --plain) # 逐行注册掩码,保留每行原始格式 while IFS= read -r line; do echo "::add-mask::$line" done <<< "$local_secret" # 注册完整多行值的掩码 echo "::add-mask::$local_secret" # 写入多行输出到GITHUB_OUTPUT echo "my-secret<<EOF" >> $GITHUB_OUTPUT echo "$local_secret" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT env: DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }}
内容的提问来源于stack exchange,提问作者Gajus
相关产品推荐
相关产品推荐

