Sobes.tech
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