Git 伺服器 利用 hook 實現自動部署

jerrkill發表於2018-12-10

原理

  1. 客戶端 push 之後會觸發 git hook 執行 hook下面的 post-receive
  2. 通過 post-receive 執行shell指令碼將在 web 目錄下拉取專案

    實現

    s 表示 git 伺服器端,c 表示 git 客戶端

    搭建 git 伺服器

    新增 git 賬號

    $ groupadd git;
    $ useradd -d /home/git -m git

    建立證照 配置 git 賬戶 ssh

    ssh 配置檔案在 /etc/ssh/sshd_config裡面,修改裡面內容

    RSAAuthentication yes   
    PubkeyAuthentication yes   
    AuthorizedKeysFile .ssh/authorized_keys

    建立 git 的 .ssh
    將允許進行登入的公鑰放在 authorized_keys 裡面一個一行
    如果失敗,嘗試執行ssh-keygen重新生成 RSA

    cd /home/git/
    mkdir .ssh
    chmod 755 .ssh
    touch .ssh/authorized_keys
    chmod 644 .ssh/authorized_keys

    初始化 Git 倉庫

    cd /home/git
    git init --bare uucheers.git
    chown -R git:git uucheers.git
    #克隆
    git clone git@ip:uucheers.git
    git clone git@ip:/home/git/uucheers.git
    #在專案目錄裡面 git clone 過去 
    git clone /home/git/uucheers.git
    #同時 更改許可權 不然 git 使用者沒法寫入

hook

在專案目錄下

cd /home/git/uucheers/hooks
vim post-receive

輸入如下內容

#!/bin/sh
#
#判斷是不是遠端倉庫
IS_BARE=$(git rev-parse --is-bare-repository)
if [ -z "$IS_BARE" ]; then
echo >&2 "fatal: post-receive: IS_NOT_BARE $IS_BARE"
exit 1
fi

unset GIT_DIR
DeployPath="/usr/local/src/uucheers-docker/app/uucheers"
echo "==============================================="
cd $DeployPath
echo "deploying the project"
#git stash
#git pull origin master
git fetch --all
git reset --hard origin/master
time=`date`
echo "web server pull at webserver at time: $time."
echo "================================================"

chmod +x post-receive 新增執行許可權

本作品採用《CC 協議》,轉載必須註明作者和本文連結

高度自律,深度思考,以勤補拙

相關文章