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