Git伺服器自動同步部署到專案

2021-09-26 03:30:38 字數 2428 閱讀 3799

上次簡單說了搭建git伺服器,這次來聊聊自動同步部署到專案。這種方式會很方便,比如用在**上,只需要點一下push,線上的**就會同步。這個教程的前提是**放在git伺服器上。

發現之前的文章有幾處錯誤,又經過一大堆測試,直接登入git使用者模擬了一遍操作等,終於找到比較完善的方法了。

檢視專案目錄下的.git,所屬是否是git使用者的,如果不是需要修改

chown -r git:git .git
git報錯

[git使用者 g]$ git pull

remote: counting objects: 5, done.

remote: compressing objects: 100% (3/3), done.

remote: total 3 (delta 2), reused 0 (delta 0)

unpacking objects: 100% (3/3), done.

from /git/g

528b0d2..9b2e4c3 master -> origin/master

updating 528b0d2..9b2e4c3

error: unable to unlink old 'index.php'

(permission denied)

沒有許可權更新,解決這個問題可以使用sudo命令,但這樣又會引出乙個新問題。

sudo問題

你需要先在/etc/sudoers資料夾中把執行sudo命令的使用者加上,否則會報錯

vim /etc/sudoers
把git使用者加上,並且不需要密碼

git all=

(all)nopasswd:all

但sudo還有乙個問題

[git@使用者 g]$ sudo

git pull

updating 528b0d2..9b2e4c3

fast-forward

index.php | 1 +

1 file changed, 1 insertion(+)

[git@使用者 g]$ ll

-rw-r--r-- 1 root root 5105 aug 14 19:03 index.php

就是使用者和使用者組變成了root,這樣網頁會打不開顯示拒絕訪問,就不得不使用chown來更換,所以git鉤子檔案就得這樣寫。

在相應的git專案目錄中,進入hooks目錄,新建或更改post-receive檔案,用自己裝的編輯器開啟,使用命令。

vim post-receive
輸入以下資訊

#!/bin/sh

cd /www/wwwroot/mywebsite ||

exit

unset git_dir

sudo

git reset --hard

sudo

git pull origin master

sudo

chown -r www:www *

sudo git reset --hard是解決報錯your local changes would be overwritten by merge. commit, stash or revert them to proceed,這是因為拉取**時發現本地**有過修改,所以提示你提交一下專案目錄**,但我們並不要提交,於是使用sudo git reset --hard可以放棄專案目錄修改(其實不是修改,只是跟git上的不同),讓拉取的**覆蓋專案目錄的**,實現硬更新。

sudo chown -r www:www *是把當前目錄所有檔案的所有者改為www使用者和www使用者組,這個使用者是檔案原本的使用者,如果你的是其他的請自行更改,.git是隱藏目錄所以不會被修改,但如果被修改需要你再改回來,在下面新增命令sudo chown -r git:git .git就可以。

這樣就完成了,下次push專案後就會被觸發,自動在mywebsite目錄下拉取相應分支的更新、更改使用者和使用者組。

像這種更改git使用者獲取許可權不用密碼的方式,我不確定安全性怎麼樣,還請大佬指教。

部署專案到伺服器

購買伺服器,可以到阿里雲 華為雲等國內一些大型雲服務平台購買,個人推薦國內的ucloud平台,活動多價效比高 購買的伺服器使用liunx作業系統,推薦使用centos 7。有了雲伺服器,還需要乙個網域名稱,通過網域名稱訪問 我想應該沒有人會用自己的ip來訪問吧 購買網域名稱,同樣可以在以上幾個雲服務...

專案部署到伺服器

今天,第一次為工作寫日子,以後肯定會一直記錄,好了,說一下重點吧。如何把已完成的專案部署到伺服器,準備工作,在伺服器上搭建 jdk 和 tomcat 版本根據個人需求,我是 jdk1.7 和 tomcat 7.0 具體怎麼搭建上網查吧。第一步 把自己的專案上傳到伺服器上。我用的是最笨的方法,因為伺服...

git實現webhook 部署到伺服器

簡單利用coding結合git實現webhook 1.建立webhook.php 確保伺服器上能以ssh方式進行git pull操作 確保shell exec能執行,在php.ini中 disable functions 中去掉 shell exec pwd getcwd command cd pw...