Ansibleでgit clone private repoする方法 - そのPlaybookをDocker containerとPacker provisioner両方で使う場合
AnsibleをVM経由でプライベートRepoをgit cloneするのにはSSH fowardingを使う模様。 今回はAnsible playbookをPackerのAnsible provisionerで使いたい。けど、ご存知のようにPackerのAnsible provisionerはansible-localでAnsibleホストとは独立で、SSH fowardingは使えなそうだ。
少し調べてみて, (あまりやりたくないけど)秘密鍵をAnsibleでコピーしてそれを使ってgit cloneすることにした。具体的な流れは下記のようになる。
1. private RepoにAnsibleホストのDeploy key(ssh key)の追加
特に説明はいらないと思う。RepoのトップからSettings->Deploy keysでSSH pubkeyの追加
2. GIT_SSHを利用するスクリプトの配置
gitssh.sh
/tmp/aaaが秘密鍵
#!/bin/sh exec ssh -i /tmp/aaa -o StrictHostKeyChecking=no "$@"
gitclone.sh
gitssh.shを使ってgit cloneするスクリプトを書く。秘密鍵は使ったらすぐ削除。
#!/bin/bash cd /opt GIT_SSH=/tmp/gitssh.sh git clone git@xxxx.git rm /tmp/aaa
3. Ansible Playbook作成
--- - name: copy jenkins files copy: src=aaa dest=/tmp/aaa mode=0600 - name: copy gitssh.sh copy: src=gitssh.sh dest=/tmp/gitssh.sh mode=0700 - name: copy gitclone.sh copy: src=gitclone.sh dest=/tmp/gitclone.sh mode=0700 - name: execute gitclone command: /tmp/gitclone.sh