摘要:我想做的是這么一件事每創建一個新分支,之后自動部署的服務器的不同路徑,然后根據不同端口訪問不同分支的代碼,以方便進行該分支的測試。各個分支自動部署到不同路徑。首先完成自動部署這里我用的是碼云來做的。
我想做的是這么一件事:git 每創建一個新分支,push之后自動部署的服務器的不同路徑,然后根據不同端口訪問不同分支的代碼,以方便進行該分支的測試。
并且我正在學習 thinkphp 5 呢,正好測試一下。
舉個栗子來說就是:當我新建了一個分支為 8081_opqnext_test,然后完成了某個功能。git add、git commit、當 git push 之后,服務器會自動拉取 8081_opqnext_test 分支上的代碼到 /data/tp/8081 這個目錄里,然后 訪問 beta.tp.opqnext.com:8081 就會直接訪問到該分支的代碼。同理,當我創建看一個 8082_user_list 的分支。完成了用戶列表的功能。git push 之后服務器會自動創建目錄 /data/tp/8082 并且將代碼到 pull 到該目錄。當你訪問 beta.tp.opqnext.com:8082 的時候,會訪問到該分支的代碼便于測試。那 master 的代碼每次合并之后 都會自動部署到 /data/tp.opqnext.com/ 訪問 tp.opqnext.com 即線上的代碼。
然后我們分開步驟來說:
首先完成自動部署功能。
各個分支自動部署到不同路徑。
訪問不同的端口映射到不同的分支代碼。
這里我用的是 碼云 git@oschina 來做的。
首先需要配置 ssh公鑰,看這里:
特別提醒的是:你的 nginx 是用哪個用戶跑的,那么在生產公鑰之前先要切換到該用戶下。比如我 nginx 是 ngxuser 用戶,假如你在 root 下生產公鑰并且配置到碼云,你的hook是沒有權限 clone 和 pull 代碼的/(ㄒoㄒ)/~~
你可以按如下命令來生成sshkey:
sudo ngxuser # 你的nginx用戶 ssh-keygen -t rsa -C "xxxxx@xxxxx.com" # Generating public/private rsa key pair... # 三次回車即可生成 ssh key
查看你的 public key,并把他添加到碼云(Gitee.com)
cat ~/.ssh/id_rsa.pub # ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
添加后,在終端(Terminal)中輸入
ssh -T git@git.oschina.net
若返回
Welcome to Git@OSC, yourname!
則說明添加成功,然后去 碼云后臺 添加你的 ssh key
然后去配置 webhook 查看教程 配置完成 webhook 之后,你每次 push 之后就會觸發這個鉤子。最簡單的,你寫一個 auto_deploy_code.php 放到網站根目錄。內容是:
"; system("git?pull",?$var);
不用接收 webhook 給你發過來的數據,你只管 pull ,假如你只有一個分支的話。
但是我要接收呢,既然有了數據,當然要接收。
我創建了一個新的分支,這個分支名稱可以規定好,比如:8081_opqnext_user (端口-開發者-開發功能)這里怎么約定,那你后面的腳本就怎么寫唄。
自動部署的腳本:
".date("H:i:s")); } else { if(!is_dir($dir)){ mkdir($dir,0777,true); $cmd = "cd $dir; git clone -b $branch git@git.oschina.net:opqnext/thinkphp.git $dir"; } else { $cmd = "cd $dir; git pull origin $branch"; } shell_exec($cmd); error_log("auto_git_pull ".$res["push_data"]["user_name"]." ".$branch." msg:".$res["push_data"]["commits"][0]["message"]." =>".date("H:i:s")); } } else { // 刪除分支 $cmd = "cd /data/tp; rm -rf $port"; shell_exec($cmd); error_log("auto_git_del_branch ".$res["push_data"]["user_name"]." ".$branch." =>".date("H:i:s")); } }
首先檢測 token 是否正確,獲取分支名稱,截取端口號,填寫端口完整路徑。
如果 commit 信息有內容,說明判斷分支是否為 master 如果是就拉線上代碼,如果是分支 commit 檢測端口路徑是否存在,存在即 pull 否則 clone 沒了。
既然各個分支的目錄都已經創建好了,代碼也可以自動部署了。那再配置 nginx 就可以了,我本來以為可以寫一個類似于正則匹配,匹配到哪個端口就去訪問對應的路徑,但是貌似不行,所以只能寫多個 server 監聽不同的端口,配置相應的路徑。
比如 8081,8082,8083,8084...
每個開發者三五個端口,不錯了。大概就是這樣一個理論。我發現我寫代碼從來都是道理基本通,但是不能用...如果你要用的話,再修改修改就 beautiful 了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40547.html
摘要:起因某種原因不能使用于是用寫了一個自動部署腳本項目介紹用寫的部署腳本可配置源代碼目錄目標目錄緩存目錄用來部署后刪除忽略目錄文件他們在本地的變化不會被部署支持可配置版本庫和分支支持一個同時往多個目錄部署支持手動在命令行觸發支持網頁界面操作 Summer-PHP-Deploy 起因 某種原因, 不能使用Jenkins, 于是用PHP寫了一個自動部署腳本 項目介紹 用PHP寫的部署腳本 可...
摘要:近期在按照業務劃分項目時,我們組被分了好多的項目過來,大量的是基于的,也是我們組持續在使用的語言。部署環境強依賴本地,因為需要在本地建立倉庫的臨時目錄,并經過多次的方式完成部署上線的操作。 近期在按照業務劃分項目時,我們組被分了好多的項目過來,大量的是基于 Node.js 的,也是我們組持續在使用的語言。 現有流程中的一些問題 在維護多個項目的時候,會暴露出一些問題: 如何有效的使用...
摘要:而利用的功能,能夠讓我們省去這一步,下面我就以碼云的為例,實現服務端的代碼自動同步部署。查看是哪個用戶執行該命令參考文章使用腳本遠程部署項目利用實現自動部署代碼碼云通過實現自動同步代碼部署執行系統外部命令函數 當進行開發的環境在本地,而運行的環境要在服務端時,每一次提交代碼都需要在服務端pull一次。而利用git的hooks功能,能夠讓我們省去這一步,下面我就以碼云的webhooks為...
摘要:搭建服務器編寫自動部署腳本今天試了下在服務器上搭建服務器,并且編寫一個簡單的自動部署腳本。好了,試試吧原文連接搭建服務器編寫自動部署腳本更多分享知識點請掃碼關注 搭建Git服務器、編寫自動部署腳本 showImg(https://segmentfault.com/img/bVbs9fB?w=675&h=221); 今天試了下在linux服務器上搭建Git服務器,并且編寫一個簡單的自動部...
閱讀 1015·2021-09-26 09:55
閱讀 3555·2021-09-24 10:30
閱讀 1363·2021-09-08 09:36
閱讀 2552·2021-09-07 09:58
閱讀 603·2019-08-30 15:56
閱讀 764·2019-08-29 18:32
閱讀 3592·2019-08-29 15:13
閱讀 1840·2019-08-29 13:49