【发布时间】:2021-03-07 01:48:36
【问题描述】:
我正在使用 bbrun 来模拟本地运行的管道。本质上,我需要(不是问题)是在 GCP 上自动化基础设施的 terragrunt 部署。所以每次推送一个标签时,它都会部署一个特定的环境。
这是我的 bitbucket-pipelines.yml(为 bbrun 简化):
image: alpine/terragrunt:latest
definitions:
steps:
- step: &terragrunt
name: run terragrunt
script:
- cd ./env/dev
- terragrunt validate-all
pipelines:
default:
- step: *terragrunt
当我有一个包含硬编码秘密的 credentials.json 文件(位于 /env/dev 中)时,当我使用 bbrun 运行它时,一切正常。那么如何将变量添加到 credentials.json 文件中,以便管道知道该文件中有一个变量?
例如,如果我在 bitbucket-piplines 控制台 PRIVATE_KEY 中添加一个秘密变量 我想让 terragrunt 读到这一行
"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 中作为变量的值。
我不确定 bbrun 是否在这里出错,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 命令编辑步骤脚本文件,但这似乎有点愚蠢。
【问题讨论】:
-
你可以粘贴你尝试传递
private_key变量时使用的json文件吗? -
在整个凭证文件中通过base64解决它,然后将编码行作为变量添加到管道中,然后回显该变量并将其解码到文件中。
-
很高兴听到 - 你能更清楚地解释你是如何解决它的(附上一些代码等) - 这将对社区非常有益。
-
基本上你想运行
cat credentials.json | base64并将命令的输出作为名为 CREDS 的变量的秘密值放在管道存储库中,所以在第一步管道设置命令echo $CREDS | base64 -d > ./wherever/it/is/credentials.json -
太棒了 :) 你能把它作为答案发布吗?
标签: docker google-cloud-platform continuous-integration bitbucket-pipelines