利用Git Hooks簡(jiǎn)單部署、更新Web應(yīng)用

自己寫(xiě)的網(wǎng)站,每次push代碼后都要ssh進(jìn)入服務(wù)器手動(dòng)同步代碼,不喜歡這樣的重復(fù)勞動(dòng),索性使用git hooks來(lái)自動(dòng)完成代碼同步。

1. 創(chuàng)建倉(cāng)庫(kù)

/home/yourname/repos/目錄下,運(yùn)行git init --bare test.git,在服務(wù)器端初始化一個(gè)遠(yuǎn)程的Git裸倉(cāng)庫(kù)。裸倉(cāng)庫(kù)里只有g(shù)it索引,不包含工作目錄。
通常來(lái)說(shuō),在Linux里Web項(xiàng)目是放在/var/www目錄之下,我們?cè)谶@目錄下clone上面建立的倉(cāng)庫(kù)。

cd /var/www
git clone /home/yourname/repos/project.git

2. 添加鉤子

在裸倉(cāng)庫(kù)中Git鉤子存放于,hooks目錄,如果是普通的git文件夾,則存放于.git/hooks目錄內(nèi),每個(gè)Git倉(cāng)庫(kù)都會(huì)這個(gè)文件夾,里面放置一些實(shí)例腳本,所有的實(shí)例腳本都是shell腳本,只要是正確命名的可執(zhí)行腳本都能使用,Ruby、Python或其他語(yǔ)言也是可行的。
hooks目錄內(nèi)默認(rèn)包含如下文件。去掉文件后面的.example即可使用,別忘了chmod +x添加可執(zhí)行權(quán)限。

?  hooks git:(master) ls
applypatch-msg.sample     pre-commit.sample         prepare-commit-msg.sample
commit-msg.sample         pre-push.sample           update.sample
post-update.sample        pre-rebase.sample
pre-applypatch.sample     pre-receive.sample

文件名已經(jīng)清楚地表述了每個(gè)鉤子的作用。我們想做的是倉(cāng)庫(kù)被push后自動(dòng)部署,所以要用到的是post-update鉤子,修改的鉤子是在/home/yourname/repos/project.git倉(cāng)庫(kù)里的鉤子,不要修改到/var/www/project里了

3. 修改鉤子

先用cp post-update.sample post-update復(fù)制一個(gè)新文件,再編輯此文件。每一行命令都已添加注釋

# 進(jìn)入項(xiàng)目目錄
cd /var/www/project

# 獲取倉(cāng)庫(kù)里的新提交
git fetch /home/yourname/repos/project.git

# 將代碼與倉(cāng)庫(kù)同步,拋棄當(dāng)前所有修改
git clean -f
git reset --hard origin/master

## 以下指令適用于laravel項(xiàng)目,可根據(jù)項(xiàng)目自由修改
# 更新依賴包
composer install
npm install
php artisan migrate

# 前端項(xiàng)目按生產(chǎn)環(huán)境生成前端文件
npm run production

最后一行命令如果遇到權(quán)限問(wèn)題,則需要將用戶添加到www-data中。使用命令usermod -G www-data yourname,并在最后一行添加chgrp www-data . -R

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容