LINUX.ORG.RU

Gitlab ci cd подставить значение переменной в .env файл

 


0

1

Ребят, может кто подскажет, сам не смог найти. А есть такая классная штука в Gitlab ci cd, что бы он взял файл заготовки, к примеру env, подставил внутри этого файла на место переменных значение и положил его в нужное место, переименовав его в .env?

Именно так удобно сделано в Ansible. Но с Gitlab ci cd я такого не могу найти. Сейчас приходится хранить файл .env с паролями прям в репозитории, что не очень безопасно и любому кто как-то связан с безопасностью, увидев такое становиться немножко грустно.

приходится хранить файл .env с паролями прям в репозитории

Обычно .env вносится в .gitignore, а в репу заливается .env.sample с шаблоном (если неправильно понял вопрос - сорри).

anonymous_sapiens ★★★★★
()
Последнее исправление: anonymous_sapiens (всего исправлений: 1)
Ответ на: комментарий от anonymous_sapiens

Ну да, это я и хотел сделать. Как с Ansible думал что в нужные места файла .env подставлю переменные. Но не тут-то было. Не где в документации нету такой удобной функции как в Ansible.

Вот и решил спросить. Может кто уже сталкивался с таким.

Andrei_IW
() автор топика
Последнее исправление: Andrei_IW (всего исправлений: 1)
Ответ на: комментарий от Andrei_IW

Могу привести пример из своего опыта:

Уже на боевом сервере есть .env (допустим пустой), в настройках ci/cd репы в переменных есть одна $ENV_PROD, в которой описано все креды. В gitlab-ci.yml при деплое есть команда cp $ENV_PROD /some/folder/.env

anonymous
()
Ответ на: комментарий от anonymous

Ай-да спасибо, мил человек! Сейчас попробую такое реализовать. То есть получается в переменную GitLab мы можем засунуть несколько сток? Если так… то это решение. Не такое элегантное решение как в Ansible, но всё же решение.

Andrei_IW
() автор топика
Ответ на: комментарий от Andrei_IW

Да, именно так) ещё для тестового сервера в том же проекте вписан $ENV_TEST, и по такому же типу выстроен stage

anonymous
()
Ответ на: комментарий от anonymous

Сделал переменную ENV_WEB, поместил туда все строчки. Сделать такую переменную скрытой не получилось, в оф.документации написано, что для скрытой переменной нужна только одна строка. Ну да ладно.

Пишу в ci-cd такую строку: - cp $ENV_WEB /docker/config/.env и мне выпадает такая ошибка

cp: указанная цель ‘/docker/config/.env’ не является каталогом

Andrei_IW
() автор топика

Можешь попробовать через envsubst<env

spock74
()
Ответ на: комментарий от anonymous

Да да, забыл указать что в папку я предварительно копирую пустой файл .env . То есть пустой файл .env там был.

Andrei_IW
() автор топика
Ответ на: комментарий от Andrei_IW

Спустя столько времени нашёл ответ. В общем нужно создать переменную Settings - CI/CD- Variables создать переменную, к примеру ENV и положить в неё что нам надо. Всякие пароли, пути и прочие настройки. Но вся соль теперь в том, что тип этой переменной надо сделать File.

Теперь при deploy-е в значение $ENV поместится временный путь, в котором на время deploy-я будет находится файл ENV с нужным нам содержанием. После deploy-я этот файл удалиться. Вот как можно его поместить в нужное место:

  stage: deploy
  script:
    - cp $ENV /var/www/mysite/.env

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

Andrei_IW
() автор топика
Последнее исправление: Andrei_IW (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.