一般公司或者團隊是怎麼進行代碼開發並且部署到服務器上的?

子木予


一個非常好的問題。我是工作多年的Web應用架構師,來回答一下這個問題。歡迎關注我,瞭解更多IT專業知識。


隨著業務需求發展,應用於生產的項目功能和架構都日趨複雜:多層架構,數據中臺,動靜分離,集群化部署,自動化運維,等等。


以Java開發Web服務為例:


使用Git時,如果使用Pull Request合併代碼,流程是這樣的:


部署使用Docker容器:


急速馬力快de源碼客


對於一個稍成規模的公司而言,項目開發往往會涉及到團隊開發,那麼團隊協同開發會涉及到代碼同步和衝突的問題,這不需要擔心,有成熟的解決方案。另外一方面,項目的部署與發佈也分很多種,比如傳統的手動部署或當下流行的自動化部署。

團隊開發模式

1、代碼版本管理

在團隊協同開發下,難免存在多人修改同一個文件的情況,於是有了版本控制系統,比如:SVN、GIT。當下SVN和GIT用的人數也差不多,都能很好的管理代碼版本,藉助它們可以輕鬆解決文件衝突的現象。

2、開發環境統一

我們知道,即使代碼完全一致,在不同環境及配置下,項目運行表現也是不同的(比如不同系統上文件大小寫要求不同),因此在團隊開發中也有必要保持開發環境的統一。

我們推薦使用 Vagrant 或 Docker 來確保開發環境的統一。

項目部署方案

項目部署主要有兩種:傳統手動部署、自動化部署。

1、傳統手動部署

這種實現難度最低,但費時費力,對於小項目可以採用手動部署,但對於中大型項目不建議。

2、自動化部署

說到自動化部署就不得不說Jenkins了,它是一個用於持續構建的可視化Web工具,通俗的說Jenkins支持各類項目的“自動化”編譯、打包、分發部署。Jenkins對主流編程語言支持很好、完全兼容Maven、Ant等構建工具、同時可以無縫的和GIT/SVN集成。


以上就是我的觀點,對於這個問題大家是怎麼看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我瞭解更多科技知識!

網絡圈


廢話不多說,直接來乾的。這裡介紹一套成熟的方案。

gitlab(代碼管理)+jenkins(持續集成)+k8s(服務管理)

其中涉及到的技術細節: dockerindocker makefile

gitlab使用介紹

gitlab是一款類似github的開源代碼管理軟件,可在公司內網,直接搭建一套私有代碼倉庫,適合團隊多人開發,具有完善的分支管理、角色管理、issue、里程碑等。是非常優秀的一款軟件。



jeknis使用介紹

這是一款開源持續集成軟件,說人話就是使用他可以自動化部署服務。其具有gitlab相關的插件,安裝後可直接對接gitlab,當gitlab發生push或者merge代碼事件,會通知jeknis去完成最新推送的代碼的鏡像構建和部署。

推薦上面說的兩款技術和jeknis混合使用。

1.dockerindocker技術。顧名思義就是docker裡面運行docker,簡單點直接用dockerfile在jeknis鏡像的基礎上安裝docker客戶端或者k8s客戶端。這樣我們在容器中就可以直接調用宿主機的docker命令或者k8s命令。這對我們使用jenkins執行部署腳本,通知k8s或者docker部署服務,非常方便。

2.makefile 之所以介紹這款他,是因為其具有一個絕佳的功能,可以檢測文件內容是否發生變化,這樣對於微服務架構,其配合jenkins,無需指定什麼,就可以部署上發生文件變化的微服務。而不會影響到其他服務。



k8s使用介紹

這款當紅炸子雞🐔,相信大家耳聞已久。其實現了對docker的管理和編排。配合上共享存儲和其服務自動重啟機制,可以讓我們的服務無當機。

對於docker內部服務的暴露推薦ingress+service.

docker鏡像管理推薦harbor。



以上完整的自動化開發部署環境,有興趣的可以自行學習相關內容,進行搭建測試。


牙牙的生活日誌


SVN、Git源代碼管理

為了解決在軟件開發過程中,由源代碼引發的各種蛋疼、繁瑣的問題。目前開發使用較廣的版本控制系統(Git & SVN)。

SVN、Git區別

最核心的區別Git是分佈式的,而Svn不是分佈的。能理解這點,上手會很容易,聲明一點Git並不是目前唯一的分佈式版本控制系統,還有比如Mercurial等,所以說它們差不許多。話說回來Git跟Svn一樣有自己的集中式版本庫和Server端,但Git更傾向於分佈式開發,因為每一個開發人員的電腦上都有一個Local Repository,所以即使沒有網絡也一樣可以Commit,查看歷史版本記錄,創建項目分支等操作,等網絡再次連接上Push到Server端。

項目本地開發完成後,我們就需要將代碼部署到線上服務器。在當下微服務、集群等的流行,單靠傳統的部署顯然是無法滿足當下的需求;但是我們通過Gitlab和Jenkins這兩個常用的開源項目,便可搭建自己公司的代碼管理工具和自動化部署平臺。

Jenkins 是一個開源的持續集成系統,方便開發者利用圖形化界面進行項目部署發佈等固定操作,通常也會和 Gitlab 配合起來,在 git push 完成後觸發設定好的操作,例如將代碼部署到某個開發環境中。


IT老田


網站開發有很多語言,如java,python,php,js等,以php開發為例,可以從三個方面來敘述:

1.代碼本地開發

a.使用Git Workflow 模式開發,方便代碼管理,防止代碼覆蓋。svn也可以

b.數據庫環境配置(測試環境 生產環境 開發)

c.代碼編輯器(subline或者phpstorm)

2.服務器端

a.域名購買

b.DNS解析

c.雲服務器購買(含操作系統 推薦使用 CentOS 等Linux發行版),可以購買西部數碼或者阿里雲的服務器,當然,也可以購買海外服務器

d.之後就是一些服務器配置

雲服務器用戶創建(用戶權限 ssh只允許秘鑰登陸)

雲服務器反向代理配置(推薦使用nginx), 或者使用雲服務負載均衡

雲服務器防火牆配置

雲服務器數據庫配置(可以單獨購買數據庫服務, 也可以單獨弄一臺數據庫服務器, 展示型無需更新的網站可以不配置數據庫)

服務器代碼運行環境配置(參考本地環境配置)

服務器緩存配置(推薦使用redis 或者 服務商提供的 緩存服務器),githook線上環境自動化測試也可以搞起,線上日誌和監控報警(可以使用第三方服務 OneApm Alinode等)

3.關於部署

a.利用 git 進行部署(githook自動化的測試, 自動化的拉取到服務器上)

b.使用flashfxp代碼上傳服務器上項目的根目錄,這種上傳方式優點是速度快,效率高;缺點是代碼覆蓋率高,不易恢復

c.容器化部署,使用docker容器化技術,將代碼打包成鏡像,在生成容器進行部署,這種方式更快速的交付和部署(一次創建和配置,可以在任意地方正常運行),更高效的虛擬化(不需要hypervisor支持,內核級虛擬化),更輕鬆的遷移和擴展(在任意平臺移植),更簡單的管理





mu子君


一般公司會有兩套服務器,一套用於生產,一套用於測試。服務器版本管理可能會用svn,也可能會用git,代碼提交到版本管理器上,然後測試服務器拉取新的代碼進行測試,如果沒問題,生產服務器拉取版本服務器中的代碼進行部署。

看了以上說明你會發現,測試服務器和線上服務器代碼應該是一致的,這樣就需要我們對於服務器環境依賴的變量寫入到配置文件,更新的時候不提交這個配置文件。

現在服務器的代碼部署都是採用腳本和軟件配合部署的。不需要人工手動去服務器上拉取代碼,現在一般常用jenkins軟件進行代碼的自動部署。


夢迴故里歸來


方法很多啊,最簡單的開發打包給運維,運費上線,或者Jenkins持續集成,持續部署,再不濟還有ansible或者saltstack!活幹了就行,不管你用什麼方法,當還要看你的生產環境


光白


Webhook


ZEROSIX


我們公司是這樣搞滴

gitlab+Jenkins+k8s+docker+svn+smb+harbor+exsi6.7+zabbix+prometheus+granfa+vpn

我沒有記錯的話 就是這些的。


分享到:


相關文章: