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
# Даље коришћење овог фајла од стране апликације