簡體   English   中英

無法訪問我的 Docker 堆棧 Yaml 文件中的 Azure 管道變量

[英]Can't access Azure pipeline variables in my Docker stack Yaml file

我想從 Azure 管道部署一個 Docker 堆棧。 我設置了一些變量,我在 Docker 堆棧文件中調用這些變量。 但是,docker 堆棧文件中沒有讀取我的環境變量。 我的問題:有什么解釋為什么我無法讀取 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

其他項目中yaml流水線的Agent Specification可以查看。 他們可能會使用不同的代理。

我創建了一個測試管道,發現 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 任務,您可以嘗試將 env 字段用於 map 變量。 見下文:

- bash: |
    sudo docker stack deploy ...  
  displayName: 'Bash Script'
  enabled: false
  env:
    MAIL_USERNAME: $(MAIL_USERNAME)
    MAIL_PASSWORD: $(MAIL_PASSWORD)
    APP_ADMINS: $(APP_ADMINS)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM