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
# შემდეგ ამ ფაილს გამოიყენებს აპლიკაცია