首頁 >後端開發 >PHP問題 >git自動化部署php腳本怎麼實現

git自動化部署php腳本怎麼實現

藏色散人
藏色散人原創
2022-01-11 09:40:422541瀏覽

git自動化部署php腳本的實作方法:1、安裝git;2、複製倉庫程式碼;3、更改linux權限,修改設定;4、將www使用者加入sudoers;5、產生金鑰;6 、填寫webhook域名,上傳php腳本即可。

git自動化部署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 git@gitee.com: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的權限git自動化部署php腳本怎麼實現

chmod u+w /etc/sudoers

#(2)編輯sudoers
vim /etc/sudoers

#(3)搜尋Allow root to run any commands anywhere,在root使用者對應行下寫入如下內容:git自動化部署php腳本怎麼實現

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)git自動化部署php腳本怎麼實現
#生成公鑰密鑰

mkdir -p /home/www/.ssh
chown -R www.www /home/www/.ssh
ssh-keygen -t rsa

查看公鑰金鑰
cat /home/www/.ssh/id_rsa.pub
git自動化部署php腳本怎麼實現將產生好的公鑰複製到gitee碼雲端倉庫公鑰填入處
https://gitee.com/profile/sshkeys

補充:gitee填寫公鑰的地方有兩個,一個是倉庫的公鑰,如果填寫到倉庫的公鑰,服務端git權限將只有pull的權限,另一個是帳號的公鑰,如果填寫到倉庫的公鑰,服務端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>";
    }

到此,配置完以上服務端程式碼可自動同步,完成自動化部署
git自動化部署php腳本怎麼實現
出現問題

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权限的问题,我遇到的是出现一下问题
git自動化部署php腳本怎麼實現
到这里的原因是因为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 提交

最后解决完以上问题,大功告成,上一张成功的截图
git自動化部署php腳本怎麼實現
自己的后端语言是php,这里可以用多种方式去实现执行linux脚本,nodejs,python等等

推荐学习:《PHP视频教程

以上是git自動化部署php腳本怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn