ant构建项目迁移到gradle_自动化构建、自动化部署发布一览
在軟件系統開發的過程中,一個項目工程通常會包含很多的代碼文件、配置文件、第三方文件、圖片、樣式文件等等,是如何將這些文件有效的組裝起來最終形成一個可以流暢使用的應用程序的呢?答案是借助構建工具或策略。就好像一場大型音樂會上總指揮將不同的管弦樂有效的協調起來,完成一場精彩絕倫的演出。而如果在構建的過程中依賴人手工進行編譯,工作起來會很繁瑣,于是就有了自動化構建、自動化發布、部署的想法和探索,通過使用程序自動化的完成系列操作,將大大提升工作效率。
我們日常接觸到的通常有前端和后端的開發項目,前端使用框架又通常有jQuery、vue、react等,后端又有CC++、Java、Python、Go、node等不同編程語言的不同框架項目,每種開發框架使用的構建工具會有一定的區別,但在做自動化構建的思路上有一定的相通性,這里找幾款工具來說一下自動化構建、發布的過程、思路和原則。
一、MakeCmake
如果在Linux系統上使用過開源項目的同學可能了解過make、makefile,首先系統已安裝了gcc或g++等C環境編譯器,我們通常下載完開源源代碼并執行make,程序就自動的按照makefile中約定的規則將.c或.cpp的文件編譯成可執行的程序文件,通常執行make install 將編譯好的程序、配置文件放置到指定的目錄下完成程序的部署安裝。當然這里說的是編譯別人已經寫的程序,如果是自己從頭到尾的開發C、C++項目,則需要自己來編寫makefile文件,makefile就是一系列的規則約束,將不同的程序文件鏈接起來,就好像一個演出,每個演員有自己的劇本和臺詞,還有一個負責將不同演員銜接好并按照既定的劇情推進的連接人----導演。Cmake可以理解為Make的升級版,不需要編寫復雜的makefile文件,而是通過Cmakelist來自動生成makefile,不過Cmakelist也是一種編譯的規則約束,相對makefile更簡約一些。
二、AntMaven
在構建Java類的項目時,通常采用的有Ant、Maven和Gradle。當然也可以手工寫腳本借助javac編譯或通過IDE等相對原始的構建方式,不過追本溯源Ant、Maven和Gradle也都是基于原始的構建原則進行封裝,從而提供更友好、更有效率的構建流程。Ant是通過l編寫build.xm構建規則進行程序的編譯打包,有點類似makefile。Maven和Gradle都采用包依賴的方式進行管理,Maven的POM.xml用groupId、artifactId、version組成的Coordination(坐標)唯一標識一個依賴,Gradle的思路和Maven類似但做法上不同,它包含build.gradle和settings.gradle兩個文件。Maven和Gradle有倉庫的概念,用于存放項目依賴的第三方庫,這樣在制作war包時不用把所有依賴的第三方文件都放到里面,而是實際程序啟動時根據環境的設置找對應的依賴文件,不過Ant制作的war包是提前把依賴的文件都放進去。
三、Grunt、Gulp、Webpack
前端的構建工具常見的有Grunt、Gulp、Webpack三種,gulp是一個自動化構建工具,是Grunt的升級版,主要用來設定程序自動處理靜態資源的工作,也即是對前端項目資源進行打包,通常有些項目文件很大,使用Gulp壓縮之后文件的體積就變的很小而功能不減。Webpack側重于前端模塊的打包,最初Webpack本身就是為前端JS代碼打包而設計的,后來被擴展到其他資源的打包處理。Webpack是通過loader(加載器)和plugins(插件)對資源進行處理的。Gulp是對整個前端資源進行整合、歸置,至于文件之間的調用關系是不做具體的管理,而Webpack是通過解析文件之間的引用關系進行資源的管理。
四、Jenkins
Jenkins是一個集構建、發布、部署為一體的綜合性工具,DevOps中常提到CI/CD(自動化構建、部署),但它本身是不提供構建、發布和部署的功能,而是可以在其上安裝插件的方式與其他構建、發布、部署工具形成連動,它更像是一個集成能力特別強的調度、協調工具,借助于它的這種特性,現在通常的做法是用戶提交代碼到版本倉庫(GitHub、GitLab),Jenkins定期從倉庫中獲取最新代碼并調用打包工具進行項目構建,構建成功后將程序包寫入到docker鏡像推送到鏡像服務器,進而通知應用服務器拉取鏡像文件啟動應用。當然中間的流程根據實際的情況有所不同,比如構建war包部署到tomcat服務器中,亦或者Android 應用構建apk包發布到應用商店,供下載驗證。
限于篇幅的原因,沒有對各類構建工具進行更詳細的說明和操作展示,自動化構建、發布部署的產品也不止這些,GitLab的runner也能實現類似的功能效果,本文的這些將會在后續分別進行深入更細致的介紹。本文更希望透過工具本身了解工具設計的思路和原則,并盡可能的將這些思路用在我們的產品研發以及處理問題上。
文中提到的這些工具都是被廣泛使用、經得住使用考驗的好產品,首先它們都是立足于解決實際工作中迫切的問題,其次操作使用較友好,另外設計的產品通用性較強,不是陷于某一類具體的問題,而是從更廣泛的角度抽取出本質性的解決方案。再者具有較好的兼容性,特別是Jenkins,能夠與主流開發過程很好的契合,很好的打通、解決了一連串構建、發布、部署的壁壘,它的設計理念不是什么都由我自己來做,而是提供對接的方式將成熟好用的產品嵌合進來,形成一個更強大的“航空母艦”平臺。就好像蘋果公司生產的iPhone,手機的零件都不蘋果自己生產,而是集眾人之所長充分發揮其特性,以更流暢、更順滑的方式將所有內容串聯起來,做成一直被別人模仿的引領性產品。這對我們的產品開發、設計甚至做事的方式都是很好的啟示。
總結
以上是生活随笔為你收集整理的ant构建项目迁移到gradle_自动化构建、自动化部署发布一览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据分析python够用吗_学数据分析不
- 下一篇: python闭包修改全局变量_pytho