如何使用 Git Hook 自動部署服務(wù)器?

一行命令,自動將本地文件部署到遠程服務(wù)器上。

最近搭了個個人網(wǎng)站,在放到服務(wù)器上時,考慮到,如果每次更新的內(nèi)容,都要用 FTP 或者別的文件傳輸方式,將文件一個個的放到服務(wù)器上,簡直是太麻煩了,有沒有什么辦法更好,更快的完成部署呢?

使用 Git Hooks(Git 鉤子),可以做到這點。Git Hooks 是什么?「Git 能在特定的重要動作發(fā)生時觸發(fā)自定義腳本」,比如說pre-commit, post-receive等等,在這些動作之前或者之后,會運行定義好的腳本。要做到自動部署,就是要用到這個 post-receive

在設(shè)置自動部署前,先要設(shè)置無密碼登錄遠程服務(wù)器,具體操作可以參考這篇文章。[ SSH Key 無密碼登錄服務(wù)器 ]

自動部署

整個流程大概是:在服務(wù)器端創(chuàng)建一個 Git 倉庫(repository),然后將本地的文件使用 git push 上傳到這個倉庫后,將上傳到Git 倉庫的文件,自動復(fù)制到服務(wù)器里網(wǎng)頁運行的文件夾下。

  1. 在服務(wù)器端,創(chuàng)建一個 Git 倉庫,
git init --bare website.git
  1. 創(chuàng)建 post-receive文件
cd website.git
vim hooks/post-receive

將以下內(nèi)容復(fù)制到post-receive文件里

#!/bin/bash -l
GIT_REPO=/home/git/website.git
TMP_GIT_CLONE=/tmp/website
PUBLIC_WWW=/var/www/zhuangweiming.me/html
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
cd $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

代碼解釋:
rm -rf ${TMP_GIT_CLONE}清空臨時路徑里面的內(nèi)容
git clone $GIT_REPO $TMP_GIT_CLONE將 Git 倉庫的內(nèi)容克隆到臨時路徑
rm -rf ${PUBLIC_WWW}/*清空服務(wù)器網(wǎng)頁存放文件夾
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}將臨時路徑里的文件復(fù)制到服務(wù)器網(wǎng)頁存放路徑

  1. post-receive 文件授權(quán)
chmod +x hooks/post-receive
  1. 本地添加 Git 遠程倉庫,測試
git remote add deploy ssh://git@128.199.169.239/home/git/website.git
git push deploy

自動部署指定的 Git branch

如果是要部署特定的 branch,在上述第二部中,將 post-receive 的文件內(nèi)容替換為:

#!/bin/bash -l
while read oldrev newrev ref
do
  branch=`echo $ref | cut -d/ -f3`
  if [ "master" == "$branch" ] || [ "production" == "$branch" ]; then
    GIT_REPO=/home/git/website.git
    TMP_GIT_CLONE=/tmp/website
    PUBLIC_WWW=/var/www/zhuangweiming.me/html
    rm -rf ${TMP_GIT_CLONE}
    git clone $GIT_REPO $TMP_GIT_CLONE
    cd $TMP_GIT_CLONE
    unset GIT_DIR
    git checkout $branch
    rm -rf ${PUBLIC_WWW}/*
    cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
  fi
done
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容