Как изменить файл конфигурации во время развертывания в git, не имея двух репозиториев - PullRequest
2 голосов
/ 30 сентября 2019

Я использую проект Grafana для своих панелей. Мне нужно сделать 2 развертывания Grafana с небольшими изменениями, такими как заголовки, изображения и т. Д. Ранее у меня было 2 репозитория из-за этого. Теперь я создал 2 файла конфигурации, которые являются json и включил в них изменения. Так что теперь я читаю этот JSON, чтобы получить правильные значения для замены заголовков, изображений и прочего. Это делается с помощью пользовательской службы, которую я написал в Grafana.

Мои два имени файла конфигурации следующие:

grafana.productA.config.json

grafana.productB.config.json

Я использую CI / CD в Gitlab для развертываний. Я хочу выбрать и переименовать правильный файл конфигурации в grafana.prod.config.json и связать этот файл со сборкой Grafana. Кто-нибудь может дать мне представление о том, как этого добиться?

1 Ответ

2 голосов
/ 30 сентября 2019

Многие PaaS предпочитают конфигурирование с помощью переменных среды, потому что это просто и понятно, и все языки поддерживают их "из коробки". В Go вы можете просто вызвать os.Getenv(), чтобы получить значение переменной среды.

Среда, подобная DEV или PROD, наряду с некоторыми параметрами обычно предоставляется через средупеременные для приложения, поэтому часто нет необходимости в файле конфигурации. Если имеется обширная конфигурация, сама она (если не слишком большая) также может быть в переменной среды, например, в форме, закодированной в base64.

Если невозможно поместить файл конфигурации в переменную средыпоместите его имя в переменную env, например CONFIG_FILE=grafana.productA.config.json для целей dev / CI, и установите CONFIG_FILE=grafana.productB.config.json на своем производственном сервере. Таким образом, ваше приложение может загрузить соответствующий файл конфигурации.

Если конфигурация содержит конфиденциальную информацию (например, пароли или закрытые ключи), «перенесите» ее в переменные среды, которые, конечно, могут различаться в каждой из ваших сред (например,dev, CI, prod).

...