На сегодняшний день нет прямого способа чтения из файла во время процесса сборки, однако вы можете добавить все свои аргументы в файл, а затем использовать bash для построения команды сборки.
- В Dockerfileу вас может быть следующее:
# In Dockerfile
ARG MAILER_URL http://localhost
ENV MAILER_URL=${MAILER_URL}
Это означает, что по умолчанию значение MAILER_URL
будет http://localhost
, но вы можете переопределить его во время сборки, используя --build-arg
2- Экспорт переменных Gitlab CI в файл, например (arguments.txt) в before_script
или любом другом разделе, который работает лучше:
echo "MAILER_URL=$CI_MAILER_URL" >> arguments.txt
# echo other variables to arguments.txt
3- Чтение arguments.txt
и сохранение его в переменнойзатем передайте его в сборку Docker
export BUILD_ARGS=$(for arg in $(cat arguments.txt); do echo "--build-arg $arg ";done | tr -d '\n');
docker build -t $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/production:${CI_COMMIT_REF_SLUG} $BUILD_ARGS -f .docker/production/Dockerfile .
Для получения более подробной информации вы можете проверить Задать переменные времени сборки (--build-arg) в Docker и Использование ARG в Dockerfile
Также необходимо учитывать, что такие переменные, как MAILER_URL
или MAILER_PASSWORD
, с точки зрения безопасности, вы должны передавать их только при развертывании, а также для возможности развертывания образа в нескольких средах..
Вы можете взглянуть на Приложение Twelve Factor: раздел конфигурации :
Переменные Env легко переключать между развертываниями без изменения кода;