February 2, 2018 • ☕️ 4 min read

ステップ1でWebhook専用の環境が用意できたはずです。 まだできていない場合はこちらへ:Webhookで自動デプロイ–ステップ1

では、次のステップへ。

今回実現したのは、ソースコードをgitlabサーバのリポジトリにプッシュしたら、

  1. gitlabサーバ側:gitlabのWebhookを利用して、デプロイサーバへ通知する
  2. デプロイサーバ側:gitlabサーバからの通知を受信したら、デプロイ作業を行う

デプロイサーバ側

まずデプロイサーバのLAMP環境に、gitlab.phpを追加します。

中身は下記のように入れます。

gitlabからのWebhookから受信したことを判断する(xgitlabtoken)

$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-1.png

Webhookを登録する

webhook-2.png

完了

次回からはもうちょっと柔軟性ありのgitlab.phpを作りましょう。


関連投稿

Webhookで自動デプロイ–ステップ3

February 5, 2018

Webhookで自動デプロイ–ステップ1

January 16, 2018

Blog part of ThunderMiracle.com