搭建Git服務器、編寫自動部署腳本

搭建Git服務器、編寫自動部署腳本

v2-aad2e9743c39a1299965ed81de0cda26_1200x500.jpg

今天試了下在linux服務器上搭建Git服務器,而且編寫一個簡單的自動部署腳本。html

主要參考 廖雪峯-GIT教程-搭建Git服務器linux

如今開始吧!git

建立一個git用戶,用來運行git服務web

adduser git

建立證書登陸shell

收集全部須要登陸的用戶的公鑰,就是他們本身的id_rsa.pub文件,把全部公鑰導入到/home/git/.ssh/authorized_keys文件裏,一行一個。bash

初始化Git倉庫服務器

先選定一個目錄做爲Git倉庫,假定是/home/git/sample.git,在/home/git目錄下輸入命令:ssh

git init --bare sample.git

Git就會建立一個裸倉庫,裸倉庫沒有工做區,由於服務器上的Git倉庫純粹是爲了共享,因此不讓用戶直接登陸到服務器上去改工做區,而且服務器上的Git倉庫一般都以.git結尾。而後,把owner改成gitpost

chown -R git:git sample.git

禁用git用戶shell登陸spa

經過編輯/etc/passwd文件完成,找到你的git用戶的一行,例如:

git:x:1001:1001:,,,:/home/git:/bin/bash

/bin/bash改成/usr/bin/git-shell,例如:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

這樣,git用戶能夠正常經過ssh使用git,但沒法登陸shell,由於咱們爲git用戶指定的git-shell每次一登陸就自動退出。

克隆遠程倉庫

git clone git@server:sample.git

server是你的服務器域名或ip地址

若是git倉庫和web目錄在同一臺服務器主機上:

git clone /home/git/sample.git

若是不是在git用戶的家目錄中建立的,好比/srv/gits/sample.git:

git clone git@server:/srv/gits/sample.git

若是clone成功,那麼你的git服務器就搭建成功了。

接下來:

自動同步鉤子腳本

由於我是web目錄和git是同一臺服務器

編輯 /home/git/sample.git/hooks/post-receive, post-receive就是在git服務器收到代碼推送後(push完成以後)執行的腳本。

#!/bin/sh

while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    if [ "master" == "$branch" ]; then
        # Do something
        echo "post-receive in branch master" >> /tmp/git-sample.log
        unset GIT_DIR
        wwwPath=/var/www/html/sample
        cd $wwwPath && /usr/bin/git pull origin master
        exit 0
    fi
done

從腳本內容能夠看出,咱們在判斷當前push的分支是master時執行git pull origin master操做。

給執行權限:

chown -R git:git /home/git/sample.git/hooks/post-receive
chmod +x /home/git/sample.git/hooks/post-receive

由於是git倉庫和web目錄在同一臺服務器主機上,這裏clone使用的是:

git clone /home/git/sample.git

由於同步腳本的執行用戶是git,因此要保證項目目錄要賦予git寫權限。容易出問題的也是權限問題。

好了,試試吧~

原文鏈接:

搭建Git服務器-編寫自動部署腳本

更多分享知識點,請掃碼關注:

v2-7c4116af1e6bc01519bf6eec37a7e855_hd.jpg

相關文章
相關標籤/搜索