如何在 bitbucket-pipelines 中将变量传递给 credentials.json?
How to pass variables to credentials.json in bitbucket-pipelines?
我正在使用 bb运行 在本地模拟管道 运行。基本上我需要的(不是问题)是在 GCP 上自动化 terrag运行t 基础设施部署。所以每次用标签推送它都会部署一个特定的环境。
这是我的 bitbucket-pipelines.yml(为 bb运行 简化):
image: alpine/terragrunt:latest
definitions:
steps:
- step: &terragrunt
name: run terragrunt
script:
- cd ./env/dev
- terragrunt validate-all
pipelines:
default:
- step: *terragrunt
当我 运行 使用 bb运行 时一切正常,当我有一个 credentials.json 文件(在 /env/dev 中),其中有一个硬编码的秘密.那么如何将变量添加到 credentials.json 文件,以便管道知道该文件中有一个变量?
例如,如果我在 bitbucket-piplines 控制台中添加一个秘密变量 PRIVATE_KEY
我希望 terrag运行t 阅读这一行
"private_key": "-----BEGIN PRIVATE KEY-----${env:PRIVATE_KEY}\n-----END PRIVATE KEY-----\n",
#I also tried $PRIVATE_KEY and ${PRIVATE_KEY} when running bbrun with -e PRIVATE_KEY=***
在credentials.json中作为变量的值。
我不确定 bb运行 在这里是否是错误的,bitbucket 管道实际上会传递变量值但是当 运行 变量时我得到这个错误:
Error: Error in function call
---
Call to function "jsondecode" failed: invalid character '$' in string escape
code.
我也累了补充:
variables:
PRIVATE_KEY_ID: $PRIVATE_KEY_ID
PRIVATE_KEY: $PRIVATE_KEY
没有成功。
我还尝试使用 envsubst 命令编辑步骤脚本的文件,但效果似乎有点笨。
本质上你想要 运行
cat credentials.json | base64
然后将命令的输出作为名为 CREDS 的变量的秘密值放入管道的存储库中,因此在管道的第一步中设置命令
echo $CREDS | base64 -d > ./wherever/it/is/credentials.json
不要忘记使用工件,以便在需要时保存文件以供下一步使用。
我正在使用 bb运行 在本地模拟管道 运行。基本上我需要的(不是问题)是在 GCP 上自动化 terrag运行t 基础设施部署。所以每次用标签推送它都会部署一个特定的环境。
这是我的 bitbucket-pipelines.yml(为 bb运行 简化):
image: alpine/terragrunt:latest
definitions:
steps:
- step: &terragrunt
name: run terragrunt
script:
- cd ./env/dev
- terragrunt validate-all
pipelines:
default:
- step: *terragrunt
当我 运行 使用 bb运行 时一切正常,当我有一个 credentials.json 文件(在 /env/dev 中),其中有一个硬编码的秘密.那么如何将变量添加到 credentials.json 文件,以便管道知道该文件中有一个变量?
例如,如果我在 bitbucket-piplines 控制台中添加一个秘密变量 PRIVATE_KEY 我希望 terrag运行t 阅读这一行
"private_key": "-----BEGIN PRIVATE KEY-----${env:PRIVATE_KEY}\n-----END PRIVATE KEY-----\n",
#I also tried $PRIVATE_KEY and ${PRIVATE_KEY} when running bbrun with -e PRIVATE_KEY=***
在credentials.json中作为变量的值。
我不确定 bb运行 在这里是否是错误的,bitbucket 管道实际上会传递变量值但是当 运行 变量时我得到这个错误:
Error: Error in function call
---
Call to function "jsondecode" failed: invalid character '$' in string escape
code.
我也累了补充:
variables:
PRIVATE_KEY_ID: $PRIVATE_KEY_ID
PRIVATE_KEY: $PRIVATE_KEY
没有成功。
我还尝试使用 envsubst 命令编辑步骤脚本的文件,但效果似乎有点笨。
本质上你想要 运行
cat credentials.json | base64
然后将命令的输出作为名为 CREDS 的变量的秘密值放入管道的存储库中,因此在管道的第一步中设置命令
echo $CREDS | base64 -d > ./wherever/it/is/credentials.json
不要忘记使用工件,以便在需要时保存文件以供下一步使用。