Chefを使用してアプリケーションをデプロイするときに、次のリソースを使用してプライベートgithubリポジトリからクローンを作成するようにコードベースを設定しました。
git '/mnt/application' do
repository '[email protected]:organization/repository'
reference 'master'
action :sync
user node.application.user
group node.application.user
end
ただし、ドキュメントでgit
リソースをスキャンした後、認証用のキーファイルをどのように提供するかがわかりません。ファイルにはたくさんの新しい行が含まれているため、このキーをデータバッグに保存する方法についても混乱しています。何か案は?
ssh_wrapper "ssh -i /some/path/id_rsa"
誰かがこれに遭遇した場合、上記は私にとってはうまくいきませんでした、私はエラーを受け取り続けました:
error: cannot run ssh -i /some/path/id_rsa: No such file or directory
Ssh_wrapperを指定すると、GIT_SSH環境変数が設定され、GIT_SSH環境変数にパラメーターを指定できないことがわかります( GIT_SSHエラーを使用したカスタムSSHを使用したGitクローン を参照)。
代わりに、最初にスクリプトをファイルに書き込んでから、GIT_SSHをそのファイルに設定する必要があります。
そう:
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
そして、gitリソース部分を次のように変更します。
git "/opt/mysources/couch" do
repository "git://git.Apache.org/couchdb.git"
reference "master"
action :sync
ssh_wrapper "/some/path/git_wrapper.sh"
end
Mercurialにも同様の設定を使用していますが、Gitでも同じである必要があります。
認証にはsshキーを使用します。キーは暗号化されたデータバッグに保存されます(改行は「\ n」に置き換えられます)。まず、この秘密鍵はデータバッグからノード上に作成されます。
git_key = Chef::EncryptedDataBagItem.load( "private_keys", "git_key" )
file "/some/path/id_rsa" do
content git_key['private']
end
そして、ssh_wrapperを使用してgitリポジトリに接続するときにそれを使用します。
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
私は同じ問題を経験しました、私が欠けていたのはこのコマンドだけでした、そしてすべてがうまくいきました:
GIT_SSH_COMMAND="ssh -i ~/.ssh/bitbucket_rsa"
参照と私の全ステップについては、私のブログで見つけることができます: http://www.sadafnoor.com/blog/simplest-way-to-write-your-chef-cookbook-that-git-clone-private -repo-using-bitbucket-deploy-key /
linuxディストリビューションを使用している場合は、sshキーを<your home directory>/.ssh
に保存し、github.comを<your home directory>/.ssh/known_hosts
に追加します。
次のコマンドを使用して、github.comをknown_hostsに追加できます
ssh-keyscan -H github.com >> <your home directory>/.ssh/known_hosts
これを行った後、シェフのgit
リソースを使用してリポジトリのクローンを作成できます
hint by sadaf2605 に基づくと、これが私にとって最も簡単な方法でした。正しいユーザー/グループを設定し、StrictHostKeyCheckingをオフにする必要がありました。
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