Sobes.tech
Middle+

Comment transmettre un attribut dynamique de CI à Docker lors de la construction de l'image, par exemple, l'identifiant du projet, si l'on n'utilise pas de variables d'environnement?

sobes.tech IA

Réponse de l'IA

Il est possible d'utiliser des arguments de build.

# Syntaxe pour définir un argument de build avec une valeur par défaut
ARG PROJECT_ID=default
# Utilisation de l'argument dans l'instruction COPY, par exemple
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Ou dans l'instruction RUN
RUN echo "L'ID du projet est ${PROJECT_ID}"

Dans le pipeline CI/CD, lors de la construction de l'image, la valeur de l'argument peut être transmise avec le drapeau --build-arg:

# Exemple de commande de build en CI
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .

Ici, $CI_PROJECT_ID est une variable CI contenant l'identifiant du projet.

Une autre méthode consiste à utiliser un fichier avec des variables pour la build, ce qui est une variation de l'utilisation des variables d'environnement:

# Le Dockerfile ne change pas
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar

Fichier build-args.env:

PROJECT_ID=my-specific-project

Commande de build avec fichier:

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

Une autre option est la génération d'un fichier dans le Dockerfile avec RUN:

ARG PROJECT_ID=default
# Génération d'un fichier avec l'identifiant du projet
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Utilisation ultérieure de ce fichier par l'application