Как сделать так, чтобы при merge не выполнялось слияние определённых файлов?
Подскажите, пожалуйста, по следующему моменту.
В репозитории есть ветки dev и master, которые предназначены для dev/prod окружения. В каждой из них есть пара конфигурационных файлов, которые для каждого окружения свои и при выполнении merge нужно, чтобы в каждой ветке сохранялись правильные конфиги.
В интернете/чатгпт на такой запрос в основном выдаётся информация по .gitattributes и merge=ours, но в данном случае оно не работает, т.к. как я понимаю, чтобы merge=ours сработал, нужно, чтобы создался конфликт, а файлы конфигов меняться будут довольно редко и конфликтов не происходит (хотя возможно, что я ошибаюсь, но способ всё равно не работает. Возможно, конечно, что я что-то делаю не так, но вроде всё правильно).
Также видел мнение, что конфигурационных файлов вообще в репозитории быть не должно, они должны храниться где-то отдельно. В моём случае это, конечно, можно организовать, но будет не удобно. Гораздо проще будет, если оно всё будет храниться в репозитории.
В общем, подскажите, пожалуйста, возможно ли это реализовать или я зря мучаюсь и просто не нужно хранить конфиги в репозитории?
Два варианта:
1. Файлы конфигов добавляются в .gitignore и настраиваются в каждом окружении отдельно.
2. Настраиваете CI/CD и при выполнении задания копируете (создаете) нужный конфиг в зависимости от окружения.
гитлаб указан в тегах верно?
поместите эти параметры в CICD переменные (поддерживаются в том числе файлы, а так же маскировка секретов), лимитировав их использование конкретным ENV-ом https://docs.gitlab.com/ci/environments/
ну и укажите в деплой шагах ENV-ы (можно брать из имени бранча динамически)
хранить в репе все таки не стоит
HydrogenOxyde, ну как бы это логично сделать, чтобы не было лишнего влияния не-прод сред на прод
как еще вариант - если у вас есть хранилище KV или секретов (типа Consul и Vault) - брать все параметры запуска динамически на старте приложения. Но, как всегда, есть нюансы с таким подходом
переделать статическое хранение в репе на статическое же хранение в CICD переменных и немного (вроде бы, не видел вашего пайплайна) изменить пайплайн для вас будет более легким способом и сделать более правильно и указанную в вопросе проблему решить
Евгений Хлебников, да, так, наверное, будет правильнее, точки зрения правильного подхода. Но в случае необходимости изменения файлов я уже не смогу сделать это сам, нужно будет обращаться к девопсам, растёт, так сказать, бюрократический фактор (особенности работы в большой компании). Собственно, поэтому и искал возможность оставить эти файлы в репе. Тем более, там никаких секретных секретов нет, просто немного настроек
помнится, когда у меня начинали забирать full admin в гитлабе (просто с нашего проекта начиналось его внедрение и сначала мы его менеджили - затем управление ушло в IT команду) я обсуждал создание кастомных ролей, поскольку управление CICD переменными конкретного проекта должно лежать не на команде, которая управляет гитлабом, а на команде управляющей этим конкретным проектом
настроить управление чисто CICD Variables в кастомной роли для разработчиков вполне можно, чтобы не плодить бюрократии
Everything_is_bad, как писал к ответу ниже, я не контролирую сам сервис и настройки ci/cd. Для создания файлов в сервисе, переменных окружения, сохранения файлов в ci/cd (как предложили ниже) и пр. мне нужно обращаться к отдельным людям (девопсам). Растёт "бюрократический фактор", т.к. срочно что-то поменять сам я уже не могу, нужно ждать рабочего времени, создавать задачу, которую ещё могут долго выполнять и, в общем, из-за всех этих нюансов хотелось хранить эти файлы в репозитории, хоть это может и не самый правильный вариант
HydrogenOxyde, ну так эту проблему тогда и решать административными методами. А вообще, ты сам минимум должен контролировать какой-то тестовый стенд, где без проблем должен делать нужные тебе настройки, а прод, которые контролируют девопсы вообще не лезть, а еще они сильно обрадуются когда какие-то настройки будет в обход их делаться.
Не понял при чём тут девопсы.
В процессе выкладки создаётся симлинка config на config-dev или config-prod, а что там в этих файлах (или даже папках) девопсов не волнует.