Передайте Gitlab Secrets для сборки докера в CI - PullRequest
0 голосов
/ 14 марта 2019

В настоящее время я ищу способ определения переменных ENV в CI с помощью Gitlab Secrets, чтобы я мог переопределить значения по умолчанию во время сборки, когда мне нужно развернуть свои контейнеры.

Из того, что я смог найти, такого способа нет, если я не укажу -e в команде сборки. Однако это не очень удобно для определенного количества аргументов.

Мои текущие команды в настоящее время выглядят так:

# In .gitlab-ci
docker build -t $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/production:${CI_COMMIT_REF_SLUG} -f .docker/production/Dockerfile .

# In Dockerfile
ENV MAILER_URL=${MAILER_URL:-"null://localhost"}

Я знаю, что могу просто использовать аргументы сборки, но у меня достаточно настроек, и я бы не хотел помещать их в CI

1 Ответ

1 голос
/ 15 марта 2019

На сегодняшний день нет прямого способа чтения из файла во время процесса сборки, однако вы можете добавить все свои аргументы в файл, а затем использовать bash для построения команды сборки.

  1. В 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 легко переключать между развертываниями без изменения кода;

...