CentOS 7 搭建 Git 實現代碼自動同步/自動部署

基本步驟

  1. 安裝 GIT
  2. 建立系統 GIT 的組和用戶
  3. 建立 GIT 倉庫與設置同步
  4. clone 服務器倉庫至服務器目錄
  5. 克隆服務器的 GIT 倉庫到本地
  6. 同步本地代碼自服務器

環境及說明

  1. CentOS 7 64x

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

安裝完成後,可經過 git --version 驗證 git 安裝是否成功php

git --version
git version 1.8.3.1

2、建立系統 GIT 的組和用戶

爲 Git 建立單獨的系統用戶組和用戶,提升系統的安全性。git

2.1 建立系統 Git 用戶組

# user-gourp 替換爲您想建立的用戶組,通常 git 便可
groupadd user-group

2.2 建立系統 Git 組下的 Git 連接用戶

# username 替換爲您的 Git 用戶名
# user-gourp 替換爲您建立 Git 用戶組
adduser username -g user-gourp

2.3 給 Git 用戶設置密碼

# username 替換爲您的 Git 用戶名
passwd username 
Changing password for user username.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

若是是正式服務器,爲避免被攻擊,密碼強度請設置的強一點web

3、建立 GIT 倉庫與設置同步

3.1 建立 GIT 倉庫

倉庫能夠建立在任意位置,若是系統盤緊張,能夠建立在掛接盤或其餘目錄apache

本文以建立在 home 目錄下爲例安全

# 切換至 home 目錄
cd /home
# 建立 git_repository 目錄
mkdir git_repository
# 切換至 git_repository 目錄
cd git_repository
# 建立一個裸的 git 倉庫 --bare 是表明建立裸倉庫,這個參數必定記得帶上
git init --bare demo.git
# 把 demo.git 目錄賦權給您建立的 Git 用戶
# username 替換爲您建立 Git 用戶名
# user-gourp 替換爲您建立 Git 用戶組
chown -R username:user-group demo.git
# 文件只有文件全部者或同在一個用戶組下的用戶可讀,可寫,可執行,其餘用戶只有讀權限
chmod 774 -R demo.git

3.2 設置 GIT 目錄同步

原理是建立收到提交請求時執行的腳本,這樣當你在本地倉庫執行git push後就會觸發 post-receive 這個腳本。bash

3.2.1 建立 post-receive 腳本文件

# your-git-repository-path 替換爲您 git_repository 路徑
cd /your-git-repository-path/demo.git

# 切換目錄至 hooks
cd hooks

# 建立 post-receive
vi post-receive

3.2.2 修改 post-receive 腳本文件

#!/bin/sh
unset GIT_DIR
# 您項目的工做目錄
ProjectPath="/var/www/demo"

# 定義日誌目錄
LogPath="/your-git-repository-path/project.git/hooks"  

# 輸出日期到日誌
echo -e "\n=================  `date +"%Y-%m-%d %H:%M:%S"`  ===============\n" >> $LogPath/auto-sync.log 2>&1

# 自動同步方法

# 1. 直接拉取併合並
git pull origin master  >> $LogPath/auto-sync.log 2>&1 

# 2. 拉取最新版本至本地,不自動合併
# git fetch --all
# git reset --hard origin/master

echo "====================================================== "  >> $LogPath/auto-sync.log 2>&1

這裏有2個問題未解決服務器

  1. 定義日誌目錄,若是定義 hooks 外層,則沒法寫入。賦權整了一整也沒弄出來ssh

  2. 根據 服務器自動部署項目之GitHooks神器 所說,用 git fetch 而非 git pull 實現。 區別在於:curl

    1. git fetch:至關因而從遠程獲取最新版本到本地,不會自動merge。
    2. git pull:至關因而從遠程獲取最新版本並merge到本地。
    3. pull實現至關於fetch後再用merge,來合併本地和遠端的代碼。

    這裏就有個問題,若是開發者在提交過程出現失誤,使用git reset復位後,如今遠端的代碼版本低於web端的代碼版本,再使用pull的時候就不能實現和開發者本地的代碼的同步。因此這裏使用fetch後,在強制使用reset實現web端的代碼版本指針和git服務端的一致。(若是在本機可使用stash,而後pull,而後drop剛纔stash的內容)工具

    他這段話意思是明白了,可是沒明白具體操做,望高手指點。

3.2.3 post-receive 腳本文件賦權

# username 替換爲您建立 Git 用戶名
# user-gourp 替換爲您建立 Git 用戶組
chown username:user-group post-receive
chmod -R 774 post-receive

4、clone 服務器倉庫至服務器目錄

本文自動代碼同步的語言爲 php,其餘語言類同,請本身切換服務器目錄

# 切換至 apache 項目目錄
cd /var/www

# your-git-repository-path 替換爲您 git_repository 路徑
# project-name 切換爲clone 後您須要的項目名稱
git clone /your-git-repository-path/demo.git project-name

# 賦權
# username 替換爲您建立 Git 用戶名
# user-gourp 替換爲您建立 Git 用戶組
# project-name 替換爲clone 後的項目名稱
# 賦權775 其餘用戶可讀可執行,不然項目可能啓動不了
chown -R username:user-group project-name
chmod -R 775 project-name

5、克隆服務器的 GIT 倉庫到本地

各操做系統工具不一致,能夠用工具,命令行同步到本地.

連接地址:

# username 替換爲您建立 Git 用戶名
# your-git-repository-path 替換爲您 git_repository 路徑
# server 能夠是 IP,也能夠是域名
# port 當您修改了端口時須要,未設置爲空便可
ssh://username@server:port/your-git-repository-paht/demo.git

示例:

ssh://test@192.168.0.111/home/git_respository/demo.git

6、同步本地代碼自服務器

可用工具,也可命令提交代碼自服務器,這裏就很少說了

錯誤日誌可查看 auto-sync.log

# your-git-repository-path 替換爲您 git_repository 路徑
cat /your-git-repository-paht/demo.git/hooks/auto-sync.log

廣告欄: 歡迎關注個人 我的博客

相關文章
相關標籤/搜索