部署,在我看來是讓代碼在真實的服務器上跑起來,可以對外提供指望的服務和功能。
例如簡單的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: /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