我有一个构建管道,该管道运行带有使用maven运行的某些Java程序的docker映像。
选定的管道步骤运行自动化测试正在启动docker-compose,它将在docker内部启动我的Java程序,如您所见,我现在还使用一些测试值设置了系统环境值FEATURES_LIST
在我的Java程序中,我试图返回通常对环境变量所做的值:
System.getenv("FEATURES_LIST");
但是它从来没有找到它,另一方面,如果我在docker compose文件中指定了环境变量,它将找到它(在docker compose文件底部设置了一些不同的env变量,请参见下文)
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构建管道中指定环境变量,我在做错什么吗?
答案 0 :(得分:1)
Docker Compose任务中的“环境变量”未将变量注入到容器中,因此Java应用程序无法读取它们,但在此过程中它们将在代理中可用。
变量docker-compose.yml
用于${varaibleName}
。
因此,您可以在Docker Compose任务变量中定义:FEATURE_LIST=blabla
,并在docker-compose.yml
中定义将变量注入容器:
image:ubuntu:latest
environment:
- FEATURE_LIST=${FEATURE_LIST}
通过这种方式,您可以在Azure生成管道中指定环境变量(但还必须在docker-compose.yml
中定义它们)。