部署,在我看来是让代码在真实的服务器上跑起来,可以对外提供指望的服务和功能。
例如简单的web项目:单台服务器, 数据库和web服务器都在一台机器上。
只须要将代码copy到服务器上,保证代码里的数据库配置和服务器上的web配置正确。
再打开浏览器,访问该应用, 可以正常访问和使用,部署就结束了。php
部署到这里真的结束了吗?
代码升级,从新copy代码,忘记修改配置文件,致使服务没法访问怎么办?
访问量增长,项目须要部署到N台机器,难道还手工copy?
开发流程完善,须要有本地环境,测试环境,QA测试环境,线上环境等多个不一样环境配置,
每一个都要人工修改配置不累死?
代码出了问题,怎么回滚?html
支持 pear
, composer
, phar
安装。能够根据开发机已经部署哪一种包管理程序来选择。参考官网安装说明
若是是经过composer, 安装到当前项目下,那么执行./vendor/phing/phing/bin/phing -h
,便会出现帮助列表。web
输出 HelloWorld:数据库
phing
经过 xml 文件配置执行任务, 建立deploy.xml
文件,内容以下:浏览器
<?xml version="1.0" encoding="UTF-8"?> <project name="HelloWorld" default="dist"> <target name="dist"> <echo msg="Hello World!" /> </target> </project>
定义了一个 project
,默认执行dist
任务, dist
任务经过target
标签订义,
而echo
标签只是简单的输出msg
属性中的值
执行./vendor/phing/phing/bin/phing -f ./deploy.xml
, 即可看到以下输出:bash
Buildfile: /Users/hubiao/project/phing/./deploy.xml HelloWorld > dist: [echo] Hello World! BUILD FINISHED Total time: 0.0666 seconds
将HelloWorld放入配置文件服务器
将常见变量放入单独的配置文件,便于维护。建立 deploy.properties
文件,定义一个变量:string
,文件内容只有一行: string=Echo HelloWorld By Config File
。
修改deploy.xml
,添加<property>
标签,即可读取外部配置文件做为变量:app
<?xml version="1.0" encoding="UTF-8"?> <project name="HelloWorld" default="dist"> <property file="deploy.properties"/> <target name="dist"> <echo msg="${string}" /> </target> </project>
那么,针对不一样环境读取不一样配置文件,只须要将不一样环境使用的配置文件名做为变量输入便可:composer
<input message="please input env:" propertyName="env" > </input> <property file="${env}.properties"/>
注:input
标签,会在执行 phing 命令后,等待继续输入, 输入内容做为变量 env
值ssh
更多的入门说明参考:phing Getting Start
phing
支持 ftp
和scp
上传文件
scp
, 须要php安装ssh2.so
扩展例如: scp 一个目录
<scp username="vagrant" password="vagrant" host="192.168.33.21" todir="/www"> <fileset dir="./src"> <include name="**/**" /> </fileset> </scp>
scp
:本地压缩<tar compression="gzip" destfile="package.tgz" basedir="./src"/> <scp username="${ssh.username}" password="${ssh.password}" host="${ssh.host}" todir="${releases_dir}/${build.time}" file="./package.tgz" /> <ssh username="${ssh.username}" password="${ssh.password}" host="${ssh.host}" display="true" command="tar -C ${releases_dir}/${build.time} -zxf ${releases_dir}/package.tgz" />
先使用 tar压缩文件,再执行scp
, 最后经过ssh
在远程服务器上解压文件。
注: 一次ssh
只能执行一次命令。 批量执行须要经过其余方式,例如 bash script
不一样环境使用不一样的配置文件,可使用<input>
读取环境变量(前文已经说明)或者-D
参数指定变量,./vendor/phing/phing/bin/phing -D env=dev -f phing.xml
每次部署代码时,建立个新目录,保证目录名不重复,能够是时间戳或版本号。
web根目录经过软连接指向最新目录, 例如: /var/www -> /deploy_dir/1423432343
上次提交的目录/var/back -> /deploy_dir/1423400000
。
回滚时, 只需复制重命名连接: cp -P /var/back /var/www
即可。
完整的target
实现:
<target name="quick_rollback"> <echo message="unlink ${deploy_dir}"/> <ssh username="${ssh.username}" password="${ssh.password}" host="${ssh.host}" display="true" command="unlink ${deploy_dir}" /> <echo message="roll back"/> <ssh username="${ssh.username}" password="${ssh.password}" host="${ssh.host}" display="true" command="cp -P ${back_link} ${deploy_dir}" /> </target>
其中 $deploy_dir
和$back_link
分别是 /var/www
/var/back
,能够写入单独配置文件
简单易用,可是不能支持连续回滚
phing 官方示例文档
Building and deploying PHP applications with Phing -by phing lead
Deploy and Release your Applications with Phing