Reputation: 1559
I have a build pipeline that runs a docker image with some java program that is run using maven.
Selected pipeline step Run automation tests is starting docker-compose that starts my java program inside docker, as you can see I also set system environment value FEATURES_LIST
with some test value, now inside my java program, I tried to return value of like I normally do for environment variables:
System.getenv("FEATURES_LIST");
But it never finds it, If on another hand, I specify environment variable, inside my docker compose file, it finds it (some different env variable set on the bottom of the docker compose file, see below)
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
Trouble is, it would really make my life easier, if I could specify environment variable inside azure build pipeline, is there something I am doing wrong?
Upvotes: 8
Views: 9268
Reputation: 41575
The "Environment Variables" in the Docker Compose task not inject the variables into the containers so the Java application can't read them, but they are will be available in the agent during the process.
The variables are for use in the docker-compose.yml
in this way: ${variableName}
.
So you can define in the Docker Compose task variable: FEATURE_LIST=blabla
and in the docker-compose.yml
inject the variable into the container:
image:ubuntu:latest
environment:
- FEATURE_LIST=${FEATURE_LIST}
In this way you can specify environment variables inside Azure Build Pipeline (but you must also define them in the docker-compose.yml
).
Upvotes: 10