Sobes.tech
Middle+

Come si può passare un attributo dinamico di CI a Docker durante la creazione dell'immagine, ad esempio l'identificatore del progetto, se non si utilizzano variabili d'ambiente?

sobes.tech AI

Risposta dell'AI

È possibile utilizzare gli argomenti di build.

# Sintassi per definire un argomento di build con valore predefinito
ARG PROJECT_ID=default
# Uso dell'argomento nell'istruzione COPY, ad esempio
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# O nell'istruzione RUN
RUN echo "L'ID del progetto è ${PROJECT_ID}"

Nel pipeline CI/CD, durante la costruzione dell'immagine, è possibile passare il valore dell'argomento usando il flag --build-arg:

# Esempio di comando di build in CI
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .

Qui, $CI_PROJECT_ID è una variabile CI che contiene l'identificatore del progetto.

Un altro metodo è usare un file con variabili per la build, che è una variazione dell'uso delle variabili di ambiente:

# Il Dockerfile non cambia
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar

File build-args.env:

PROJECT_ID=my-specific-project

Comando di build con file:

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

Un'altra opzione è generare un file all'interno del Dockerfile usando RUN:

ARG PROJECT_ID=default
# Generazione di un file con l'identificatore del progetto
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Uso successivo di questo file dall'applicazione