在centos上搭建git伺服器並自動同步程式碼

weixin_34007886發表於2017-09-12

參考文章

CentOS安裝Git實現多人同步開發
centos中GIT伺服器搭建及使用金鑰連線

簡述

1、伺服器上安裝Git依賴及Git

2、建立Git使用者及所屬組

3、伺服器上初始化Git倉庫

4、安裝Git客戶端並生成公鑰

5、建立證照登入

6、使用Git Bash克隆伺服器上的空倉庫

7、將本地庫專案推送到伺服器

1、伺服器上安裝Git以及依賴

1.1安裝Git依賴

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel

1.2.安裝Git

yum install -y git

2、建立”使用者組“和”使用者“,用來執行git服務

2.1建立使用者組

groupadd git

2.2新增git使用者組下的使用者

adduser phper -g git

2.3為使用者名稱為phper 的使用者設定密碼

   passwd phper
   Changing password for user git.
   New password: 
   Retype new password: 
   passwd: all authentication tokens updated successfully.

3、建立git倉庫

mkdir gitroot
chmown phper:git gitroot
cd /gitroot
git init --bare project.git
chmown -R phper:git project.git
chmod 774 -R project.git
cd ../
chmod 750 gitroot

4、安裝Git客戶端並生成公鑰

4.1下載git客戶端安裝好後右鍵選擇Git GUI Here->Help->Show SSH Key

2825702-ea743566c535f410.png
image.png
2825702-c986b737b248ce58.png
image.png

就能得到私鑰和公鑰

2825702-51571a05a14ed9fa.png
image.png

開啟Puttygen
2825702-cd32cbd3d2636db4.png
image.png
2825702-aaad36bec19616de.png
image.png

load之前生成好的私鑰
2825702-6b8cf0b71f7c162d.png
image.png

得到格式化後的私鑰,點選儲存私鑰
2825702-ddfd1f3a8deb3d30.png
image.png

配置小烏龜
2825702-75ce7d3eca4571dd.png
image.png

4.2建立證照登入
切換到phper目錄

cd /home/phper
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

然後將客戶端的公鑰上傳到.ssh目錄

cd .ssh
rz

將公鑰新增進authorized_keys中

cat id_rsa.pub >> authorized_keys

5、克隆到本地

右鍵選擇git克隆
2825702-d0463ba29f6500f3.png
image.png

這樣就把伺服器的空倉庫拉取下來了。
2825702-b0ead2e7e4fca842.png
image.png

現在我們能夠正常的提交程式碼到伺服器的git,但是還不能自動同步,我們還需要修改伺服器的hooks/post-receive檔案。具體post-receive內容

#!/bin/sh
unset GIT_DIR  
DeployPath="/alidata/www/project"
LogPath="/alidata/gitroot/project.git/hooks"  
   
echo -e "\n=================  `date +"%Y-%m-%d %H:%M:%S"`  ===============\n" >> $LogPath/gitsync.log 2>&1 
cd $DeployPath  
   
#git stash  
#先拉取再合併
git pull origin master  >> $LogPath/gitsync.log 2>&1 

#強制與遠端伺服器同步,不與本地合併,只能通過提交的客戶端提交的方式修改程式碼。
#git fetch --all  
#git reset --hard origin/master  
   
#time=`date`  
#echo "web server pull at webserver at time: $time."  
echo "================================================"  >> $LogPath/gitsync.log 2>&1 

更改post-receive的所有者和許可權

chmod -R 774 post-receive
chown phper:git post-receive

建立gitsync.log日誌檔案

touch gitsync.log
chmod  770 gitsync.log
chown phper:git gitsync.log

最後在www下

cd /alidata/www
git clone /gitroot/project.git
chown -R phper:git project
chmod -R 774 project

好了git的同步就弄好了

如果hooks同步不起作用,開啟hooks/gitsync.log檢視錯誤日誌

可能預見的錯誤

1、fatal: /usr/libexec/git-core/git-pull cannot be used without a working tree.
同步的專案資料夾沒有建立---------------解決辦法:在www下建立project專案資料夾

2、fatal: Not a git repository (or any of the parent directories): .git
專案檔案裡沒有git初始化------------------解決辦法:在www路徑下執行git clone /alidata/gitroot/project.git

3、error: cannot open .git/FETCH_HEAD: Permission denied
git在專案目錄沒有寫入許可權---------------解決辦法:修改所有者以及許可權 chown -R phper:git project / chmod -R 774 project

4、每次pull push的時候還是要輸入密碼

2825702-7306f3c7ae8f104b.png
image.png

祕鑰沒有起作用-----------------------------解決辦法:/var/log/secure檢視一下日誌,是否是.ssh的許可權問題
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

相關文章