PHP自动化发布工具:Deployer

项目迭代的过程中, 不断把新开发的功能发布到不同的系统环境是一件家常便饭的工作. 传统的做法一般是: 登录到某台服务器上; 更新代码; 更新依赖(composer up); 重启一些服务(比如队列什么的)... 随着项目逐渐长大, 服务器的数量会越来越多, 每次发布新功能都需要亲自登录到20台服务器上, 一遍又一遍的做着重复的操作,还得确保每一次操作都正确且没有疏漏, 对于程序员来说, 这样的事情是不可想象的。重复的工作,就交给代码去完成吧!

Deployer 是一款用PHP开发的自动化发布工具。又要发布新版本了? 你所要做的仅仅是在命令行中输入一行命令,执行预先写好的脚本,之后所有的工作deployer会帮你完成。甚至,你还可以把它和版本控制工具的Hook结合起来,例如,当master分支收到新的提交后,deployer自动从版本控制中拉去新的代码,并在指定服务器上完成后续的发布工作,自动化发布实现了!

如果你是一名PHP程序员那就太棒了, 因为deployer的部署脚本也是用PHP来写的。deployer的原理其实很简单,添加服务器配置,通过ssh方式以秘钥或者密码登录到远程服务器并执行脚本。服务器配置文件大概是这样:

prod:
host: domain.com
user: www
identity_file: ~
stage: production
deploy_path: /home/www/

prod.a:
host: a.domain.com
user: www
identity_file: ~
stage: production
deploy_path: /home/www/  

然后你可以像这样编写一个任务, 没错,就是PHP的语法,你也可以在task里调用你自己写好的函数或者去捕获一个异常(Exception):

task('update', function () {
    run("git pull && composer up");
});

你可以在命令行中通过deployer执行任何一个任务:

dep update production -vvv // production与配置文件的stage对应,表示在指定服务器上执行

另外, deployer 官方还提供了一些现成的 菜谱(Recipes), 说白了就是一些针对指定框架写好的tasks,以便直接使用。对 LaravelSymfony 等主流框架都是有支持的,如果在这些框架下,我们可以直接使用。不过就是没有,自己写一些任务也非常容易,因为其实deployer不过是通过PHP执行指定的shell命令。

直接输入 dep 将会列出当前所有可执行的任务,供使用者参考,祝玩的开心。

depolyer

Show Comments