You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Azure Pipeline在AWS EC2中设置环境变量

解决Azure DevOps Pipeline部署Django到AWS EC2时Docker环境变量设置问题

你的核心问题是当前SSH任务里的环境变量没有传递到Docker容器中,以下是几种可行的解决方案:

方案1:直接在docker run中用-e参数指定环境变量

这是最直观的方式,逐个将Azure Pipeline变量传递给容器:

- task: SSH@0
  displayName: Restart Docker Container
  inputs:
    sshEndpoint: "TMC AWS EC2 Stage Authentication"
    runOptions: "inline"
    inline: |
      sudo docker stop $(containerName)
      sudo docker rm $(containerName)
      sudo docker run -d -p 80:8000 \
        -e DEBUG=$(DEBUG) \
        # 按需添加其他环境变量
        -e DATABASE_URL=$(DATABASE_URL) \
        -e SECRET_KEY=$(SECRET_KEY) \
        --name $(containerName) \
        $(AWS_ECR_REPOSITORY_NAME)/${{ parameters.imageName }}:${{ parameters.environment }}-latest
  • 原理:-e KEY=VALUE会直接将变量注入容器环境,Azure Pipeline会自动替换$(DEBUG)这类变量为实际值。

方案2:用--env-file批量加载环境变量(适合变量较多的场景)

先在EC2上临时生成环境变量文件,再让Docker加载:

- task: SSH@0
  displayName: Restart Docker Container
  inputs:
    sshEndpoint: "TMC AWS EC2 Stage Authentication"
    runOptions: "inline"
    inline: |
      # 生成临时环境变量文件
      cat > /tmp/django_env << EOF
      DEBUG=$(DEBUG)
      DATABASE_URL=$(DATABASE_URL)
      SECRET_KEY=$(SECRET_KEY)
      EOF
      sudo docker stop $(containerName)
      sudo docker rm $(containerName)
      sudo docker run -d -p 80:8000 \
        --env-file /tmp/django_env \
        --name $(containerName) \
        $(AWS_ECR_REPOSITORY_NAME)/${{ parameters.imageName }}:${{ parameters.environment }}-latest
      # 清理临时文件
      rm /tmp/django_env

方案3:通过sudo -E传递当前shell环境变量(不推荐)

如果需要复用当前shell的环境变量,可给sudo加-E参数保留环境:

- task: SSH@0
  displayName: Restart Docker Container
  inputs:
    sshEndpoint: "TMC AWS EC2 Stage Authentication"
    runOptions: "inline"
    inline: |
      export DEBUG=$(DEBUG)
      export DATABASE_URL=$(DATABASE_URL)
      sudo -E docker stop $(containerName)
      sudo -E docker rm $(containerName)
      sudo -E docker run -d -p 80:8000 \
        --name $(containerName) \
        $(AWS_ECR_REPOSITORY_NAME)/${{ parameters.imageName }}:${{ parameters.environment }}-latest
  • 注意:sudo默认会重置环境,-E依赖EC2的sudo配置,稳定性不如前两种方案。

额外注意事项

  • 确保Azure Pipeline中的变量(如DEBUG)已正确配置,保密变量需勾选"Allow access to this variable from scripts"才能被SSH任务读取。
  • 确认Django代码中已正确从环境变量读取配置,例如使用os.getenv('DEBUG', 'False')。

内容的提问来源于stack exchange,提问作者Alberto Sanmartin Martinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:53:36