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