Sobes.tech
Middle+

CI dan dinamik atributni Docker ga qanday o'tkazish mumkin, masalan, loyiha identifikatori, agar muhit o'zgaruvchilardan foydalanilmasa?

sobes.tech AI

AIdan javob

Qurilish argumentlaridan foydalanish mumkin.

# Standart qiymat bilan qurilish argumentini aniqlash uchun sintaksis
ARG PROJECT_ID=default
# COPY buyruğida argumentdan foydalanish, masalan
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Yoki RUN buyruğida
RUN echo "Loyiha ID si ${PROJECT_ID}""

CI/CD pipeline-da, rasm qurishda, argument qiymatini --build-arg flagi yordamida o'tkazish mumkin:

# CI'da qurish buyruğı misoli
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .

Bu yerda, $CI_PROJECT_ID loyiha identifikatorini o'z ichiga olgan CI o'zgaruvchisi.

Boshqa usul - qurish uchun o'zgaruvchilar bilan fayldan foydalanish, bu atrof-muhit o'zgaruvchilaridan foydalanishning variatsiyasidir:

# Dockerfile o'zgarmaydi
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar

build-args.env fayli:

PROJECT_ID=my-specific-project

Fayl bilan qurish buyruği:

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

Yana bir variant - Dockerfile ichida RUN yordamida fayl yaratish:

ARG PROJECT_ID=default
# Loyihaning identifikatori bilan fayl yaratish
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Keyinchalik bu fayldan ilova foydalanadi