特性
-- | -- |
---|---|
快速 | 采用了比如并发发布、ssh通道复用、缓存可用情况下使用缓存等技术加速代码部署 |
原子部署 | 在新发布的版本内执行所有定义的操作,诸如下载依赖、设置文件访问权限等都不会直接影响线上,只有全部成功后,最后一步设置软链才会真正替换线上代码 |
快速回滚 | 由于采用了原子部署,所以回滚也只是重新设置一下软链指向 |
并发部署 | 集群环境下,并发在所有机器上执行相同的部署流程 |
一致性 | 集群环境下,只有所有机器都执行成功才算成功,一台失败则全部失败 |
内置多个框架发布模板 | 比如Laravel、Yii、Symfony、CodeIgniter、Zend Framework等 |
易扩展 | 很容易可以依据自己的项目用Common模板编写发布流程 |
安装
composer global require deployer/deployer
生成部署模板
安装完成后,切换到自己的项目目录,执行dep init,按照自己项目使用的框架选择生成的部署模板:
➜ Anna dep init
Please select your project type (defaults to common):
[0] Common
[1] Laravel
[2] Symfony
[3] Yii
[4] Zend Framework
[5] CakePHP
[6] CodeIgniter
[7] Drupal
> 0
如果你的框架未使用上面列出的任何一个框架,则选择0,然后回车,就会生成通用的发布模板。
执行完这一步应该会在你的项目根目录生成一个deploy.php
文件。
你所需要的做的一切就是编辑这个脚本,填写一些自己的服务器和项目配置,然后定制一些task
。
下面我将用一个具体的配置文件来介绍deployer
的使用,配置文件如下:
<?php
namespace Deployer;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
require 'recipe/common.php';
// Project name
set('application', 'pic.52inlove');
// Project repository
set('repository', '/web/pic.52inlove.git');
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', true);
// Shared files/dirs between deploys
set('shared_files', []);
set('shared_dirs', []);
set('bin/symlink', 'ln -nfs');
set('composer_action', 'update');
// Writable dirs by web server
set('writable_dirs', []);
set('allow_anonymous_stats', false);
task('pic:change', function () {
run('chown -R www-data:www-data /web/www/pic.52inlove');
run('service php7.0-fpm restart');
writeln("=======================================");
});
option('v', null, InputOption::VALUE_OPTIONAL, 'version to deploy.');
task('pic:rollback', function(){
$v = input()->getOption('v');
run('cd /web/www/pic.52inlove && ln -nfs /web/www/pic.52inlove/releases/'. $v .' current');
});
// Hosts
host('pic.52inlove.com')
->user('root')
->set('writable_mode', 'chmod')// 采用哪种方式控制可写权限,有4中:chown、chgrp、chmod、acl(默认方式)
->set('writable_chmod_mode', '0755')// 当使用chmod控制可写权限的时候,赋予的可写权限值
->set('deploy_path', '/web/www/{{application}}');
// Tasks
desc('Deploy your project');
task('deploy', [
'deploy:info',
'deploy:prepare',
'deploy:lock',
'deploy:release',
'deploy:update_code',
'deploy:shared',
'deploy:writable',
'deploy:vendors',
'deploy:clear_paths',
'deploy:symlink',
'deploy:unlock',
'pic:change',
'cleanup',
'success',
]);
// [Optional] If deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');
after('rollback', 'pic:change');
做完上面的事情之后,所有的准备工作就算完成了。接下来就可以进行部署测试了。
配置项查看
dep config:dump
这里面Parameter
都是可配置的 ,bin/symlink
的值就是配置后改的 原来默认值是 ln -nfs --relative
总是会有错误所以改了不使用相对路径
Parameter | Value |
---|---|
writable_mode | chmod |
writable_chmod_mode | 0755 |
deploy_path | /web/www/{{application}} |
ssh_multiplexing | Yes |
default_stage | |
application | pic.52inlove |
working_path | /web/www/pic.52inlove |
env | [] |
keep_releases | 5 |
releases_list | |
release_name | 6 |
current_path | /web/www/pic.52inlove/releases/5 |
release_path | /web/www/pic.52inlove/releases/5 |
branch | master |
bin/git | /usr/bin/git |
git_cache | No |
hostname | pic.52inlove.com |
user | Anna |
target | pic.52inlove.com |
repository | /web/pic.52inlove.git |
shared_dirs | [] |
shared_files | [] |
copy_dirs | [] |
writable_dirs | [] |
writable_use_sudo | No |
writable_chmod_recursive | Yes |
http_user | No |
http_group | No |
clear_paths | [] |
clear_use_sudo | No |
cleanup_use_sudo | No |
use_relative_symlink | Yes |
use_atomic_symlink | Yes |
composer_action | update |
composer_options | {{composer_action}} --verbose --prefer-dist --no-progress --no-interaction --no-dev --optimize-autoloader |
bin/php | /usr/bin/php |
bin/composer | {{bin/php}} /usr/local/bin/composer |
bin/symlink | ln -nfs |
git_tty | Yes |
allow_anonymous_stats | No |
回滚
配置了bin/symlink
不使用默认值,就可以正确回滚了,具体不知道原因。
dep rollback