本地開發(fā)完成后,通常會在服務(wù)器上部署,有人會使用ftp枷莉,有人會使用scp, ftp和scp的時候為了方便我們通過還要tar或者zip一下尺迂, 這些做法也很不錯笤妙,但是它有一些問題
1.全部更新,不管某些文件是否修改噪裕,都要重新傳一下服務(wù)器蹲盘,浪費時間與流量2.多臺服務(wù)器的重復(fù)上傳3.代碼更新后,后續(xù)的一些操作不夠自動化
上面的問題可以通過ssh直接遠(yuǎn)程執(zhí)行命令來解決膳音,但是需要寫一些shell腳本召衔, 有沒有更簡單更高效的方法呢?有祭陷,那就是使用版本版本管理工具的hook!
這里我說是版本管理工具而不是git苍凛,是因為svn、git兵志、hg都是有相應(yīng)的hook的醇蝴, 原理大同小異。下面是Git詳細(xì)的思路想罕。
服務(wù)器端操作
首先創(chuàng)建一個裸庫悠栓,為什么是裸庫?因為這個庫不是真正用來修改的按价,我們也不允許在服務(wù)器上修改代碼惭适,我們只是把它當(dāng)作一個代碼中轉(zhuǎn)的地方:
復(fù)制代碼代碼如下:
cd gitroot
mkdir projectname
cd projectname
git init --bare
添加我們的hook
復(fù)制代碼代碼如下:
cd /hooks
touch post-receive #注意權(quán)限一定要可執(zhí)行 chmod u+x xxx
編輯post-receive的內(nèi)容為下面的,其中sites/projectname俘枫,是我們存放網(wǎng)站代碼地方復(fù)制代碼代碼如下:
env -i git archive master | tar -x -C /sites/projectname
echo "遠(yuǎn)程更新完畢"
本地git的操作
本地我們只需要添加一個遠(yuǎn)程庫腥沽,在需要部署的時候push到遠(yuǎn)程庫就行了,下面我們添加了一個名為publish的遠(yuǎn)程庫
復(fù)制代碼代碼如下:
git remote add publish username@xx.xx.xx.xx:/home/gitroot/projectnamegit
push publish master
可以強(qiáng)化的地方
這里演示的是一個簡單的小網(wǎng)站的部署過程,復(fù)雜的情況下我們還可以添加靜態(tài)資源版本更新鸠蚪,服務(wù)器重啟等等今阳,舉一反三师溅, 最大程序自動化我們的工作。