blogのデータをGitHubで管理できるように設定しました。
クライアント側の設定はいつも通りのGitHubとのremote設定。GitHub側のデプロイするリポジトリのSettingのWebhookの設定で外部サーバへデプロイする仕組みを用意します。
設定を埋めてゆきます。
受け取りのファイルを作ります。
https://git-scm.com/book/ja/v2/GitHub-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AB%E3%82%88%E3%82%8B-GitHub-%E3%81%AE%E6%93%8D%E4%BD%9C
https://developer.github.com/webhooks/
<?php $SECRET_KEY = 'Secretに入れた文字列'; $LOG_FILE = dirname(__FILE__).'/hook.log'; #ログを取る場所 if (! isset($_SERVER['HTTP_X_HUB_SIGNATURE'])) die(); if (! $_SERVER['HTTP_X_HUB_SIGNATURE'] === sha1($SECRET_KEY)) die(); $json_string = file_get_contents('php://input'); $payload = json_decode($json_string, true); if (! $payload['ref']) die(); if ($payload['repository']['full_name'] === 'アカウント名/リポジトリ名' && $payload['ref'] === 'refs/heads/更新該当のブランチ') { shell_exec("sh deploy.sh"); file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." ".$_SERVER['REMOTE_ADDR']." git pulled: ".$payload['head_commit']['message']."\n", FILE_APPEND|LOCK_EX); }else{ file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." invalid access:認証通っていません ".$_SERVER['REMOTE_ADDR']."----\n", FILE_APPEND|LOCK_EX); } ?>
上記スクリプトは、http://takemikami.com/2016/01/11/GitHubWebhookgit-pushdeploy.htmlを参考にさせていただいております。ありがとうございます。
受け取って、リクエストが指定したリポジトリからで、イベントとキーが一致したら、
gitコマンドをシェルスクリプトで実行します。
#!/bin/sh cd /home/tomtomhouse/www/www.tomo.mobi/wordpress git --git-dir=.git pull origin master
受け取りのプログラムファイルもgitコマンドを打つシェルスクリプトもファイルの権限は「実行」に設定します。
この時、SSH通信でRSA暗号のパスフレーズが必要のときは、ssh-keygenでキーを生成するときにパスフレーズの設定を無しで作ると良いです。
備考
.gitignoreはGitHubのものを使うのが良いと思います。
https://github.com/github/gitignore/blob/master/WordPress.gitignore