Debuginfo

思考とアウトプット

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)の追加
  2. GIT_SSHを利用するスクリプトの配置
  3. そのスクリプトを使うPlaybookを作る

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