【轉】搭建git服務器及利用git hook自動佈署代碼

轉自 http://xydudu.calepin.co/git-server-and-hook.htmlhtml

我喜歡 github,我如今的我的代碼所有是託管在上面了,可是一些公司或者某些項目不適合放入github中,你但願能有一個徹底私有的倉庫,若是你有一臺服務器,這顯然是很容易辦到的事。git

下面簡單的描述我在某個項目中佈署的一個git服務,而且本地提交更新後,服務器將自動更新代碼到在線代碼的倉庫。github

建立用戶並使客戶機可經過密鑰登陸服務器

服務器中操做

root 用戶ssh登陸服務器,建立一個新用戶用來給git登陸及其操做,好比這裏我建立一個名爲「git」的用戶:shell

$ sudo add user git

進入到 /home/git 文件夾中,查看是否有 .ssh/ 目錄, 如沒有:vim

$ mkdir .ssh

進入 /home/git/.ssh 文件夾中,建立文件 authorized_keys服務器

等待ssh

客戶機中操做

進入 ~/.ssh/ 目錄,查看是否有 id_rsa.pub 文件,如沒有:post

$ ssh-keygen

一路回車,完成後,即可發現 ~/.ssh/ 目錄中有 id_rsa.pub, 複製其內容,粘貼到上面操做服務器的 authorized_keys 文件中測試

測試是否密鑰登陸成功google

$ ssh git@yourserverip

建立git服務器遠程倉庫

進入 /opt/git 目錄, 如沒有,建立之
創建倉庫文件夾,好比:

path:/opt/git $ mkdir gitdemo

將gitdemo用戶組設置爲當前用戶git
初始化爲遠程倉庫

$ git init --bare
上面的步驟已經完成了git遠程倉庫的建立,此時你只要將你本地的git代碼倉庫 git remote add git@yourserverip:/opt/git/gitdemo,即可提交與更新代碼了。

好比我機器上的開發目錄爲:~/www/gitdemodev, 進行下面操做:

$ cd ~/www/gitdemodev 
$ git init  #建一個文件,寫點東西進去 
$ touch README | echo 'hello git' > READEME
$ git add README 
$ git remote add origin git@yourserverip:/opt/git/gitdemo 
$ git commit -m 'first commit' 
$ git push origin master

如今你已經本地的代碼成功的提交到了遠程倉庫中,只需在你團隊成員電腦上做相同操做,即可利用git協同開發了,注意把各自電腦的 id_rsa.pub 內容複製進服務器的 authorized_keys 文件中。

git hook 自動佈署代碼

假設你的項目也是跑在此臺服務器上,那自動佈署代碼就很簡單了,好比你的在線服務代碼在 /var/www/demo 文件夾中。

/var/www/demo也要有寫權限

你先初始化代碼庫:

$ git clone /opt/git/gitdemo /var/www/demo

而後你能夠經過 git pull 來更新代碼。

固然這樣是手動了,我想要的是本地提交更新後,服務器能自動的 git pull代碼到最新,因而咱們就要藉助 git hook了。

進入到 /opt/git/gitdemo 文件夾中,會發現 .git/hook 文件夾在裏面,進入到 hook 中,裏面有不少的 sample 腳本,這裏咱們只須要用到 post-update。

$ mv post-update.sample post-update $ vim post-update

能夠看到裏面其實就是一些shell腳本,你要作的就是把 git pull寫進去。當用戶提交後,便會調用post-update腳本的。

好比我在服務器的代碼庫更新後,要求對應的服務代碼也要更新(進行pull操做),
則在bare倉庫的hooks中的post-receive添加以下內容便可

#!/bin/sh 
unset $(git rev-parse --local-env-vars)
cd WEB_DIR
git pull

這些腳本顯然是能夠作不少事的,只要你想獲得,要了解各腳本什麼時候調用,google吧。

注:服務器中與git用戶有關的文件夾及文件,請:

$ chown -Rh git:git /your/git/dirs
相關文章
相關標籤/搜索