一、準備
1. 筆者的git庫和web伺服器在同一臺機器上。
# cd /data/wwwroot/html //html目錄
# git clone /home/git/html . //首次需轉殖遠端庫
# chown -r www.www .
//修改web許可權為程式執行者
2. 由於hooks下的指令碼一般是由git執行,所以git需要擁有相關目錄的寫入許可權。
# usermod -a -g git www
//將git使用者加入到www組
# find /data/wwwroot/html
-type d -exec chmod 775 {} \;
//修改web根目錄及以下目錄許可權為775
二、hooks指令碼
# cat /home/git/html/hooks/post-receive
#!/bin/shunset git_dir
log_path=/tmp/gitupdate.log
deploypath=/data/wwwroot/html
cd $deploypath
git add . -a &&git stash
echo
"------------start pull -----------
" >>$log_path
echo
"time:
"`date
'+%y-%m-%d %t
'` >>$log_path
git pull origin master &>>$log_path
git stash pop
exit
0
三、驗證
1. 客戶端以git身份驗證上傳或修改檔案,首次上傳檔案以後發現並沒有同步,通過以上列印的日誌找到問題。
# cat /tmp/gitupdate.log
------------start pull -----------因為git賬戶更新檔案會在.git目錄下記錄和建立一些檔案,而我們git clone的時候使用的是root賬戶,修改許可權:time:2017-01-13 16:49:44
error: cannot open .git/fetch_head: permission denied
# chown -r git.git /data/wwwroot/html/.git
2. 定時更新許可權指令碼
由於:- **根目錄下會產生新的屬主為git的目錄和檔案,導致www不具備寫入許可權
- .git隱藏目錄下可能會生成新的檔案,導致git更新失敗
- 手動干預git後部分檔案許可權發生變化
這些情況都可能導致自動更新出現問題,為了解決這些許可權導致的失敗隱患,特將更新許可權寫為計畫任務,並根據情況決定多久執行一次,筆者定為1小時執行一次。
# crontab -l | grep chperm
0 */1 * * * /data/shell/chperm.sh# cat /data/shell/chperm.sh
#!/bin/bashchown -r www.www /data/wwwroot/html
find /data/wwwroot/html -type d -exec chmod
775{} \;
chown -r git.git /data/wwwroot/html/.git/
3. 改完後驗證正常。
# cat /tmp/gitupdate.log
------------start pull -----------time:2017-01-13 16:53:11
from /home/git/html
* branch master -> fetch_head
updating 0591be6..1cdb27b
fast-forward
tests/sunleitest1.txt | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 tests/sunleitest.txt
create mode 100644 tests/sunleitest1.txt
用 Git Hooks 進行自動部署
原文發表於 昨天開始接手開發公司前端團隊的主頁,在稍微修改點東西後推送到遠端倉庫想看下線上結果時發現並沒有更改!詢問一把手得知,居然還需要連線到伺服器執行一下git pull才行 對於我這種怕麻煩的人來說,簡直不能忍!經過一番查詢資料以及一頓折騰,終於讓它能夠自動跑起來了,真是高興得我手舞足蹈啊!雖...
用 Git Hooks 進行自動部署
原文發表於 昨天開始接手開發公司前端團隊的主頁,在稍微修改點東西後推送到遠端倉庫想看下線上結果時發現並沒有更改!詢問一把手得知,居然還需要連線到伺服器執行一下git pull才行 對於我這種怕麻煩的人來說,簡直不能忍!經過一番查詢資料以及一頓折騰,終於讓它能夠自動跑起來了,真是高興得我手舞足蹈啊!雖...
git hooks觸發構建任務
公司原因目前使用的是原始的git倉庫,並沒有用gitlab等。所以hoos要自己做 配置很簡單的,但這只是個開始,利用這個可以做很多東西,比如說 檢查等等。伺服器倉庫目錄下建立 post receive bin bash 接收後掛鉤從stdin中以形式獲取引數。由於這些引數來自標準輸入,而不是命令列...