Sobes.tech
Middle+

Hoe kun je een dynamisch attribuut van CI naar Docker overbrengen tijdens het bouwen van de afbeelding, bijvoorbeeld de project-ID, als je geen omgevingsvariabelen gebruikt?

sobes.tech AI

Antwoord van AI

Build-argumenten kunnen worden gebruikt.

# Syntax voor het definiëren van een build-argument met een standaardwaarde
ARG PROJECT_ID=default
# Gebruik van het argument in de COPY-instructie, bijvoorbeeld
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Of in de RUN-instructie
RUN echo "Project ID is ${PROJECT_ID}"

In de CI/CD-pipeline, bij het bouwen van de afbeelding, kan de waarde van het argument worden doorgegeven met de vlag --build-arg:

# Voorbeeld van een build-commando in CI
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .

Hier is $CI_PROJECT_ID een CI-variabele die de project-ID bevat.

Een andere manier is het gebruik van een variabelenbestand voor de build, wat een variatie is op het gebruik van omgevingsvariabelen:

# Dockerfile verandert niet
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar

build-args.env-bestand:

PROJECT_ID=my-specific-project

Build-commando met bestand:

docker build --build-arg PROJECT_ID=$(cat build-args.env) -t my-image:${CI_COMMIT_SHORT_SHA} .

Een andere optie is het genereren van een bestand binnen de Dockerfile met behulp van RUN:

ARG PROJECT_ID=default
# Genereren van een bestand met de project-ID
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Het gebruik van dit bestand door de applicatie