git自動化部署php指令碼怎麼實現

2022-01-11 10:00:40

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其它相關文章!