ローディング中

wordpress使い必見! gitでpushの際に自動でデプロイする方法

こんにちは個別指導塾コミット塾長、AWESOME開発担当の船津です。

目次

今回は面倒だけどやっておきたい簡易的なgitでの自動デプロイです。

wordpressのあまり大きくないプロジェクトだとテーマファイルだけさくっと管理したいという需要があると思います。今回はそんな人向けの記事です。

こちらを参考にさせていただきました。
https://gist.github.com/milo/daed6e958ea534e4eba3

やること

releaseブランチにgit pushするとリモート側のサーバーがgit pull releaseをしてreleaseブランチとファイルを同期させる

サーバーにphpファイルを設置

ファイル名はtest-deploy.phpにしてみます。

<php $hookSecret = 'githubで設定するsecretを書く'; # 空でもOK 
set_error_handler(function($severity, $message, $file, $line) { throw new \ErrorException($message, 0, $severity, $file, $line); }); set_exception_handler(function($e) { header('HTTP/1.1 500 Internal Server Error'); echo "Error on line {$e-&gt;getLine()}: " . htmlSpecialChars($e-&gt;getMessage());
	die();
});
$rawPost = NULL;
if ($hookSecret !== NULL) {
	if (!isset($_SERVER['HTTP_X_HUB_SIGNATURE'])) {
		throw new \Exception("HTTP header 'X-Hub-Signature' is missing.");
	} elseif (!extension_loaded('hash')) {
		throw new \Exception("Missing 'hash' extension to check the secret code validity.");
	}
	list($algo, $hash) = explode('=', $_SERVER['HTTP_X_HUB_SIGNATURE'], 2) + array('', '');
	if (!in_array($algo, hash_algos(), TRUE)) {
		throw new \Exception("Hash algorithm '$algo' is not supported.");
	}
	$rawPost = file_get_contents('php://input');
	if ($hash !== hash_hmac($algo, $rawPost, $hookSecret)) {
		throw new \Exception('Hook secret does not match.');
	}
};
if (!isset($_SERVER['HTTP_CONTENT_TYPE'])) {
	throw new \Exception("Missing HTTP 'Content-Type' header.");
} elseif (!isset($_SERVER['HTTP_X_GITHUB_EVENT'])) {
	throw new \Exception("Missing HTTP 'X-Github-Event' header.");
}
switch ($_SERVER['HTTP_CONTENT_TYPE']) {
	case 'application/json':
		$json = $rawPost ?: file_get_contents('php://input');
		break;
	case 'application/x-www-form-urlencoded':
		$json = $_POST['payload'];
		break;
	default:
		throw new \Exception("Unsupported content type: $_SERVER[HTTP_CONTENT_TYPE]");
}
# イベントタイプで処理を分けます
# https://developer.github.com/v3/activity/events/types/
$payload = json_decode($json);
switch (strtolower($_SERVER['HTTP_X_GITHUB_EVENT'])) {
		# githubからのテストping送信への応答
        case 'ping':
		echo 'pong';
		break;
		# push時の応答 OKを返しておきます
	case 'push': 
		# テーマフォルダに移動して、git pull 
	    exec('cd テーマフォルダの絶対パス; git pull origin release');
	default:
		header('HTTP/1.0 404 Not Found');
		echo "Event:$_SERVER[HTTP_X_GITHUB_EVENT] Payload:\n";
		print_r($payload); # For debug only. Can be found in GitHub hook log.
		die();
}

ファイルが作れたらサーバーの公開用ディレクトリに設置します。

githubの設定

設定ははこんな感じにします。
secretには先程のファイルの中に記述したものを使います。

Screen Shot 2016-07-24 at 12.04.46

成功するとこういったレスポンスが返ってきます。

 

Screen Shot 2016-07-24 at 12.00.17

コマンドが正しければreleaseブランチの内容がpullされてきているはずです。

最後に

いかがでしょうか?大抵の場合はこれで済んでしまうかと思われます。
セキュリティに関してはいろいろと課題がありそうですね。

ホームページ・デザイン制作のご相談・ご依頼は

079-451-5881

68ED4C65-BA1E-46D0-A7AC-B9869923C696 Created with sketchtool. A07C553F-CF16-4B7D-94FE-D36AE0A6297D Created with sketchtool. 37B7D8F4-7A18-4725-9EC6-595ABDF69D64 Created with sketchtool. 95DFB680-1EDF-4199-BC4A-BB6752EBA23C Created with sketchtool. 02DDF754-E1DB-4EF2-B6BB-C884722938C4 Created with sketchtool. NEW! 1A95E369-6469-4C46-B38F-F83410B928B0 Created with sketchtool. Group 5Group 2Group 4Group 3E4FC8CF2-721D-4699-8162-18E886C432C1 Created with sketchtool.