Motomichi Works Blog

モトミチワークスブログです。その日学習したことについて書いている日記みたいなものです。

Bitbucketでmasterにマージしたときに、さくらのレンタルサーバスタンダードでgit pullを自動実行する

参考にさせて頂いたページ

Bitbucketからさくらのレンタルサーバ(スタンダードプラン)へ自動デプロイ | Berry22.com

前提として

phpからシェルスクリプト(git pull)を実行する方法

準備段階として、

さくらのレンタルサーバスタンダードでphpからシェルスクリプト(git pull)を実行する - MOTOMICHI WORKS BLOG

という記事を先日書いた。

サーバにログインして、手で

php run-the-shell.php

のコマンドを実行する事で、git pullする方法について書いた。

これが正常に実行できる状態までやっておくと、次のステップが楽かなと思ってやってみた。

上記の記事を発展させて

今回はBitbucketのWebhooksから、run-the-shell.phpと同様の処理を実行すれば良さそう。

Bitbucketからさくらのレンタルサーバ(スタンダードプラン)へ自動デプロイ | Berry22.com

を参考にさせて頂きながら、進めていきます。

deployディレクトリを作成

deployディレクトリを、公開ディレクトリの直下に作成した。

コントロールパネルから、ベーシック認証を設定する

以下のURLを参考に、deployディレクトリに対してベーシック認証を設定した。

ファイルマネージャーでアクセス制限をする|さくらインターネット公式サポートサイト

deploy.phpの作成とその記述内容

参考ページにならって、$secret_keyと、それを評価するif文を追記したので、以下のようになった。

<?php
  $secret_key = "任意の文字列";//Bitbucketからkey=〇〇として渡す文字列
  if($_GET[key] === $secret_key){
    $cmd = '/home/ユーザ名/shellscript/git-pull.sh';
    //git-pull.shを実行して結果を取得
    $res = system($cmd);
    //deploy.log("ファイルパス","モード");
    $fp = fopen("/home/ユーザ名/log/deploy.log", "a");
    //日時を書き込み
    fwrite($fp, date('c')."\n");
    if (false === $res) {
      //実行結果がfalse
      fwrite($fp, "cmd false\n");
    } else {
      //コマンド実行結果を書き込み
      fwrite($fp, $res."\n");
    }
    //deploy.logを閉じる
    fclose($fp);
  }
?>

deploy.phpの配置

さきほど作成したdeployディレクトリにdeploy.phpを配置した。

deploy.phpを手で実行してみる

deploy.phpのif文のところをコメントアウトするとかTRUEになるようにするとかしたあと、ターミナルでサーバーにログインして、deploy.phpがあるフォルダに移動する。

php deploy.php

を実行して、git pullが実行されるようであれば大丈夫。

Permission deniedとか表示されるようであれば、パーミッションの変更が必要。

無事にgit pullが実行できたら、if文はもとに戻しておく。

SSLの利用設定をする

SSLの利用設定がまだの場合は

共有SSLの設定|さくらインターネット公式サポートサイト

を参考に共有SSLを利用する設定にして、httpsのURLが使えるようにする。

BitbucketのWebhooksを設定する

リポジトリを選択して、Settings > Webhooks > Add webhookの順にクリック。

Titleには任意の文字列

URLは参考ページにならって、https://【Basic認証ID】:【Basic認証パスワード】@【ドメイン】/deploy/deploy.php?key=【$secret_keyと同じ文字列】

次にTriggersから任意のトリガーを選択する。

Repository pushラジオボタンを選択しておくと、リポジトリに対してPushしたときや、プルリクエストをマージしたときなどに、設定したURLにリクエストが送信されるみたい。

動かしてみる

Bitbucketでプルリクエストをmasterに対して送って、マージするとdeploy.phpが実行される。