我想从Azure管道部署Docker堆栈。我已经设置了一些变量,并且正在Docker堆栈文件中调用这些变量。但是,我的环境变量均未在docker stack文件中读取。 我的问题:为什么我无法读取yaml文件中的环境变量?
下面是我所有的变量
这是我的docker堆栈配置
version: "3.1"
services:
postgres:
image: "postgres"
volumes:
- /home/db-postgres:/data/db
environment:
POSTGRES_PASSWORD: ${POSTGRESPASSWORD}
POSTGRES_DB: ${POSTGRESDB}
main:
command: "flask run --host=127.0.0.1"
image: "personal-image"
ports:
- 5000:5000
environment:
SECRET_KEY: ${FLASK_SERIALIZER_SECRET}
JWT_SECRET_KEY: ${FLASK_JWT_SECRET}
FLASK_APP: app.py
MAIL_USERNAME: ${MAIL_USERNAME}
MAIL_PASSWORD: ${MAIL_PASSWORD}
APP_ADMINS: ${APP_ADMINS}
SQLALCHEMY_DATABASE_URI: ${SQLALCHEMY_DATABASE_URI}
我可以从azure管道yaml文件中读取环境变量...
我不明白的是,在另一个项目中,我正在做完全相同的事情,并且一切正常。
编辑:这是我的azure-pipelines.yml脚本。该代理是自托管的EC2 Linux代理:
steps:
- bash: |
echo $(DOCKERREGISTRY_PASSWORD) | docker login --username $(DOCKERREGISTRY_USER) --password-stdin
displayName: log in to Docker Registry
- bash: |
sudo service docker start
sudo docker stack deploy --with-registry-auth --prune --compose-file stack.staging.yml my_cluster_name
displayName: Deploy Docker Containers
- bash: |
sudo docker system prune --volumes -f
displayName: Clean memory
- bash: |
docker logout
sudo service docker stop
displayName: logout of Docker Registry
答案 0 :(得分:0)
您可以在其他项目中检查yaml管道的代理规范。他们可能使用不同的代理。
我创建了一个测试管道,发现docker堆栈文件中的环境变量无法在mac或ubuntu代理中替换。但它似乎可以在Windows代理中使用。
如果您使用mac或ubuntu代理程序来运行管道。您可能需要在dockerComposeFileArgs
字段中使用定义环境变量。见下文:
- task: DockerCompose@0
displayName: 'Build services'
inputs:
containerregistrytype: 'Container Registry'
dockerRegistryEndpoint: Dockerhost
dockerComposeFileArgs: |
MAIL_USERNAME=$(MAIL_USERNAME)
MAIL_PASSWORD=$(MAIL_PASSWORD)
APP_ADMINS=$(APP_ADMINS)
SQLALCHEMY_DATABASE_URI=$(SQLALCHEMY_DATABASE_URI)
action: 'Build services'
更新:
对于bash任务,您可以尝试使用usig env字段来映射变量。见下文:
- bash: |
sudo docker stack deploy ...
displayName: 'Bash Script'
enabled: false
env:
MAIL_USERNAME: $(MAIL_USERNAME)
MAIL_PASSWORD: $(MAIL_PASSWORD)
APP_ADMINS: $(APP_ADMINS)