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
# По-нататъшно използване на този файл от приложението