レポにプッシュするときに、サーバー上の PHP スクリプトに POST を送信するように github webhooks をセットアップしました。( https://help.github.com/articles/post-receive-hooks )
私の PHP スクリプトは、接続している IP と受信したペイロードをログに記録します。
$date = strftime('%c');
file_put_contents('log.txt', PHP_EOL.trim($date).PHP_EOL, FILE_APPEND);
try
{
$payload = json_decode($_REQUEST['payload']);
}
catch(Exception $e)
{
exit(0);
}
//LOG THE POST REQUEST
file_put_contents('log.txt', print_r($payload, TRUE), FILE_APPEND);
//EXECUTE A SCRIPT WHEN THE POST REQUEST IS INITIALIZED
if ($payload->ref === 'refs/heads/master')
{
exec('deploy.sh >> log.txt');
}
ログから、リポジトリにプッシュすると IP が接続されることがわかりますが、POST データは記録されません。RequestBin でテストしたところ、POST データが存在することが確認されました。さらに、$_GET ペイロード変数を URL に手動で配置すると、それが記録されます ($_POST だけでなく $_REQUEST をチェックしているため)。PHP サーバーが他のサーバーからの POST 要求を拒否するように構成されているのではないかと考えています。私は 1and1 共有ホスティングを使用しているため、専用の制御はありませんが、SSH でログインしたり、.ini ファイルを使用してローカルで PHP 設定を構成したりできます。どんな提案でも大歓迎です!
*これをPHPで行うか、他の言語で行うかは気にしません。Python などを使用した方が簡単だと思われる場合は、それも素晴らしいことです。
-ジェレミー