fabricでgit cloneを使ってbitbucketから資材を取得する
前回、fabricの簡単なサンプルを用いてgitコマンドのインストールを行ってみたのですが、次は実際にgit cloneで資材を取得してみましょう。gitのリポジトリはbitbucketです。
まずは手動で試してみる
fabricのいいところって一度試して、historyの内容をコピーする形で構築手順書を作れる所だと思うのです。なので、いきなりfabfileに書き始めるのではなくまずは一度手動で試してみましょう。何度かやり直す場合もあると思うのでVM環境を構築してスナップショットを作成しておくと良いかもしれません。
まずはgit cloneしてみます。
1 2 3 4 |
git clone git@bitbucket.org:***/***.git The authenticity of host 'bitbucket.org (XXX.XXX.XXX.XXX)' can't be established. RSA key fingerprint is (略). Are you sure you want to continue connecting (yes/no)? |
さて、さっそく問題発生です。対話式でyes/noの入力の必要が出てきました。このままではfabricで自動化できません。(やり方があるかもしれませんが)。
またこちらを解決してもSSHキーの設定を実施する必要があります。設定のやり方によってはパスフレーズを聞かれてしまうので、以下の方法でパスフレーズを聞かれないように設定します。
~/.ssh/configの修正
1 |
vi ~/.ssh/config |
1 2 3 4 5 6 7 8 |
Host bitbucket.org HostName bitbucket.org IdentityFile ~/.ssh/bitbucket/id_rsa.bitbucket.org User git Port 22 TCPKeepAlive yes IdentitiesOnly yes StrictHostKeyChecking no |
秘密鍵と公開鍵を作成する
1 2 3 4 |
$ cd ~/.ssh $ mkdir bitbucket $ cd bitbucket $ ssh-keygen -t rsa -C "bitbucketにユーザ登録しているメールアドレス" |
1 2 3 |
Enter file in which to save the key (/home/fabric/.ssh/id_rsa): id_rsa.bitbucket.org Enter passphrase (empty for no passphrase):(入力せずにEnter) Enter same passphrase again:(入力せずにEnter) |
パーミッションを600にしておきます。
1 |
chmod 600 id_rsa.bitbucket.org |
bitbucketにsshキーを設定する
id_rsa.bitbucket.org.pubの内容(メールアドレスを含む)をコピーして貼り付けします。
1 |
cat ~/.ssh/bitbucket/id_rsa.bitbucket.org.pub |
git cloneを実行する
再度実行してみましょう。対話式なしで取得出来ました。
1 2 3 4 5 6 7 |
$ git clone git@bitbucket.org:****/****.git Initialized empty Git repository in /home/fabric/.ssh/bitbucket/****/.git/ remote: Counting objects: 157, done. remote: Compressing objects: 100% (134/134), done. remote: Total 157 (delta 11), reused 157 (delta 11) Receiving objects: 100% (157/157), 3.20 MiB | 47 KiB/s, done. Resolving deltas: 100% (11/11), done. |
fabricで取得する
ここからが本番です。historyコマンドを入力して、実際に実行した内容を確認しましょう。更に実行内容をコピーしてfabfile.pyを作成しましょう。
1 2 3 4 5 6 7 8 9 10 |
from fabric.api import sudo, run, put def install_services(): sudo("yum install -y git") def clone_git_repo(): run("mkdir ~/.ssh/bitbucket") put('./assets/key/bitbucket/', '~/.ssh/bitbucket/') run("chmod 600 ~/.ssh/bitbucket/*") run("git clone git@bitbucket.org:****/****.git") |
putはファイル転送です。ここではbitbucketにSSHアクセスするため秘密鍵を転送しています。
今回もローカルで試しました。新しくgit cloneしたディレクトリが追加されていたら成功です。
1 2 3 4 5 6 |
$ fab -u fabric -H localhost clone_git_repo [localhost] out: Initialized empty Git repository in /home/fabric/****/.git/ [localhost] out: Receiving objects: 100% (157/157), 3.20 MiB | 600 KiB/s, done. [localhost] out: Resolving deltas: 100% (11/11), done. Done. Disconnecting from localhost... done. |
次はAWS環境にfabricでgit cloneをしてみたいと思います。
参考
[Gehirn RS2] SSHキーをBitbucketに登録してgitコマンドを使えるようにする