通過gitlab的webhook進行項目的自動部署所遇問題總結

1.通過gitlab的webhook來進行測試項目的自動部署;
2.php程序以www用戶來執行,當執行exec("sh update.sh")時,update.sh腳本也是以www用戶執行的
注:exec("sh update.sh >& error.log");可以將文件重定向到error.log文件中
3.結果發現,之前設置的ssh密鑰是以root用戶來設置的,php以www用戶執行腳本中的git pull 命令時就沒有權限
4.通過設置www下的ssh密鑰, sudo -u www ssh-keygen ...  以www用戶執行生成密鑰的操作
5.gitlab的deploy keys 可以設置ssh密鑰只能針對指定的項目,所以,針對項目的,我們將rsa.pub貼到指定項目的deploy keys中去,而針對用戶的,我們將ssh密鑰貼到gitlab的用戶信息的ssh keys中去;

一下轉載自攜程ued
===============================================================

在百度搜索了一下 git webhook 這個關鍵字,沒有看到有相關的詳細的應用教程。

所以決定把 自己這段時間以來的摸索 寫成文字 分享給大家 。

最近碰到這樣的一個需求,就是 本地提交代碼 到 git倉庫以後 需要 網站 遠程自動同步代碼 。

git 的 webhook  正好能 滿足 這個需求。

 

git

具體步驟:

服務器端:

1. 服務器端 生成 apache 的 deploy key

sudo -u apache ssh-keygen -t rsa -C “[email protected]

2.給apache 操作目錄的權限

第一種方法 直接給 目錄 777 權限 簡單粗暴

第二種方法 建立用戶組  把 ftp用戶 和 apache 添加到該組別裏面 , 給予該組權限

groupadd gitwriters
adduser [yourusername] gitwriters
adduser apache gitwriters

chgrp -R gitwriters /path/to/your/repo
chmod -R g+rw /path/to/your/repo
 3.在需要自動同步的倉庫打開hook
cd /項目/.git/
cp hooks/post-receive.sample hooks/post-receive
vim hooks/post-receive
#加入下面代碼
GIT_WORK_TREE=/home/www git checkout -f

 4.加入接收 webhook的 腳本,  在項目 創建 update.php
$www_folder = "/2T/ftp/utools/uilib" ;

//git倉庫地址
$git_repo = "[email protected]/.......abc.git" ;

//執行指令 
echo shell_exec(" cd $www_folder && git pull $git_repo 2>&1 ");
gitlab 端的設置:
找到項目的設置 ,
deploy key項   添加  直接 apache用戶 生成的 ssh key 

webhook 項 添加 網站地址/update.php (正常能夠訪問的鏈接)  , 勾選  Push events
保存 

完全以上配置 。服務器端自動同步代碼的功能就能夠實現了。

 

本文作者:l, jian 轉載請註明來自:攜程UED


發佈了20 篇原創文章 · 獲贊 2 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章