GitHubにプッシュすると自動でWordPressに反映されるようにする方法

github-394322_1280

目的

ローカルで修正したWordpressのテンプレートなどのソースコードをGitHubにプッシュしたあと、レンタルサーバーのログインしてファイル転送するというのが凄く手間だったのでもっと簡単に反映させたいと思い作成しました。

最終ゴール

ローカルで修正したソースコードをGitHubにプッシュしたら自動でレンタルサーバー側に反映させる

GitHubのWebHook機能を利用する

wordpress側にGitHubからPayloadさせる為のPHPファイルを用意する

wordpressがインストールされているサーバーにはPHPがインストールされているので、GitHub側からPayloadさせる為のPHPファイルを作成します。

GitHubにプッシュした際にGitHubから作成したPHPをコールしてもらいPHPファイルでGitHubからソースをPULLさせるようにします

以下のPHPファイル内のコードをコピーして”git-repository” の部分を修正してください。また、誰でも実行できてしまうのはセキュリティ的によろしくないので、GitHub側からシークレットキーを渡すようにしています。”secret-key”の部分を適当に書き換えてください。

git-hook.php

<?php

$LOG_FILE = dirname(__FILE__).'/git-hook.log';
$SECRET_KEY = '<secret-key>';

if ( isset($_GET['key']) && $_GET['key'] === $SECRET_KEY && isset($_POST['payload']) ) {
    $payload = json_decode($_POST['payload'], true);
    if ($payload['ref'] === 'refs/heads/master') {
        `cd <git-repository> && git pull origin master`;
        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);
}

.htaccess のアクセス制限や、レンタルサーバー側のセキュリティ設定をしている場合はアクセス出来ないので除外設定をする必要があります

また、git pull する際に、パスフレーズなしで実行できるように鍵の設定などは済ませておきましょう。

GitHub側でWebHookを設定します。

Payload URL にWordpressがインストールされているサーバーに配置したPHPファイルのパスと、先程記述したシークレットキーを渡すように設定します。

github-webhook

これで、ローカルからGitHubにプッシュすると自動的にWordpress側でGitHubからプルされるようになりました。git-hook.log にログが出力されるのでうまくいかない時は確認してみてください。

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。