如何用 bitbucket 管道中的部署变量替换 .env 文件占位符
How to replace .env file placeholders with deployment variables in bitbucket pipeline
我有一个 bitbucket 存储库。
我在 bitbucket 中有部署环境变量:
BITBUCKET_VARIABLE_PORT : 8080
在我的 bitbucket-pipelines.yaml
脚本中,我可以像这样将变量写入 .env 文件:
<...>
step: &deploy-to-environment
name: Deploy to environment
deployment: environment
caches:
- node
script:
- echo Create .env file
- echo "PORT=$BITBUCKET_VARIABLE_PORT" > .env
- cat .env
<...>
但我想避免重写 .env 文件的整行。
是否可以实现以下内容?
- 我想要带有占位符的 .env 文件(.env 文件内容):
<...>
PORT=<BITBUCKET_VARIABLE_PORT>
HOST=<BITBUCKET_VARIABLE_HOST>
<...>
- 替换 yaml 脚本部分中的这些占位符:
<...>
step: &deploy-to-environment
name: Deploy to environment
deployment: environment
caches:
- node
script:
- <replace_placeholders_here_in_script>
<...>
您可以使用 sed 替换 .env 文件中的字符串
sed -i "s/BITBUCKET_VARIABLE_PORT/...xxxx.../" .env
sed -i "s/BITBUCKET_VARIABLE_HOST/...hostname.../" .env
您也可以使用变量进行替换
MYPORT=XXX
sed -i "s/BITBUCKET_VARIABLE_PORT/$MYPORT/" .env
我最近遇到了同样的问题,不想将 1 对 1 包含在 env 变量中,我最终做了什么:
#1 在存储库中创建一个 .env.example 文件(此文件将包含此存储库所需的变量,没有不敏感的值或默认值)
APP_NAME=MyApp
APP_ENV=
APP_KEY=
APP_DEBUG=true
然后我创建了一个pipeline.sh
echo "[+] Building enviroment variables"
# Get contents of example file
ENV_CONTENT=$(cat ./.env.example)
# Output the content into sh script
echo "#! /bin/bash
echo \"
${ENV_CONTENT}
\"" > ./env.sh
# sed replace as key=${BITBUCKET_ENV_VARIABLE:-default_value_from_example}
sed -i -E "s/^([A-Z_]+)=(.*)$/=${:-}/g" ./env.sh
chmod +x ./build/env.sh
# Exec the env sh script and output content to .env file
./build/env.sh > ./build/.env
因此,如果您已在 .env.example
APP_NAME
中定义并且还在 bitbucket 存储库变量中定义了它,那么最终的 .env
将具有键 APP_NAME=value_of_bitbucket_variable
我有一个 bitbucket 存储库。 我在 bitbucket 中有部署环境变量:
BITBUCKET_VARIABLE_PORT : 8080
在我的 bitbucket-pipelines.yaml
脚本中,我可以像这样将变量写入 .env 文件:
<...>
step: &deploy-to-environment
name: Deploy to environment
deployment: environment
caches:
- node
script:
- echo Create .env file
- echo "PORT=$BITBUCKET_VARIABLE_PORT" > .env
- cat .env
<...>
但我想避免重写 .env 文件的整行。
是否可以实现以下内容?
- 我想要带有占位符的 .env 文件(.env 文件内容):
<...>
PORT=<BITBUCKET_VARIABLE_PORT>
HOST=<BITBUCKET_VARIABLE_HOST>
<...>
- 替换 yaml 脚本部分中的这些占位符:
<...>
step: &deploy-to-environment
name: Deploy to environment
deployment: environment
caches:
- node
script:
- <replace_placeholders_here_in_script>
<...>
您可以使用 sed 替换 .env 文件中的字符串
sed -i "s/BITBUCKET_VARIABLE_PORT/...xxxx.../" .env
sed -i "s/BITBUCKET_VARIABLE_HOST/...hostname.../" .env
您也可以使用变量进行替换
MYPORT=XXX
sed -i "s/BITBUCKET_VARIABLE_PORT/$MYPORT/" .env
我最近遇到了同样的问题,不想将 1 对 1 包含在 env 变量中,我最终做了什么:
#1 在存储库中创建一个 .env.example 文件(此文件将包含此存储库所需的变量,没有不敏感的值或默认值)
APP_NAME=MyApp
APP_ENV=
APP_KEY=
APP_DEBUG=true
然后我创建了一个pipeline.sh
echo "[+] Building enviroment variables"
# Get contents of example file
ENV_CONTENT=$(cat ./.env.example)
# Output the content into sh script
echo "#! /bin/bash
echo \"
${ENV_CONTENT}
\"" > ./env.sh
# sed replace as key=${BITBUCKET_ENV_VARIABLE:-default_value_from_example}
sed -i -E "s/^([A-Z_]+)=(.*)$/=${:-}/g" ./env.sh
chmod +x ./build/env.sh
# Exec the env sh script and output content to .env file
./build/env.sh > ./build/.env
因此,如果您已在 .env.example
APP_NAME
中定义并且还在 bitbucket 存储库变量中定义了它,那么最终的 .env
将具有键 APP_NAME=value_of_bitbucket_variable