Частные и публичные репозитории Git с конфиденциальными данными - PullRequest
1 голос
/ 15 апреля 2019

У меня есть служба, в настоящее время работающая на Heroku .
Способ развертывания, работающий с Heroku, заключается в том, что вы отправляете код в репозиторий git, который запускает сборку и затем развертывание нового кода..
Поскольку это единственный способ развернуть ваш сервис в Heroku, этот репозиторий git содержит много конфиденциальной информации, такой как токены и секреты клиента, в нескольких конфигурационных файлах.Из-за этого репозиторий в настоящее время является частным репозиторием, но я хотел бы сделать его публичным.

Обычно я просто .gitignore файлы конфигурации и исключаю их полностью, но с момента фиксации файловэто единственный способ доставить их в Heroku, я не могу этого сделать.

Я решил, что смогу решить эту проблему, имея две ветви, которые я просто перенесу на разные пульты, где одна будет частной.к Heroku, и один был общедоступным на GitHub.

Во время разработки я нажимал на частную ветку, а затем объединял эти изменения (за исключением конфигов) с публичной веткой, и все было бы хорошо.К сожалению, выполнение этого способа привело к тому, что слияние включило всю историю из частной ветки, которая включала бы конфиденциальные данные, так что это не разрешено.

Возможно ли сделать это другим способом?

Я также открыт для альтернативных решений.
Как обычно решаются эти ситуации?
Мне кажется, что это не может быть уникальной ситуацией.

1 Ответ

3 голосов
/ 15 апреля 2019

Вы можете использовать Heroku Config Vars для хранения ваших конфиденциальных данных.Вы сможете получить доступ к данным как переменным среды из своего кода.

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

Например, вы можете установить переменную окружения, используя heroku cli следующим образом:

heroku config:set GITHUB_USERNAME=joesmith

Большинство языков программирования предоставляют способ доступа к переменным окружения.Например, в Python вы можете использовать:

import os
print(os.environ['GITHUB_USERNAME'])

Где бы вы ни использовали ваши конфиденциальные данные, вы можете просто заменить их переменными среды.

Еще одно преимущество переменных среды заключается в том, чтоони вездесущи.Почти все операционные системы и облачные сервисы поддерживают их, поэтому им будет не о чем беспокоиться, если вы хотите, чтобы ваш проект имел открытый исходный код и поддерживало как можно больше платформ.

...