GitLab.comを使って、MixHostレンタルサーバーへの簡易デプロイ

WordPressのテーマカスタマイズ等をGitLabで管理しているため、自動でテーマの更新を行うようにしています。
GitLabへのpushを行なった時に、webhookを使って、release.phpを起動し子テーマを更新しています。

Gitの導入

MixHostは、Gitが入っていません。(私が契約した段階ではGitは入っていませんでしたが、現在も同じかはわかりません)

MEMO
参考にしていた記事が消えています。

覚えているのは、gettextをインストールしてからgitをインストールする必要があることです。
また、自動更新(クローン)を行うため、curl-develも必要になります。

GitLabからの簡易デプロイ

簡易デプロイの方式は以下の記事を参考にしています

参考 GitlabのWebhookを使って簡易デプロイ(Webサーバへ)をしてみたGiita

違う点

  • レンタルサーバーを使用しているため、サブドメインの作成、ベーシック認証設定はMixHostのcPanelから行います。
  • リポジトリのURLをhttpsにしているため、Deploy Keysの設定はしていません。
  • webhookの設定でkeyの値をSecret Tokenに設定しています。
https://ベーシック認証ID:ベーシック認証PASS@webhook.example.com/サブドメインディレクトリ/release.php
  • release.phpでkeyをSecret Tokenでチェックしています。
<?php
$secret_key = "キーを入力してください"; // GitLab以外からのリクエストを受け付けないためのキー
$git_username = "管理者ID"; // gitlabのID
$git_password = "管理者IDのパスワードを入力"; // gitlabのログインパスワード
$log_file = '/path/to/webhook/サブドメイン名_webhook_log.txt'; // ログの出力場所
$date = (new DateTime())->format('Y-m-d H:i:s');
$path_to_repository = '/path/to/サブドメイン名/www'; // レンタルサーバーのレポジトリがある場所
$branch_name = 'master'; // デプロイの対象ブランチ
$git = '/usr/local/bin/git';  // Gitの場所
$git_path = 'gitlab.example.com/リポジトリ(.git)'; // GitlabのリポジトリURL

$headers = getallheaders();
if ( empty( $headers['X-Gitlab-Token'] ) || !($headers['X-Gitlab-Token']==$secret_key) ) {
    echo "Invalid Secret token";
    $is_logged = error_log("[{$date}] Error: Invalid Secret tokenn",3,$log_file);
}

$json_string = file_get_contents('php://input');
$json = json_decode($json_string,true);

error_log("[{$date}] Pushed to {$json['ref']}n",3,$log_file);

if ($json['ref']=="refs/heads/{$branch_name}") { // releaseブランチのpushイベントの時のみ実行
    $git_remote = "http://{$git_username}:{$git_password}@{$git_path}";
    $command = "cd {$path_to_repository} && ${git} pull {$git_remote} {$branch_name} 2>&1";
    exec($command, $output, $exit_status);

    if ($exit_status > 0) {
        $error_msg = "[{$date}] Error: n";
        foreach ($output as $line) {
            $error_msg .= "    {$line}n";
        }
        error_log($error_msg,3,$log_file);
    } else {
        error_log("[{$date}] Updated successfullyn",3,$log_file);
    }
}
?>

PHPのタイムゾーン指定

PHPで、タイムゾーンが指定されていないとのワーニングがでるので、タイムゾーンの指定をします。
MixHostでは、php.iniは使えないため、.htaccessに以下を指定します。

php_value date.timezone 'Asia/Tokyo'

Monappy: MBDQ39VHypMQwfyR8SshuHvfPNUz321F6B

Monacoinを投げる
モナゲ(tipmona)ってなに?
そもそもMonacoinってなに?

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください