单台服务器
在大多数情况下,我们不需要多台生产服务器。最好在该机器上也构建发布文件(如缓存、js/css打包)。因此,我们的构建不依赖于我们的本地配置,并且可以从任何地方部署。默认情况下,Deployer 配方旨在填充这些类型的部署。
desc('Deploy your project');
task('deploy', [
'deploy:prepare',
'deploy:release',
'deploy:update_code',
'deploy:shared',
'deploy:vendors',
'deploy:symlink',
]);
构建服务
如果我们有许多台服务器将要部署我们的应用,或者我们打算使用一个 CI 服务器,最好在一台服务器上构建发布版本,然后将文件上传到所有的应用服务器上。
为此,创建一个 build 本地任务:
task('build', function () {
run('composer install');
run('npm install');
run('npm run build');
// ...
})->local();
注意,也可以使用一个简单的任务定义
task('build', '
composer install
npm install
npm run build
...
');
之后创建一个 upload 任务:
task('upload', function () {
upload(__DIR__ . "/", '{{release_path}}');
});
接下来,创建发布和部署任务:
task('release', [
'deploy:prepare',
'deploy:release',
'upload',
'deploy:shared',
'deploy:writable',
'deploy:symlink',
]);
task('deploy', [
'build',
'release',
'cleanup',
'success'
]);
现在我们可以运行 dep deploy 命令
重用常见配方
如果要重用常见配方中的某些任务,请确保在调用任务之前,设置 deploy_path。所有的常见配方任务都依赖于此参数。
task('build', function () {
set('deploy_path', __DIR__ . '/.build');
invoke('deploy:prepare');
invoke('deploy:release');
invoke('deploy:update_code');
invoke('deploy:vendors');
// Add more build steps here
invoke('deploy:symlink');
})->local();
注意:确保在调用任务之前,设置 deploy_path。
之后创建一个 upload 任务:
task('upload', function () {
upload(__DIR__ . "/.build/current/", '{{release_path}}');
});
该任务从构建步骤中的 deploy_path 的当前符号链接中获取内容,之后将其上传到应用程序的 release_path 路径。