この記事では、「hook」という仕組みを用いて、git pushでデプロイができるように設定します。
hookというのは、「◯◯されたら△△する」という仕組みを実装できる機能です。
hookを用いてgit pushによるデプロイを実装するためには、いくつか設定が必要です。以下に記録しておきうます。
git pushコマンドでデプロイ(サーバーへのアップ)を自動化する
- サーバー上にベアリポジトリを作成する
- ベアリポジトリ内でフックを設定する
- ローカルリポジトリとベアリポジトリを紐付ける
サーバー上にベアリポジトリを作成する
SSHでログイン後、まずはcdコマンドでWordPressをインストールしたフォルダに行きます。
cd www
ここで、WordPressをインストールしたフォルダ「WP」を「wpbare.git」にクローンしましょう。このときの注意点は2点あります。
ひとつめの注意点は、必ず「–bare」というオプションを付けておくことです。こうすることでベアリポジトリを作成できます。
ベアリポジトリとは、通常のノンベアリポジトリと異なり、ソースファイル自体はなく、更新管理用のフォルダ(.git)しかないという特徴があります。
また、このベア(bare)とは「裸の」という意味で、.gitフォルダが隠しフォルダでなく表に出ているという特徴もあります。
もう一つの注意点は、ベアリポジトリの名前の末尾は必ず「.git」という名前にすることです。この形式でないと、正しく作成できないようです。
git clone --bare wp wpbare.git
上記のコマンドで、今回はwpbare.gitというベアリポジトリを作成しました。うまくいくと下記の通りになります。
cloning into bare repository 'wpbare.git'...done.
これでベアリポジトリの作成ができました。
ベアリポジトリ内でフックを設定する
次はgit hookの設定です。先ほども書いたとおり、hookというのは、◯◯されたら△△するという仕組みです。
これを利用して、bareリポジトリにプッシュされたらノンベアリポジトリからプルする(=デプロイ)という仕組みを作ります。
まずは、hooksフォルダに移動します。
cd wpbare.git/hooks
多数の制御ファイルがあることがわかります。
ls applypatch-msg.sample pre-commit.sample commit-msg.sample pre-push.sample post-receive pre-rebase.sample post-update.sample prepare-commit-msg.sample pre-applypatch.sample update.sample
今回はpost-receiveというファイルを操作します。
vi post-receive
デフォルトでは下記のとおりになっていますが、
#!/bin/sh ( cd ~/www/wp/ GIT_DIR=.git git fetch git reset --hard origin master git clean -fdx )
下記の通り書き換えます。プッシュされたら、リポジトリ「bare」のmasterブランチをpullする、という意味です。
#!/bin/sh cd ~/www/wp/ git --git-dir=.git pull bare master
次は、hookに実行権限を持たせるため、管理者権限で下記のコマンドを入力します。
chmod +x post-receive
これでリモート側の準備は終了です。次はローカル側での操作を行います。
ローカルリポジトリとベアリポジトリを紐付ける
exitを入力してローカルに戻ったら、ローカルリポジトリとリモートリポジトリの設定を行います。
前提として、鍵交換方式によるSSH接続と、.ssh/configの設定が必要です。鍵交換方式によるSSH接続と.ssh/configの設定が済んでいない場合は先にこちらの記事を参考にして設定しておきましょう。
上記の設定が済んだら、既存のリポジトリのpush先としてwpbare.gitを登録します。
git remote add bare sakura:~www/wpbare.git
ちなみに、新規にローカルリポジトリを作成する場合は、cloneでもいけると思います。その場合は下記のコマンドを実行します。
git clone sakura:~/www/wpbare.git
これで設定完了です。
コミットしてbareリポジトリにpushすると、本番サーバーが更新されるようになりました。
git push bare master
これで、post-receiveが動作していることがわかる、下記のようなメッセージが出れば成功です。(内容は適当です)。wpフォルダに移動して、ローカルで行ったコミットが反映されていることを確認してもいいでしょう。
hoge@hoge.sakura.ne.jp's password: Counting objects: 4, done. Delta compression using up to 8 threads. Compressing objects: 100%(2/2), done. writing objects: 100%(3/3),254 byts | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: hooks/post-receive: #!/bin/sh: note found remote: From ../wpbare remote: * branch master -> FETCH_HEAD remote: * [new branch] master -> bare/master remote: Updating 936d9be//fdasf231 remote: To sakura:~/www/wpbare.git 3sdfafdga..dadfsaf master -> master remote:
以上で、git hookの設定によるgit pushでの自動デプロイの設定は終了です!