Lors du déploiement d'une application avec Chef, j'ai la base de code à cloner à partir d'un référentiel privé github avec la ressource suivante:
git '/mnt/application' do
repository '[email protected]:organization/repository'
reference 'master'
action :sync
user node.application.user
group node.application.user
end
Cependant, après avoir analysé la documentation de la ressource git
, je ne vois pas comment vous fournissez le fichier de clé pour l'authentification. Je suis également confus quant à la manière de stocker cette clé dans un sac de données, car le fichier contient un tas de nouvelles lignes. Des idées?
ssh_wrapper "ssh -i /some/path/id_rsa"
Au cas où quelqu'un rencontrerait cela, ce qui précède n'a pas fonctionné pour moi, j'ai continué à avoir l'erreur:
error: cannot run ssh -i /some/path/id_rsa: No such file or directory
En spécifiant ssh_wrapper, vous définissez la variable d'environnement GIT_SSH. Il s'avère que vous ne pouvez pas fournir de paramètres dans la variable d'environnement GIT_SSH (voir clonez Git avec un SSH personnalisé à l'aide de l'erreur GIT_SSH ).
Au lieu de cela, vous devez d'abord écrire votre script dans un fichier, puis y définir GIT_SSH.
Alors:
file "/some/path/git_wrapper.sh" do
owner "your_user"
mode "0755"
content "#!/bin/sh\nexec /usr/bin/ssh -i /some/path/id_rsa \"$@\""
end
Et changez la partie ressource git pour:
git "/opt/mysources/couch" do
repository "git://git.Apache.org/couchdb.git"
reference "master"
action :sync
ssh_wrapper "/some/path/git_wrapper.sh"
end
Nous utilisons la même configuration pour Mercurial, mais cela devrait être la même chose avec Git, je l’espère.
Nous utilisons des clés ssh pour nous authentifier. La clé est stockée dans un databag chiffré (les nouvelles lignes étant remplacées par "\ n"). Tout d'abord, cette clé privée est créée sur le nœud à partir de databag.
git_key = Chef::EncryptedDataBagItem.load( "private_keys", "git_key" )
file "/some/path/id_rsa" do
content git_key['private']
end
Et ensuite, utilisez-le pour vous connecter au référentiel git avec ssh_wrapper:
git "/opt/mysources/couch" do
repository "git://git.Apache.org/couchdb.git"
reference "master"
action :sync
ssh_wrapper "ssh -i /some/path/id_rsa" #the path to our private key file
end
Je suis passé par le même problème, la seule chose qui me manquait était cette commande alors tout s'est bien passé:
GIT_SSH_COMMAND="ssh -i ~/.ssh/bitbucket_rsa"
Vous trouverez la référence et toutes mes étapes sur mon blog: http://www.sadafnoor.com/blog/simplest-way-to-write-your-chef-cookbook-that-git-clone-private-private-repo -using-bitbucket-deploy-key/
si vous êtes dans une distribution linux, stockez votre clé ssh dans <your home directory>/.ssh
et ajoutez github.com à <your home directory>/.ssh/known_hosts
Vous pouvez ajouter github.com à known_hosts en utilisant la commande suivante
ssh-keyscan -H github.com >> <your home directory>/.ssh/known_hosts
Ceci fait, vous pouvez cloner votre rapport à l'aide de la ressource git
du chef
Sur la base de conseil de sadaf2605 , c’était le moyen le plus simple pour moi.
git '/path/to/destination' do
environment 'GIT_SSH_COMMAND' => 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /path/to/private_key'
repository '[email protected]:your/repo.git'
reference 'master'
action :sync
user 'vagrant'
group 'vagrant'
end