无法访问我的Docker堆栈Yaml文件中的Azure管道变量

时间:2020-09-01 14:36:58

标签: azure docker azure-devops azure-pipelines

我想从Azure管道部署Docker堆栈。我已经设置了一些变量,并且正在Docker堆栈文件中调用这些变量。但是,我的环境变量均未在docker stack文件中读取。 我的问题:为什么我无法读取yaml文件中的环境变量?

下面是我所有的变量

enter image description here

这是我的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

1 个答案:

答案 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)