web-dev-qa-db-fra.com

Comment spécifier une gemme à extraire d'un référentiel privé github?

J'ai un dépôt privé sur Github que je veux utiliser. Je déploie mon application sur Heroku. Comment puis-je spécifier un référentiel privé comme source sur mon fichier gem? J'imagine qu'il ne suffirait pas de simplement dire

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

Selon les suggestions du support technique Heroku, le moyen le plus simple de procéder consiste à insérer le nom d'utilisateur et le mot de passe dans l'URL, comme dans Authentification HTTP de base, par exemple.

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

Cela a fonctionné pour nous. Ceci est toujours un peu insatisfaisant car nous avons dû mettre un mot de passe dans le Gemfile. Nous avons résolu ce problème en ajoutant un nouveau compte utilisateur github et en ajoutant ce compte en tant que collaborateur du projet gem. Toujours pas de sécurité à toute épreuve, mais l'impact est plus étroit.

Les autres options que j'ai lues sont: configurez votre propre serveur gem _ ou vendez le gem .

Mise à jour du 16/05/2012: Un autre moyen de contourner le mot de passe dans la variable Gemfile consiste à le placer dans une variable d'environnement; sur Heroku, vous faites cela avec heroku config:add VAR=value, puis dans la Gemfile, vous utiliseriez cette variable, par exemple:

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

C'est la norme sur Heroku pour éviter de mettre des mots de passe, des clés d'API et des informations d'identification dans le code. Pour le développement/test local, vous pouvez définir ces variables d’environnement. Ou bien, en supposant que votre machine de développement soit configurée pour l'accès SSH à github, vous n'aurez pas besoin des informations d'identification pour le développement local (les informations d'identification SSH seront déjà en vigueur). Vous pouvez donc mettre en place une logique conditionnelle:

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:password@" if they are set
gem 'my_gem',
  :git => "https://#{private_repo_credentials}github.com/my_github_account.git",
  :ref => 'rev'

Je n'ai pas testé cette dernière partie. S'il vous plaît fournir des commentaires.

45
Wolfram Arnold

Le meilleur moyen que j'ai trouvé de déployer une gemme extraite d'un dépôt privé est d'utiliser l'accès OAuth de GitHub . Faire cela:

  1. Créez un utilisateur GitHub avec accès au référentiel en question (idéal pour les équipes - si vous acceptez d'exposer vos jetons d'accès personnels, vous pouvez simplement utiliser votre propre compte).

  2. Créez un jeton GitHub OAuth pour l'utilisateur. C'est très simple de faire cela sur l'API GitHub en utilisant simplement curl; voir l'API OAuth pour plus d'informations.

  3. Ajoutez le jeton à l’URL git dans votre Gemfile. Exemple:

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

J'utilise actuellement cette méthode sur Heroku et cela fonctionne très bien. La beauté est que vous n'avez pas à exposer vos informations personnelles et que vous pouvez révoquer ou régénérer le jeton à tout moment si quelque chose est compromis.

110
Seth Bro

J'ai trouvé que si j'ai accès à github depuis mon terminal ( en téléchargeant une clé ssh sur github ), je peux simplement faire

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

sans polluer mon code avec mon identifiant ou mon mot de passe git

2
gardenofwine
  • Créer une clé ssh
  • Assurez-vous que ces clés se trouvent sous le répertoire ~/.ssh
  • Copiez le contenu de ~/.ssh/id_rsa.pub dans https://github.com/MY_COMPANY/MY_GEM/settings/keys
  • Dans votre Gemfile utilisez: gem 'mygem', github: 'MY_COMPANY/MY_GEM'
  • exécuter bundle install
1
itsnikolay

En plus de la réponse de @ seth-bro, nous pouvons également utiliser bundle config pour configurer les informations d'identification à l'aide de bundler, de sorte que nous n'ayons pas besoin d'exposer le jeton oAuth sur le Gemfile. 

Syntaxe: bundle config github.com <your_github_oauth_token>

Voir: https://Gist.github.com/sebboh/f1dfe4f096746c45f3e9ea06a09743a0https://bundler.io/v1.16/bundle_config.html

1
Virtual

Espérons que cela reste pertinent en 2015, vous pouvez utiliser https://github.com/siassaj/heroku-buildpack-git-deploy-keys avec une clé de déploiement de github.

De cette façon, vous éviterez de mettre le nom d’utilisateur et de passer dans Gemfile, qui finira en texte brut dans le fichier Gemfile.lock.

0
sia