Deployerを使って、簡易的なデプロイシステムを構築します。
Jenkinsみたいに色々サーバサイドで弄る必要はありません。が、PHPが必要です。
まあ、composerを使えば一発なので、そこは割愛します。
フォルダ構成
┌ deployer.phar
├ deploy.php
├ dev1/
├ dev2/
├ gitdata
├ repository/
└ source/
Deployerを使って、masterブランチ含む、任意のブランチを
dev1
フォルダーまたはdev2
フォルダーにデプロイします。
deploy.php
こんな感じで書きます。
<?php
namespace Deployer;
use SymfonyComponentConsoleInputInputArgument;
require 'recipe/common.php';
// デプロイ先を取得
argument('deploy', InputArgument::OPTIONAL, 'deploy path');
argument('branch', InputArgument::OPTIONAL, 'branch name');
task('deploy', function() {
// デプロイ先が指定されているかの確認
$deploy = input()->getArgument('deploy');
if ( empty($deploy) === true ) {
writeln('デプロイ先のフォルダー指定がない');
return false;
}
// ブランチの取得
$branch = input()->getArgument('branch');
// ブランチの指定がなければmasterブランチをクローンする
if ( empty($branch) === true ) {
$branch = 'master';
}
// カレントフォルダ取得
$pwd = run('pwd') . '/'; // 現在のカレントフォルダへのフルパスを取得
// デプロイ先フォルダパスを設定
$path = $pwd . $deploy . '/projects/';
// フォルダの中身を削除
run('rm -rf ' . $pwd . 'site/');
run('rm -rf ' . $pwd . 'repository/');
// ギットからブランチを指定してデータをクローン
run('git clone --mirror [GitHubのURL] repository/');
// 作業用フォルダの作成
run('mkdir site/');
// クローンしたフォルダに移動
cd($pwd . 'repository/');
// 作業用フォルダにデータをチェックアウト
run('GIT_WORK_TREE='. $pwd .'site/ git checkout -f ' . $branch);
// カレントディレクトリに戻る
cd($pwd);
// データを対象フォルダにデプロイ
run('rsync -rlpgoDzv --delete --progress ' . $pwd . '/site/. ' . $path);
// 終わり
writeln('\(・ω・\)コピー(/・ω・)/オッケー');
});
実行
こんな感じで実行します。
$ ./deployer.phar deploy dev1 # master ブランチがdev1にデプロイされる
$ ./deployer.phar deploy dev2 test # test ブランチがdev2にデプロイされる
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。