Sobes.tech
Middle+

Kako preneti dinamički atribut iz CI u Docker prilikom izgradnje slike, na primer, identifikator projekta, ako se ne koriste promenljive okruženja?

sobes.tech АИ

Одговор од АИ

Могу се користити аргументи за изградњу.

# Синтакса за дефинисање аргумента за изградњу са подразумеваном вредношћу
ARG PROJECT_ID=default
# Коришћење аргумента у инструкцији COPY, на пример
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Или у инструкцији RUN
RUN echo "ID пројекта је ${PROJECT_ID}"

У CI/CD pipeline-у приликом изградње слике, вредност аргумента се може проследити помоћу заставе --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
# Даље коришћење овог фајла од стране апликације