Can';t访问我的Docker堆栈Yaml文件中的Azure管道变量
我想从Azure管道部署Docker堆栈。我设置了一些变量,并在Docker堆栈文件中调用这些变量。但是,docker堆栈文件中没有读取我的环境变量我的问题:有没有解释为什么我不能读取yaml文件中的环境变量? 下面是我所有的变量 这是我的docker堆栈配置Can';t访问我的Docker堆栈Yaml文件中的Azure管道变量,azure,docker,azure-devops,azure-pipelines,Azure,Docker,Azure Devops,Azure Pipelines,我想从Azure管道部署Docker堆栈。我设置了一些变量,并在Docker堆栈文件中调用这些变量。但是,docker堆栈文件中没有读取我的环境变量我的问题:有没有解释为什么我不能读取yaml文件中的环境变量? 下面是我所有的变量 这是我的docker堆栈配置 version: "3.1" services: postgres: image: "postgres" volumes: - /home/db-postgres:
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
您可以在其他项目中检查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: |
sudo docker stack deploy ...
displayName: 'Bash Script'
enabled: false
env:
MAIL_USERNAME: $(MAIL_USERNAME)
MAIL_PASSWORD: $(MAIL_PASSWORD)
APP_ADMINS: $(APP_ADMINS)
更新:
对于bash任务,您可以尝试使用env字段映射变量。见下文:
- 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: |
sudo docker stack deploy ...
displayName: 'Bash Script'
enabled: false
env:
MAIL_USERNAME: $(MAIL_USERNAME)
MAIL_PASSWORD: $(MAIL_PASSWORD)
APP_ADMINS: $(APP_ADMINS)
这回答了你的问题吗?不我认为我在docker堆栈文件中设置变量的方式很好,因为它在其他项目中工作。然而,我感觉我的变量不能从Docker文件中访问,这是这个项目非常特殊的一点。谢谢你有趣的评论。我用azure yml脚本编辑了我的邮件。您知道我如何按照您的建议编辑它吗?您可以在bash任务的
env
字段中映射变量。请参阅上面的更新。我在bash任务中尝试了映射,但也没有成功。还有其他想法吗?请注意,我在azure管道脚本的开始部分使用了一些其他环境变量,它工作正常(登录到我的注册表),是因为所有变量都无法访问,还是仅机密变量无法访问?在我的例子中,secrets变量似乎无法访问