git自動化部署php指令碼的實現方法:1、安裝git;2、克隆倉庫程式碼;3、更改linux許可權,修改設定;4、將www使用者加入sudoers;5、生成金鑰;6、填寫webhook域名,上傳php指令碼即可。
本文操作環境:linux5.9.8系統、Git 2.30.0版、DELL G3電腦
git自動化部署php指令碼怎麼實現?
git+php部署webhook自動化指令碼 實現程式碼同步
本文將介紹git+php部署webhook自動化指令碼 實現程式碼同步
git配合webhook自動化部署不算是個高深的技術,但是第一次自己部署中走了很多彎路,主要自己在linux方面算是個菜雞,本文記錄一下容易出錯的問題點,遇到的坑
準備
lnmp環境下部署可存取的web域名,伺服器端php指令碼,倉庫碼雲gitee
自動化流程,本地push->gitee倉庫webhook->linux伺服器php指令碼pull
首先在gitee碼雲上建立倉庫
本地使用ssh協定與倉庫進行通訊,我的本地是windows,這裡就不介紹怎麼生成ssh公鑰,下面linux下將會介紹
1.安裝git
yum install git
2.克隆倉庫程式碼《注意一定要使用ssh協定,後面都是基於ssh》
git initgit clone [email protected]:zhuyanbin/HiAdmin.git
3.更改linux許可權,修改設定
因為我們webhook去通知伺服器端屬於外部存取,所以這裡的管理員使用者預設是www使用者,所以要給定www足夠的許可權才行
vim /etc/passwd 新增下面的一行 www:x:1001:1001::/home/www:/bin/bash
1001是使用者組的id,使用以下命令可檢視使用者www的id
cat /etc/group
將www使用者加入sudoers並可以無密碼執行shell
#(1)為當前使用者新增寫入sudoers的許可權
chmod u+w /etc/sudoers
#(2)編輯sudoers
vim /etc/sudoers
#(3)搜尋Allow root to run any commands anywhere,在root使用者對應行下寫入如下內容:
www ALL=(ALL) NOPASSWD:/usr/bin/git
#(4)收回對sudoers的寫入許可權
chmod u-w /etc/sudoers
修改php-fpm.conf設定設定存取者,我這裡是www,也就是php已經預設的設定
4.最後生成金鑰(此步必須是www使用者生成金鑰,ps:在這個地方卡了兩天,一直使用root管理員賬號生成,百度了好幾天,嘗試各種方法,後來切換到www使用者生成金鑰之後一切ok)
生成公鑰金鑰
mkdir -p /home/www/.ssh
chown -R www.www /home/www/.ssh
ssh-keygen -t rsa
檢視公鑰金鑰
cat /home/www/.ssh/id_rsa.pub
將生成好的公鑰複製到gitee碼雲倉庫公鑰填寫處
https://gitee.com/profile/sshkeys
補充:gitee填寫公鑰的地方有兩個,一個是倉庫的公鑰,如果填寫到倉庫的公鑰,伺服器端git許可權將只有pull的許可權,另一個是賬號的公鑰,如果填寫到個人賬號的公鑰,將會有pull,push等許可權,我這裡直接使用的個人賬號公鑰
5.最後填寫webhook域名,上php指令碼
填寫webhook通知地址域名(密碼設定的空,後面php中沒有密碼驗證,如果考慮安全,請在後面設定密碼)
上php指令碼處理程式hook.php(執行linux命令)
chdir("/home/wwwroot/default/HiAdmin"); exec("git pull origin master 2>&1", $out); foreach($out as $v) { echo iconv( 'GB2312','UTF-8', $v)."<br>"; }
到此,設定完以上伺服器端程式碼可自動同步,完成自動化部署
出現問題
1.php指令碼不執行
原因php.ini中php很多函數是預設沒開啟包括執行linux指令碼函數exec(),shell_exec()等等
找到php.ini,找到disable_functions那一行刪除相應的函數即可,或者整行註釋掉
2.無法執行git pull命令
問題一
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
歸根結底還是因為linux許可權的問題,我遇到的是出現一下問題
到這裡的原因是因為root生成git公鑰金鑰,而切換到www後生成公鑰金鑰後就成功了(上述第四小步生成公鑰,一定使用www生成公鑰金鑰)
問題二
error: insufficient permission for adding an object to repository database .git/objects
fatal: failed to write object
fatal: unpack-objects failed
這個還是沒有許可權執行git命令,只需要執行以下
第一步:cd .git/objects 定位到git下的objects檔案下 第二步: ls -al 檢視git庫的所有者(git使用者 git組) 第三步: chown -R yourname:yourgrounp * 或者sudo chmod 777 -R .git/objects 提交
最後解決完以上問題,大功告成,上一張成功的截圖
自己的後端語言是php,這裡可以用多種方式去實現執行linux指令碼,nodejs,python等等
推薦學習:《》
以上就是git自動化部署php指令碼怎麼實現的詳細內容,更多請關注TW511.COM其它相關文章!