5
votes

I have a build pipeline that runs a docker image with some java program that is run using maven.

enter image description here

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?

1

1 Answers

6
votes

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).