Sobes.tech
Middle+

Cum se poate transmite un atribut dinamic de la CI la Docker în timpul construirii imaginii, de exemplu, identificatorul proiectului, dacă nu se folosesc variabile de mediu?

sobes.tech AI

Răspuns de la AI

Se pot folosi argumente de build.

# Sintaxa pentru definirea unui argument de build cu valoare implicită
ARG PROJECT_ID=default
# Utilizarea argumentului în instrucțiunea COPY, de exemplu
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Sau în instrucțiunea RUN
RUN echo "ID-ul proiectului este ${PROJECT_ID}"

În pipeline-ul CI/CD, la construirea imaginii, se poate transmite valoarea argumentului folosind flag-ul --build-arg:

# Exemplu de comandă de build în CI
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .

Aici, $CI_PROJECT_ID este o variabilă CI care conține identificatorul proiectului.

Altă metodă este utilizarea unui fișier cu variabile pentru build, ceea ce este o variație a utilizării variabilelor de mediu:

# Dockerfile-ul nu se schimbă
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar

Fișierul build-args.env:

PROJECT_ID=my-specific-project

Comanda de build cu fișier:

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

O altă opțiune este generarea unui fișier în interiorul Dockerfile-ului folosind RUN:

ARG PROJECT_ID=default
# Generarea unui fișier cu identificatorul proiectului
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Utilizarea ulterioară a acestui fișier de către aplicație