はじめに
今日もニッチ記事
Windows環境とLinux環境の両方にデプロイしたい時の対応方法です
このような場合、コマンドの自由度が非常に高い Deployer が非常に有効です
大前提
Windows環境は PowerShell
が入っている前提で色々書いてます
公式ドキュメント
最初のinstall
composer を使って管理しましょう!
composer がすでに入ってるPHP系のプロジェクトだと相性が良さそうですね
それ以外だと、composer から入れてください
$ composer require deployer/deployer --dev
$ composer require deployer/recipes --dev
$ ./vendor/bin/dep init
Hostの設定を使用
- stage を Windows と Linux で分けたほうが
deploy_path
管理的に楽
host('YourWindowsHostName')
->hostname('1.1.1.1')
->stage('windows')
->roles('apps')
->set('deploy_path', 'C:\Apps\application');
host('YourLinuxHostName')
->hostname('1.1.1.2')
->stage('linux')
->roles('apps')
->set('deploy_path', '/Apps/application');
task を作ろう
git から clone
や pull
するだけのタスクを書いてみました
// New Task
desc('Update code');
task('deploy:deploy_code', function () {
$repository = trim(get('repository'));
$branch = get('branch');
$stage = get('stage');
$recursive = '--recursive'; // include subproject
$quiet = '-q'; // quiet
$delimiter = '/'; // path delimiter
$command_delimiter = '&&'; // command delimiter
$options = [
'tty' => get('git_tty', false),
];
if ('windows' === $stage) {
$delimiter = "\\";
$command_delimiter = ";";
}
$application_path = "{{deploy_path}}$delimiter{{application}}";
if ('windows' === $stage) {
$dir = run("Test-Path $application_path", $options);
} else {
$dir = run("if [ -d $application_path ]; then echo 'True'; fi");
}
if ($dir == "True") {
run("git clone $recursive $quiet $repository $application_path 2>&1", $options);
} else {
run("cd $application_path $command_delimiter git pull $quiet 2>&1", $options);
}
});
使い方
$ ./vendor/bin/dep deploy_code windows
$ ./vendor/bin/dep deploy_code webapp
ポイント
- PowerShell が動けば基本何でもできる!
- Windows特有の設定とLinux特有の設定は最初に定義すればほぼほぼ共通化出来る
- WindowsとLinux同時にアップするのを考えるのは大変なので、LinuxとWindowsは別々にアップを実行するようにすれば設定は意外と簡単にかける
最後に
Windows環境の自動デプロイ(CD)ってのは事例が少ないですが、やろうと思えば出来ます
Windows環境だからといって諦めずにやってみてください!