emmmm,這其實是一個很簡單的一件事情,但是有很多坑,記錄一下
先大概講一下原理吧,就是每次您 push 代碼后,都會給遠程 HTTP URL 發送一個 POST 請求 更多說明 »
然后在寶塔這邊執行你寫的shell腳本,執行 git pull 的操作,好的,話不多說,開整
1、首先你需要在寶塔的軟件商店里下載Webhook,說明也說的很清楚了,可設置回調腳本
這個作用很多,不僅限於自動拉取倉庫代碼。。。其他的自己去發掘吧。
2、安裝好之后,點擊添加,然后就可以寫名稱和腳本了
3、這里我寫的是git pull 的腳本,至於寫其他的我就不贅述了,操作都一樣,只不過腳本不同而已
#!/bin/bash echo "" #輸出當前時間 date --date='0 days ago' "+%Y-%m-%d %H:%M:%S" echo "-------開始-------" #判斷寶塔WebHook參數是否存在 if [ ! -n "$1" ]; then echo "param參數錯誤" echo "End" exit fi #服務器 git 項目路徑 gitPath="/www/wwwroot/$1" #碼雲項目 git 網址 gitHttp="git@gitee.com:XXXXX/$1.git" echo "路徑:$gitPath" #判斷項目路徑是否存在 if [ -d "$gitPath" ]; then cd $gitPath #判斷是否存在git目錄 if [ ! -d ".git" ]; then echo "在該目錄下克隆 git" git clone $gitHttp gittemp mv gittemp/.git . rm -rf gittemp fi #拉取最新的項目文件 git reset --hard origin/master #git clean -f git pull origin master echo "拉取完成" #執行npm #執行編譯 #npm run build #設置目錄權限 chown -R www:www $gitPath echo "-------結束--------" exit else echo "該項目路徑不存在" echo "End" exit fi
這里可以先不用放在webhook里,可以單獨執行一下腳本試試,至於為什么,我們等下再說。
4、現在設置好了,我們點擊查看密匙
5、使用方法已經說的很清楚了,param=test,為什么這樣寫,因為腳本里我們使用了變量$1,你可以在腳本里把地址寫死,這樣這個param的值就隨便你寫了
但是請求的時候還是需要帶上這個參數,因為我們腳本里判斷了參數是否存在
#請求的地址 http://你面板的地址(端口號也需要帶上)/hook?access_key=這里填寫你的密匙,直接復制過來¶m=這里帶上參數,參數是你項目的名稱
6、然后我們跳到碼雲,找到你的倉庫,點擊管理,然后找到WebHooks
7、添加WebHook,url就填寫寶塔里那個鏈接,密碼可以不用寫,這里我就選擇Push事件,如果有特殊需求就自己看着辦吧
8、添加好之后你就可以點擊測試,如果鏈接正常,請求成功的話會返回這樣
9、返回寶塔,查看Webhook日志,如果跟下圖一樣,那就沒毛病。本地 git push 服務器執行腳本自動拉取,然后你就可以愉快的寫代碼了。
10、上面說到了不配置,單獨執行一下腳本試試,原因是我昨天搞的時候一切正常,拉也能拉下來,但是版本不對
始終只能拉到一個固定的版本,git pull 在本地終端里面執行就可以拉取新的 但在寶塔腳本里面,總是本地執行后的那次,永遠不變。
始終沒有找到解決辦法,無奈最后只能放棄這個方法。。。,今天不死心,又來搞,在大佬的指導下單獨執行了腳本,發現由於沒有配置好賬號密碼,每次pull的時候
都需要輸入賬號密碼,所以才會拉取失敗,但是昨天搞的時候我是配置了的呀,不然也不會一直拉到同一個版本的代碼呀,很奇怪
有大佬知道是什么原因的話歡迎留言學習交流。

12、執行命令,說通俗一點就是記住賬號密碼。。。,這里需要注意的是你執行完命令之后需要輸入一次帳號密碼,這樣之后的操作就不用輸入了
而不是執行完就不用輸入了
git config --global credential.helper store
13、單獨執行腳本沒有問題的話,就可以照上面的步驟配置WebHook了,然后你就可以本地push試試效果了。