用 Git Hooks 進行自動部署

2022-09-16 00:51:11 字數 2530 閱讀 9375

原文發表於 

昨天開始接手開發公司前端團隊的主頁,在稍微修改點東西後推送到遠端倉庫想看下線上結果時發現並沒有更改!詢問一把手得知,居然還需要連線到伺服器執行一下git pull才行……對於我這種怕麻煩的人來說,簡直不能忍!

經過一番查詢資料以及一頓折騰,終於讓它能夠自動跑起來了,真是高興得我手舞足蹈啊!雖然弄了較長時間,在實踐的過程中踩了點坑,但回過頭來一看還是挺簡單的。總的來說,就只是在伺服器和本機都做一下配置。(這不廢話麼……)

在搭建環境的整個過程中,有很多步驟是需要連線到伺服器進行的,然而在每次訪問的時候都需要輸入使用者名稱和密碼,就像逢年過節回家聚會都會被親戚朋友詢問「什麼時候結婚呀」「何時抱小孩啊」。這就是為什麼要把這步放到前面——在自己腦門上寫上計畫的結婚生子時間,省得他們總問!

金鑰是免登入連線伺服器的通行證,有種刷臉通行的感覺。如果本地已經存在並且不想另外生成的話,可以跳過此步。

cd ~/.ssh切換目錄後用ssh-keygen -t rsa -c "用於區分金鑰的標識"生成一對具有相同名字的金鑰(預設為id_rsaid_rsa.pub):用於本地的私鑰和用於伺服器的公鑰(有.pub副檔名)。

如果私鑰名字不是預設的話,需要手動加入到被「認證」的私鑰列表中,否則每次連線伺服器都會提示輸入伺服器的密碼。在遇到了一些坑(文後有說明)後,我覺得設定 ssh config 最為靠譜!

host host_alias                       # 用於 ssh 連線的別名,最好與 hostname 保持一致

hostname server_domain # 伺服器的網域名稱或 ip 位址

port server_port # 伺服器的埠號,預設為 22,可選

user server_user # 伺服器的使用者名稱

preferredauthentications publickey

identityfile ~/.ssh/private_key # 本機上存放的私鑰路徑

先用pbcopy < ~/.ssh/private_key.pub將公鑰複製到剪貼簿;通過ssh user@server訪問伺服器,這時會提示輸入密碼(它也許只有這麼一次「詢問」的機會);成功登入後vim ~/.ssh/authorized_keys,在合適的位置 cmd + v 並儲存退出(同時exit退出 ssh 連線)。

伺服器上需要配置兩個倉庫,乙個用於**中轉的遠端倉庫,乙個用於使用者訪問的本地倉庫。這裡的「遠端倉庫」並不等同於託管**的「**倉庫」,這兩個倉庫都是為了自動同步**並部署**而存在。

在存放遠端倉庫的目錄中(假設是/home/user/repos)執行git init --bare bridge_repo.git會建立乙個包含 git 各種配置檔案的「裸倉庫」。

切換到存放使用者所訪問檔案的目錄(假設為/home/user/www,如果不存在則在/home/user中執行mkdir www):

git init

git remote addorigin ~/repos/bridge_repo.git

git fetch

git checkout master

將目錄切換至/home/user/repos/bridge_repo.git/hooks,用cp post-receive.sample post-receive複製並重命名檔案後用vim post-receive修改。其內容大致如下:

#!/bin/sh

unset git_dir

nowpath=`pwd`

deploypath="../../www"

cd $deploypath

git pull origin master

cd $nowpath

exit 0

使用chmod +x post-receive改變一下許可權後,伺服器端的配置就基本完成了。

在原有的(託管**的)倉庫上加入剛才所配置的伺服器上的遠端倉庫的位址為源,以後往那個源推送**後就會自動部署了。

在搭建環境時並沒有一帆風順,磕磕絆絆遇到不少問題,雖然很多不值得一提,但有的點還是有記錄並分享的價值的!

將生成的私鑰進行「認證」有不止一種方式,然而,起初我用的是最挫最不靠譜的ssh-add ~/.ssh/private_key——只是在當前 session 有效,一重啟就又會被「詢問」了!

用 Git Hooks 進行自動部署

原文發表於 昨天開始接手開發公司前端團隊的主頁,在稍微修改點東西後推送到遠端倉庫想看下線上結果時發現並沒有更改!詢問一把手得知,居然還需要連線到伺服器執行一下git pull才行 對於我這種怕麻煩的人來說,簡直不能忍!經過一番查詢資料以及一頓折騰,終於讓它能夠自動跑起來了,真是高興得我手舞足蹈啊!雖...

git hooks自動部署

一 準備 1.筆者的git庫和web伺服器在同一臺機器上。cd data wwwroot html html目錄 git clone home git html 首次需轉殖遠端庫 chown r www.www 修改web許可權為程式執行者 2.由於hooks下的指令碼一般是由git執行,所以git...

部署inotify tools進行檔案自動同步

建立inotify自動同步指令碼 vim inotify rsync.sh bin sh src home rsync test dst rsync 192.168.10.4 home rsync test bin su rsync usr local bin inotifywait mrq e m...