Как я могу указать драгоценный камень, чтобы вытащить из частного репозитория github?

У меня есть закрытый репозиторий на Github, который я хочу использовать. Я развертываю свое приложение в Heroku. Как я могу указать частный репозиторий в качестве источника в моем gemfile? Я думаю, этого было бы недостаточно, чтобы просто сказать

gem "mygem", :git=>"my github address" 

Ответ 1

В соответствии с предложением технической поддержки Heroku, самый простой способ сделать это - указать имя пользователя и пароль в URL-адрес, например, в Basic HTTP Auth, например

gem 'my_gem', :git => 'https://my_username:[email protected]/my_github_account/my_repo.git', :ref => 'revision_no'

Это сработало для нас. Это все еще несколько неудовлетворительно, поскольку мы должны были ввести пароль в Gemfile. Мы рассмотрели это, добавив новую учетную запись пользователя github и добавив эту учетную запись в качестве соавтора в проект gem. Все еще не надежная защита, но воздействие более узкое.

Другие параметры, о которых я читал, относятся к настройке собственного сервера драгоценных камней или вендора.

Обновление 5/16/2012: Другой способ обойти ввод пароля в Gemfile - это ввести пароль в переменную среды; на Heroku вы делаете это с помощью heroku config:add VAR=value, а затем в Gemfile вы будете использовать эту переменную, например:

gem 'my_gem',
  :git => "https://#{ENV['var_private_gem_username']}:#{ENV['var_private_gem_password']}@github.com/my_github_account.git",
  :ref => 'rev'

Это стандарт на Heroku, чтобы не помещать в код пароли, ключи API и любые учетные данные. Для локальной разработки/тестирования вы можете установить эти переменные среды. Или, предположив, что ваша машина разработки настроена для доступа SSH к github, вам не понадобятся учетные данные для локальной разработки (учетные данные SSH будут действовать уже). Таким образом, вы можете установить некоторую условную логику:

private_repo_credentials = %w(var_private_gem_username var_private_gem_password).
  map { |var| ENV[var] }.compact.join(':')
private_repo_credentials << '@' unless private_repo_credentials.empty?
# private_repo_credentials will be "" if neither var is set
# private_repo_credentials will be "username:[email protected]" if they are set
gem 'my_gem',
  :git => "https://#{private_repo_credentials}github.com/my_github_account.git",
  :ref => 'rev'

Я не тестировал эту последнюю часть. Пожалуйста, предоставьте отзыв.

Ответ 2

Лучший способ найти драгоценный камень, извлеченный из частного репо, - это использовать доступ к GitHub OAuth. Для этого:

  • Создайте пользователя GitHub с доступом к рассматриваемому репо (лучше всего для команд - если вы можете разоблачить свои токены доступа, вы можете просто использовать свою собственную учетную запись).

  • Создайте токен GitHub OAuth для пользователя. Для этого достаточно просто сделать это через API GitHub, используя curl; Подробнее см. API OAuth.

  • Добавьте токен к URL-адресу git в свой Gemfile. Пример:

gem 'mygem', git: 'https://xxx123abc:[email protected]/user_or_team/mygem.git'

В настоящее время я использую этот метод на Heroku, и он отлично работает. Красота заключается в том, что вам не нужно раскрывать свою личную информацию, и вы можете отменить или восстановить токен в любой момент, если что-то скомпрометировано.

Ответ 3

Я обнаружил, что если у меня есть доступ с моего терминала до github (путем загрузки ssh-ключа в github), я могу просто сделать:

gem 'my_gem', :git => '[email protected]:my_user/my_repo.git', :ref => 'revision_no'

не загрязняя мой код моим git именем пользователя или паролем

Ответ 4

Надеемся, что в 2015 году вы можете использовать https://github.com/siassaj/heroku-buildpack-git-deploy-keys с помощью ключа развертывания из github.

Таким образом, вы не ставите имя пользователя и переходите в Gemfile, который будет выглядеть как обычный текст в Gemfile.lock

Ответ 5

  • Создайте ssh keys
  • Убедитесь, что эти ключи в каталоге ~/.ssh
  • Скопировать содержимое ~/.ssh/id_rsa.pub в https://github.com/MY_COMPANY/MY_GEM/settings/keys
  • В вашем Gemfile используйте: gem 'mygem', github: 'MY_COMPANY/MY_GEM'
  • run bundle install

Ответ 6

Я обнаружил, что при использовании подходов env и heroku: enable user_env_compile, тогда нет проблем с Gemfile.lock