gitでの話ですが、bitbucketにpushして自動でサーバにデプロイするまでの一連の流れをメモ
ネットで探すと見つかるのですが、ちょっとわかりにくかったので
開発初心者なのでいろいろよろしくないやり方も多いと思います
もしご指摘あれば頂けるとうれぴーです
こんなんでも誰かの役に立てばいいなと思いました
全体の流れとしては、
- bitbucketにpush
- (自動的に)bitbucketからサーバにPOST
- PHPでPOST受けて、(自動的に)git pullする
って感じ
環境とか
下記の環境やら想定でやってます
- bitbucketでgitでコード管理している
- サーバ:さくらVPS 1Gプランのやつ
- サーバでgit,PHPが動く
bitbucketの設定
-
ログインしたら、右上の方にある歯車アイコンをクリック
-
左メニューの
Services
をクリック -
すると画像のようにPOSTという項目が追加される
-
URLに
デプロイ先サーバのURL+deploy.php
を入力しSave
例:http://yourdomain.com/deploy.php
URLについては後で解説
都合の良いものに変えちゃって下さい
この設定をすると、bitbucketにpushする度に指定したURLにPOSTしてくれます
ちなみに、今回は使っておりませんがPOSTの際にこんな感じのデータもやりとりしているので、もっといろいろやれそう
サーバ側の準備
これが結構めんどかった
開発初心者なので、いい勉強になりました
ちょいちょい sudo -u apache というのを使っておりますが、
これは権限の管理をapacheユーザやるためですねー
ここからはサーバコマンドライン
sudo -u apache ssh-keygen
作成先は /var/www/.ssh/
pass phraseはなし
作成したid_rsa.pubをbitbucketのDeployment keys
に追加
さっきの歯車アイコンのとこにあります
サーバコマンドライン
sudo -u apache git clone [自動デプロイしたいbitbucketのリポジトリ]
サーバ側のプログラム
サーバ側にはPOSTを受け取り処理するPHPファイルを置きます
<?php
if($_SERVER["REQUEST_METHOD"] != "POST"){
// GETによるアクセス
}else{
// POSTによるアクセス
$cmd = '. /var/www/html/update.sh';
$retstr = system($cmd, $res);
$fp = fopen("deploy.log", "a");
fwrite($fp, date('c')."\n");
if ($retstr === FALSE || 0 !== $res) {
fwrite($fp, "cmd false\n");
} else {
fwrite($fp, $res."\n");
}
fclose($fp);
}
?>
このPHPファイルでは下記の/var/www/html/update.sh
を読み込んでます
git pullしてるだけです
現状だとどんなbranchがpushされてもgit pullします
特に触らなければbranchはmasterのままなので、masterが更新されたときだけWebには反映されます
#!/bin/sh
cd /var/www/html/[rep-name]
/usr/bin/git --git-dir=/var/www/html/[rep-name]/.git pull
まとめ
とりあえずこれで、bitbucketにpushして自動的にサーバに更新を反映できます
超重要な注意点ですが、このまま使うと誰でもこのPHPにPOSTアクセスすると無条件にgit pullしちゃうという超危険な状態です
POST元がbitbucketのときだけgit pullするみたいな書き方しないとですね
(初心者なのでよくわからない)
デプロイって書いちゃいましたが、これはgitの更新だけですね^^;
アプリケーションだったら、app restart的な処理をupdate.shに書き加える必要があります
(現在nodeアプリ開発中ですが、うまくできない)