вопрос
Как выгрузить все переменные среды Gitlab CI (с переменными, заданными в настройках проекта или группы CI / CD) в файл, но только их, без переменных среды хоста, на котором gitlab runner выполняется?
Фон
Мы используем gitlab CI / CD для развертывания наших проектов на сервере docker. Каждый проект содержит файл docker-compose.yml
, в котором используются различные переменные среды, например пароли db. Мы используем файл .env
для хранения этих переменных, поэтому можно запускать / перезапускать контейнеры после развертывания из командной строки без доступа к gitlab.
Наш сценарий развертывания выглядит примерно так:
deploy:
script:
#...
- cp docker-compose.development.yml {$DEPLOY_TO_PATH}/docker-compose.yml
- env > variables.env
- docker-compose up -d
#...
И файл docker-compose.yml
выглядит так:
version: "3"
services:
project:
image: some/image
env_file:
- variables.env
...
Проблема в том, что теперь файл .env
содержит как переменные gitlab, так и переменные среды хоста, а в результате переменную PATH перезаписывается .
Я разработал обходной путь с grep
:
env | grep -Pv "^PATH" > variables.env
Это позволило нам сохранить эту работу на данный момент, но я думаю, что проблема может поразить нас снова с другими переменными, которым будут присвоены разные значения внутри контейнера и в хост-системе.
Я знаю, что могу перечислить все переменные в docker -compose и подобных файлах, но у нас уже есть довольно несколько из них в нескольких проектах, так что это не решение.