Azure构建流水线,Docker Compose - 设置环境变量

8

我有一个构建流程,运行一个带有某些Java程序的Docker镜像,使用Maven运行。

enter image description here

所选的管道步骤运行自动化测试正在启动docker-compose,在其中启动我的Java程序。正如您所看到的,我还设置了系统环境值FEATURES_LIST并赋以一些测试值。现在,在我的Java程序中,我尝试返回与环境变量类似的值:

System.getenv("FEATURES_LIST");

但是它从未发现它,如果在另一方面,我在我的Docker Compose文件中指定环境变量,它会找到它(在Docker Compose文件底部设置了一些不同的环境变量,见下文)。

version: '3.4'

services:

  # SELENIUM GRID
  selenium-hub:
    image: selenium/hub
    ports:
      - 4444:4444

  chrome:
    image: selenium/node-chrome-debug
    ports:
      - 5900:5900
    environment:
      - HUB_PORT_4444_TCP_ADDR=selenium-hub
      - HUB_PORT_4444_TCP_PORT=4444
    depends_on:
      - selenium-hub

  # AUTOMATION PROJECT
  image_name:
    image: imagepathhere:latest
    volumes:
      - ./:/usr/src/app/
    network_mode: "host"
    depends_on:
      - chrome
    environment:
      - TARGET_TEST_ENV=uat

问题在于,如果我可以在Azure构建管道内指定环境变量,那么我的生活将变得更加轻松,我是否做错了什么?

1个回答

10

在Docker Compose任务中,“环境变量”不能将变量注入到容器中,因此Java应用程序无法读取它们,但在过程中它们将在代理中可用。

这些变量是用于在docker-compose.yml中以以下方式使用:${variableName}

因此,您可以在Docker Compose任务中定义一个变量:FEATURE_LIST=blabla,并在docker-compose.yml中将变量注入到容器中:

image:ubuntu:latest
environment:
  - FEATURE_LIST=${FEATURE_LIST}

这样,您可以在Azure构建管道中指定环境变量(但您还必须在docker-compose.yml中定义它们)。


我该如何使用它来部署一个Docker镜像? - Enrico
当我将它作为构建参数添加时,似乎它不起作用:image: someimage
build:
context: .
args: - BUILD_VERSION=${BUILD_VERSION}这应该在执行ARG BUILD_VERSION时在Dockerfile中被捕获,但实际上并没有。
- Stefan Iancu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接