如何通过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
相关产品推荐
相关产品推荐

