新聞中心
本文操作環(huán)境:linux5.9.8系統(tǒng)、Git 2.30.0版、DELL G3電腦

創(chuàng)新互聯(lián)長期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為豐縣企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),豐縣網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
git自動化部署php腳本怎么實(shí)現(xiàn)?
git+php部署webhook自動化腳本 實(shí)現(xiàn)代碼同步
本文將介紹git+php部署webhook自動化腳本 實(shí)現(xiàn)代碼同步
git配合webhook自動化部署不算是個(gè)高深的技術(shù),但是第一次自己部署中走了很多彎路,主要自己在linux方面算是個(gè)菜雞,本文記錄一下容易出錯(cuò)的問題點(diǎn),遇到的坑
準(zhǔn)備
lnmp環(huán)境下部署可訪問的web域名,服務(wù)端php腳本,倉庫碼云gitee
自動化流程,本地push->gitee倉庫webhook->linux服務(wù)器php腳本pull
首先在gitee碼云上創(chuàng)建倉庫
本地使用ssh協(xié)議與倉庫進(jìn)行通訊,我的本地是windows,這里就不介紹怎么生成ssh公鑰,下面linux下將會介紹
1.安裝git
yum install git
2.克隆倉庫代碼《注意一定要使用ssh協(xié)議,后面都是基于ssh》
git initgit clone [email protected]:zhuyanbin/HiAdmin.git
3.更改linux權(quán)限,修改配置
因?yàn)槲覀僿ebhook去通知服務(wù)端屬于外部訪問,所以這里的管理員用戶默認(rèn)是www用戶,所以要給定www足夠的權(quán)限才行
vim /etc/passwd 添加下面的一行 www:x:1001:1001::/home/www:/bin/bash
1001是用戶組的id,使用以下命令可查看用戶www的id
cat /etc/group
將www用戶加入sudoers并可以無密碼執(zhí)行shell
#(1)為當(dāng)前用戶添加寫入sudoers的權(quán)限
chmod u+w /etc/sudoers
#(2)編輯sudoers
vim /etc/sudoers
#(3)搜索Allow root to run any commands anywhere,在root用戶對應(yīng)行下寫入如下內(nèi)容:
www ALL=(ALL) NOPASSWD:/usr/bin/git
#(4)收回對sudoers的寫入權(quán)限
chmod u-w /etc/sudoers
修改php-fpm.conf配置設(shè)置訪問者,我這里是www,也就是php已經(jīng)默認(rèn)的配置
4.最后生成密鑰(此步必須是www用戶生成密鑰,ps:在這個(gè)地方卡了兩天,一直使用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
將生成好的公鑰復(fù)制到gitee碼云倉庫公鑰填寫處
https://gitee.com/profile/sshkeys
補(bǔ)充:gitee填寫公鑰的地方有兩個(gè),一個(gè)是倉庫的公鑰,如果填寫到倉庫的公鑰,服務(wù)端git權(quán)限將只有pull的權(quán)限,另一個(gè)是賬號的公鑰,如果填寫到個(gè)人賬號的公鑰,將會有pull,push等權(quán)限,我這里直接使用的個(gè)人賬號公鑰
5.最后填寫webhook域名,上php腳本
填寫webhook通知地址域名(密碼設(shè)置的空,后面php中沒有密碼驗(yàn)證,如果考慮安全,請?jiān)诤竺嬖O(shè)置密碼)
上php腳本處理程序hook.php(執(zhí)行l(wèi)inux命令)
chdir("/home/wwwroot/default/HiAdmin");
exec("git pull origin master 2>&1", $out);
foreach($out as $v)
{
echo iconv( 'GB2312','UTF-8', $v)."
";
}到此,配置完以上服務(wù)端代碼可自動同步,完成自動化部署
出現(xiàn)問題
1.php腳本不執(zhí)行
原因php.ini中php很多函數(shù)是默認(rèn)沒打開包括執(zhí)行l(wèi)inux腳本函數(shù)exec(),shell_exec()等等
找到php.ini,找到disable_functions那一行刪除相應(yīng)的函數(shù)即可,或者整行注釋掉
2.無法執(zhí)行g(shù)it 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.
歸根結(jié)底還是因?yàn)閘inux權(quán)限的問題,我遇到的是出現(xiàn)一下問題
到這里的原因是因?yàn)閞oot生成git公鑰密鑰,而切換到www后生成公鑰密鑰后就成功了(上述第四小步生成公鑰,一定使用www生成公鑰密鑰)
問題二
error: insufficient permission for adding an object to repository database .git/objects
fatal: failed to write object
fatal: unpack-objects failed
這個(gè)還是沒有權(quán)限執(zhí)行g(shù)it命令,只需要執(zhí)行以下
第一步:cd .git/objects 定位到git下的objects文件下 第二步: ls -al 查看git庫的所有者(git用戶 git組) 第三步: chown -R yourname:yourgrounp * 或者sudo chmod 777 -R .git/objects 提交
最后解決完以上問題,大功告成,上一張成功的截圖
自己的后端語言是php,這里可以用多種方式去實(shí)現(xiàn)執(zhí)行l(wèi)inux腳本,nodejs,python等等
網(wǎng)頁名稱:git自動化部署php腳本怎么實(shí)現(xiàn)
文章URL:http://m.fisionsoft.com.cn/article/dpsdosc.html


咨詢
建站咨詢
