通常我們使用git時本地開發,上傳到遠程倉庫中,服務器在拉取遠程倉庫的代碼,這樣就需要開發人員要經常登錄到服務器中手動拉取代碼,是比較繁瑣的。
今天分享一個git自動拉取線上代碼的shell腳本。
腳本里面涉及了郵件的發送,日誌的記錄,正則表達式等知識點,git的操作
首先了解一下git基本流程:
本地開發:git add . // 添加 git commit -a -m'註釋' //提交 git push origin develop // 推送到遠程倉庫中
服務器:此時在服務器上拉取代碼
1、進入到項目目錄git diff 查看是否有修改的文件,如果有則進行提交,如果沒有進行第二步
2、如果第一步沒有輸出的結果,則可以直接 git pull origin develop 拉取遠程倉庫代碼
上述過程需要每一次提交代碼都需要進行的過程,相對來說是比較繁瑣的
下面的這個shell可以很方便的將服務器的流程自己去執行
#!/bin/sh
export LANG=en_us.UTF-8
export LC_ALL=zh_CN.UTF-8
cd 項目路徑 #進入到項目的根目錄中
gitDiffInfo=`git diff` # 使用git diff 查看是否有修改 如果服務器上的代碼沒有修改的輸出的內容爲空,如果有修改將會把修改的路徑和修改的文件以及內容輸出
egreps="Already up-to-date.$" # 正則表達式 匹配拉取遠程代碼是否有跟新,如果結尾爲這一串字符則表示遠程倉庫沒有更新
gitDate=`date "+%Y-%m-%d %H-%M-%S"` # 獲取當前的時間
# 判斷git diff 是否爲空 如果不爲空格則將檢查後臺服務器代碼的修改發送到你指定的郵箱中
if [ -n "$gitDiffInfo" ];then
# 郵件的發送和配置稍後講解
mail -s '檢查後臺服務器代碼的修改' 需要發送的郵件地址 <<< "$gitDiffInfo"
else
# 如果輸出爲空,則執行git pull origin develop 命令
gitPullInfo=`git pull origin develop`
# 判斷代碼是否有更新,通過正則匹配進行判斷
if [[ "$gitPullInfo" =~ $egreps ]];then
# 以下三行代碼是進行日誌的寫入
echo "$gitDate" >> 你自己的日誌地址
echo "無代碼更新" >> 你自己的日誌地址
echo -e "\n" >> 你自己的日誌地址
else
# 以下三行代碼時進行日誌的寫入 將pull的結果寫入到日誌中
echo "$gitDate" >> 你自己的日誌地址
echo "$gitPullInfo" >> 你自己的日誌地址
echo -e "\n" >> 你自己的日誌地址 # echo -e "\n" 輸出三行回車
fi
fi
上述的shell腳本寫好 添加可執行的權限 chmod -R 755 腳本名稱
可以通過 ./腳本名稱 進行執行測試 查看是否有問題
沒有問題則可以直接添加到定時任務中了
添加定時任務 crontab -e 編輯定時任務
*/1 * * * * 腳本的路徑 # 每一分鐘執行一次
可以使用 crontab -l 查看是否將定時任務添加到了定時任務的列表中
上述代碼涉及到了郵件發送,這裏簡單的敘述一下:
需要配置 /etc/mail.rc 文件
# 設置配置文件的路徑
set nss-config-dir=/etc/pki/nssdb
# 忽略證書的驗證
set ssl-verify=ignore
// 配置smtp服務器
set smtp=smtps://smtp.163.com:465
# 配置登錄方式
set smtp-auth=login
# 配置登錄的用戶名 你自己的郵箱地址
set [email protected]
# 相對應的郵箱的授權碼
set smtp-auth-password=aaaa
# 發送人的郵箱
set [email protected]
配置好後保存退出
沒有附件的郵件發送
mail -s '測試標題' 收件人地址 <<< "郵件內容"
帶有附件的郵件發送
echo "郵件內容" |mail -s '郵件標題' -a 附件的絕對路徑 收件人地址
以上郵件發送命令可以直接在shell腳本中使用,也可以直接在命令中使用
這只是我自己想出的自動拉取的辦法,如果有大神指導更加簡便的方案,可以回覆告訴小弟(✪ω✪),如果有運維大神看到這裏可以聯繫我加我微信,向您學一點運維的知識ヾ(*´ー`*)ノ゛謝謝♪