Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Azure build pipeline, docker compose - set environment variable

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?

like image 861
Matthewek Avatar asked May 13 '19 12:05

Matthewek


People also ask

Can you use environment variables in Docker compose?

In Docker Compose, IT admins can use environment variables to generalize configurations for different situations, deployment environments and security contexts without editing the main project file(s) manually. Variables can either be passed as command-line arguments -- suitable for only a few parameters -- or via a .

How do I run Docker compose in Azure pipeline?

Build service images (Required) Name of the Azure Service Connection. (Required) Name of the Azure Container Registry. (Required) Path to the primary Docker Compose file to use. (Optional) Additional Docker Compose files to be combined with the primary Docker Compose file.


1 Answers

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

like image 88
Shayki Abramczyk Avatar answered Sep 30 '22 07:09

Shayki Abramczyk