2018年2月2日 • ☕️ 4 min read

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

では、次のステップへ。

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

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

デプロイサーバ側

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

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

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

Copy
$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からのプッシュのみ許可するように)

Copy
$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);
}

イベントタイプの判断(プッシュイベントのみ)

Copy
$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の場合のみ)

Copy
$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

2018年2月5日

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

2018年1月16日

ThunderMiracle

Blog part of ThunderMiracle.com