Middle+
Bir imaj oluştururken, örneğin proje kimliği gibi, ortam değişkenleri kullanılmadan CI'den Docker'a dinamik bir öznitelik nasıl aktarılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Derleme argümanları kullanılabilir.
# Varsayılan değere sahip derleme argümanını tanımlamak için sözdizimi
ARG PROJECT_ID=default
# Örneğin, COPY komutunda argümanın kullanımı
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Veya RUN komutunda
RUN echo "Proje Kimliği ${PROJECT_ID}""
CI/CD boru hattında, imaj oluşturulurken, --build-arg bayrağı kullanılarak argüman değeri geçirilebilir:
# CI'de derleme komut örneği
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .
Burada, $CI_PROJECT_ID proje kimliğini içeren bir CI değişkenidir.
Başka bir yöntem, ortam değişkenlerinin kullanılmasıdır, bu da ortam değişkenlerinin kullanımının bir varyasyonudur:
# Dockerfile değişmiyor
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar
build-args.env dosyası:
PROJECT_ID=my-specific-project
Dosya ile derleme komutu:
docker build --build-arg PROJECT_ID=$(cat build-args.env) -t my-image:${CI_COMMIT_SHORT_SHA} .
Başka bir seçenek, Dockerfile içinde RUN kullanarak dosya oluşturmadır:
ARG PROJECT_ID=default
# Proje kimliği ile dosya oluşturma
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Uygulama tarafından daha sonra kullanılacak