如何用 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 文件的整行。

是否可以实现以下内容?

  1. 我想要带有占位符的 .env 文件(.env 文件内容):
    <...>
    PORT=<BITBUCKET_VARIABLE_PORT>
    HOST=<BITBUCKET_VARIABLE_HOST>
    <...>
  1. 替换 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