GIT服務器實現web代碼自動部署


之前在一台vps服務器上面搭建了Git服務器,用來做代碼管理,方便團隊開發。但是問題也就相應的來了,使用git可以輕松的上傳代碼,而由於做的是web開發,每次還都得到服務器上把代碼手動pull或者復制到網頁所在的文件夾下,也就比較麻煩,不適合我這種懶人。git提供了hook機制,可以很容易的實現代碼的自動部署。

個人原創,版權所有,轉載請注明原文出處:

http://www.embbnux.com/2014/09/05/git_server_let_code_auto_deploy/

一 git機制簡要介紹

git使用的是代碼倉庫,git服務端有倉庫,稱為遠端倉庫,我們clone下來的,本地也有一個倉庫稱為本地倉庫。我們commit的時候是把代碼提交到了本地倉庫,push時,是把代碼提交到了遠端倉庫。pull的時候是把代碼從遠端倉庫下載到本地倉庫。

代碼倉庫對代碼的存儲使用了版本指針,每個提交的版本都對應一個HEAD指針,當前版本指針隨着代碼的提交而一直改變。

二 自動部署原理

說說現在代碼的分布情況,開發者電腦上的本地倉庫,git服務器上的遠端倉庫,web服務器上的另一個本地倉庫,我們瀏覽器訪問的就是這里的代碼。

要實現自動部署,就是要當開發者從本地倉庫提交代碼到遠端倉庫的時候,自動把代碼部署到web服務器的本地倉庫,實現開發者本地倉庫和web服務器的本地倉庫的同步。

三 實現自動部署

按照上面說的,就是要在開發者提交的時候,自動觸發腳本,腳本去實現web端代碼的部署.

這里就得講一下git的hook機制,當git服務器接到各種事件時觸發,這里使用的hook是

post-receive

這個hook在git服務器受到push請求,並且接受完代碼提交時觸發。

具體代碼體現:

在git遠端倉庫的hooks目錄下新建post-receive文件:

#!/bin/sh  
   
#author: embbnux  
#Blog of Embbnux: http://www.embbnux.com  
   
#判斷是不是遠端倉庫  
IS_BARE=$(git rev-parse --is-bare-repository)  
if [ -z "$IS_BARE" ]; then  
echo >&2 "fatal: post-receive: IS_NOT_BARE"  
exit 1  
fi  
   
unset GIT_DIR  
DeployPath="/var/web"  
   
echo "==============================================="  
cd $DeployPath  
echo "deploying the test web"  
   
#git stash  
#git pull origin master  
git fetch --all  
git reset --hard origin/master  
   
time=`date`  
echo "web server pull at webserver at time: $time."  
echo "================================================"

保存后賦予可執行權限:

1

chmod +x hooks/post-receive

這樣在開發者提交代碼的時候,就會自動部署。

在這里補充說明下: 因為我建立git倉庫時用的是git用戶 但是在自動部署時站點服務器采用的是nginx服務器的  git用戶屬於git組 nginx屬於nginx組  所以在這里就是把post-receive設置成nginx組 如果不設置的話在站點目錄下是沒有辦法更新文件的(會提示沒有權限操作)

自動部署的時候,我這里使用的是git fetch,也可以使用git pull實現,這里兩個的區別主要是pull事先fetch后然后再用merge,來合並本地和遠端的代碼。但是有個問題,如果開發者在提交過程出現失誤,使用git reset復位后,現在遠端的代碼版本低於web端的代碼版本,再使用pull的時候就不能實現和開發者本地的代碼的同步。所以這里使用fetch后,在強制使用reset實現web端的代碼版本指針和git服務端的一致。由於沒有使用merge,所以以后web端的代碼就不能在服務器上直接更改了,對web端代碼的各種改變都應該使用開發者電腦進行代碼提交,不然會報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM