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中去;
在百度搜索了一下 git webhook 這個關鍵字,沒有看到有相關的詳細的應用教程。
所以決定把 自己這段時間以來的摸索 寫成文字 分享給大家 。
最近碰到這樣的一個需求,就是 本地提交代碼 到 git倉庫以後 需要 網站 遠程自動同步代碼 。
git 的 webhook 正好能 滿足 這個需求。
具體步驟:
服務器端:
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