ステップ1でWebhook専用の環境が用意できたはずです。 まだできていない場合はこちらへ:Webhookで自動デプロイ–ステップ1
では、次のステップへ。
今回実現したのは、ソースコードをgitlabサーバのリポジトリにプッシュしたら。
- gitlabサーバ側:gitlabのWebhookを利用して、デプロイサーバへ通知する
- デプロイサーバ側:gitlabサーバからの通知を受信したら、デプロイ作業する
デプロイサーバ側
まずデプロイサーバのLAMP環境に、gitlab.php
を追加します。
中身は下記のように入れます。
gitlabからのWebhookから受信したことを判断する(x_gitlab_token)
$env_token = 'enter_your_own_secret_token';
$clientenv_token = isset($_SERVER['HTTP_X_GITLAB_TOKEN']) ? $_SERVER['HTTP_X_GITLAB_TOKEN'] : '';
if ($clientenv_token !== $env_token) {
header("HTTP/1.1 403 Forbidden");
echo "Forbidden";
exit(0);
}
IPアドレスフィルターの追加(特定なIPからのプッシュのみ許可するように)
$env_allow_ip = array("123.123.123.123", "234.234.234.234");
$client_ip = $_SERVER['REMOTE_ADDR'];
if ( count($env_allow_ip) > 0 && !in_array($client_ip, $env_allow_ip)) {
header("HTTP/1.1 503 Service Temporarily Unavailable");
echo "Service Temporarily Unavailable";
exit(0);
}
イベントタイプの判断(プッシュイベントのみ)
$postdata = file_get_contents('php://input');
$data = json_decode($postdata, true);
$object_kind = $data["object_kind"];
if ($object_kind !== "push") {
writeLog($env_hook_log, "Error: ONLY Push event will be operated!");
exit(0);
}
ブランチの判断(Masterの場合のみ)
$branch = $data["ref"];
if ($branch === 'refs/heads/master') {
// do deploy stuff
exit(0);
}
それで簡単なデプロイサーバの設定は既に完了しました。
gitlabサーバ側の設定
プロジェクト→Settings→integration
Webhookを登録する
- url: http://デプロイサーバのIP/gitlab/gitlab.php
- secretToken: enter_your_own_secret_token
- Pushのみチェックを入れて、Add Webhookを追加
完了
次回からはもうちょっと柔軟性ありのgitlab.phpを作りましょう。