Sobes.tech
Middle+
94
questionbank

Как можно передать динамический атрибут от CI в Docker при сборке образа, например, идентификатор проекта, если не использовать переменные окружения?

Ответ от нейросети

sobes.tech AI

Можно использовать аргументы сборки (build arguments).

# Синтаксис для определения аргумента сборки с значением по умолчанию
ARG PROJECT_ID=default
# Использование аргумента в инструкции COPY, например
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Или в инструкции RUN
RUN echo "Project ID is ${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
# Дальнейшее использование этого файла приложением