Sobes.tech
Middle+

როგორ შეიძლება გადმოვცეთ CI-დან დინამიური ატრიბუტი Docker-ს, მაგალითად, პროექტის იდენტიფიკატორი, თუ გარემოს ცვლადებს არ ვიყენებთ?

sobes.tech AI

პასუხი AI-სგან

შენიშვნები მშენებლობის არგუმენტებს შეიძლება გამოყენება.

# სინტაქსი მშენებლობის არგუმენტის განსაზღვრისთვის, რომელიც აქვს დეფოლტ მნიშვნელობას
ARG PROJECT_ID=default
# გამოყენება მაგალითისთვის, COPY ბრძანებაში
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# ან RUN ბრძანებაში
RUN echo "პროექტის ID არის ${PROJECT_ID}"

CI/CD პაიპლაინში, როდესაც იწარმოება სურათი, არგუმენტის მნიშვნელობა შეიძლება გადაეცეს --build-arg ფლაგის საშუალებით:

# მაგალითი CI-ში მშენებლობის ბრძანების
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .

აქ, $CI_PROJECT_ID არის CI-ის ცვლადი, რომელიც შეიცავს პროექტის იდენტიფიკატორს.

სხვა მეთოდია, გამოიყენოს ფაილი ცვლადებით მშენებლობისთვის, რაც არის ვარიანტი გარემოს ცვლადების გამოყენების:

# Dockerfile არ იცვლება
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar

build-args.env ფაილი:

PROJECT_ID=my-specific-project

ფაილთან მშენებლობის ბრძანება:

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

სხვა ვარიანტია, შექმნას ფაილი Dockerfile-ის შიგნით RUN-ის გამოყენებით:

ARG PROJECT_ID=default
# შექმნას ფაილი პროექტის იდენტიფიკატორით
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# შემდეგ ამ ფაილს გამოიყენებს აპლიკაცია