Sobes.tech
Middle+

Ako preniesť dynamický atribút z CI do Docker pri zostavovaní obrazu, napríklad identifikátor projektu, ak nepoužívame premenné prostredia?

sobes.tech AI

Odpoveď od AI

Môžu sa použiť argumenty build.

# Syntax pre definovanie argumentu build s predvolenou hodnotou
ARG PROJECT_ID=default
# Použitie argumentu v inštrukcii COPY, napríklad
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Alebo v inštrukcii RUN
RUN echo "ID projektu je ${PROJECT_ID}"

V CI/CD pipeline pri zostavovaní obrazu je možné hodnotu argumentu odovzdať pomocou vlajky --build-arg:

# Príklad príkazu build v CI
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .

Tu je $CI_PROJECT_ID premenná CI obsahujúca identifikátor projektu.

Ďalší spôsob je použiť súbor s premennými na zostavenie, čo je variácia použitia premenných prostredia:

# Dockerfile sa nemení
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar

Súbor build-args.env:

PROJECT_ID=my-specific-project

Príkaz na zostavenie so súborom:

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

Ďalšou možnosťou je generovanie súboru vnútri Dockerfile pomocou RUN:

ARG PROJECT_ID=default
# Generovanie súboru s identifikátorom projektu
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Neskôr použitie tohto súboru aplikáciou