代码之家  ›  专栏  ›  技术社区  ›  Ihar Dziamidau

如何在比特桶管道中用部署变量替换.env文件占位符

  •  0
  • Ihar Dziamidau  · 技术社区  · 3 年前

    我有一个比特桶存储库。 我在bitbucket中有部署环境变量:

    BITBUCKET_VARIABLE_PORT : 8080
    

    在我的 bitbucket-pipelines.yaml script我可以像这样将变量写入.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文件(.ev文件内容):
        <...>
        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>
        <...>
    
    1 回复  |  直到 3 年前
        1
  •  4
  •   Saboteur    3 年前

    您可以使用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
    
        2
  •  0
  •   SergkeiM    3 年前

    我最近也遇到了同样的问题,不想将env变量1乘1包括在内,我最终做了什么:

    #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_]+)=(.*)$/\1=\${\1:-\2}/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 Repository Variables中定义了它 .env 将具有密钥 APP_NAME=value_of_bitbucket_variable