如何在 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 

不要忘记使用工件,以便在需要时保存文件以供下一步使用。