Jenkins自動化部署實現原理
Jenkins 概念
Jenkins是一個功能強大的應用程序,允許持續集成和持續交付項目(持續部署),無論用的是什么平台。這是一個免費的源代碼,可以處理任何類型的構建或持續集成。集成Jenkins可以用於一些測試和部署技術。
Jenkins 是一個可擴展的持續集成引擎。
Jenkins 目的
- 持續、自動地構建/測試軟件項目;
- 監控軟件開放流程,快速問題定位及處理;
- 監控一些定時執行的任務。
Jenkins 特性
- Java語言開發持續集成工具,支持CI,CD。
- 易於安裝部署配置:
- 可通過yum安裝,或下載war包以及通過docker容器等快速實現安裝部署;
- 可方便web界面配置管理(所有配置都是通過其提供的web界面實現);
- 可直接把Jenkins.war部署到servlet容器,不需要數據庫支持。
- 消息通知及測試報告:
- 集成RSS/E-mail通過RSS發布構建結果或當構建完成時通過e-mail通知;
- 生成JUnit/TestNG測試報告。
- 分布式構建:
- 支持Jenkins能夠讓多台計算機一起構建/測試。
- 文件識別:
- Jenkins能夠跟蹤哪次構建生成哪些jar,哪次構建使用哪個版本的jar等。
- 豐富的插件支持:
- 支持擴展插件,你可以開發適合自己團隊使用的工具,如git,svn,maven,docker等。
Jenkins 由來
CI/CD持續集成/持續部署
持續集成(Continuous integration)是一種軟件開發實踐,即團隊開發成員經常集成它們的工作,通過每個成員每天至少集成一次,也就意味着每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡早地發現集成錯誤。
持續部署(continuous deployment)是通過自動化的構建、測試和部署循環來快速交付高質量的產品。某種程度上代表了一個開發團隊工程化的程度,畢竟快速運轉的互聯網公司人力成本會高於機器,投資機器優化開發流程化相對也提高了人的效率,讓 engineering productivity 最大化。
持續交付(英語:Continuous delivery,縮寫為 CD),是一種軟件工程手法,讓軟件產品的產出過程在一個短周期內完成,以保證軟件可以穩定、持續的保持在隨時可以釋出的狀況。它的目標在於讓軟件的建置、測試與釋出變得更快以及更頻繁。這種方式可以減少軟件開發的成本與時間,減少風險。
與DevOps的關系
持續交付與DevOps的含義很相似,所以經常被混淆。但是它們是不同的兩個概念。DevOps的范圍更廣,它以文化變遷為中心,特別是軟件交付過程所涉及的多個團隊之間的合作(開發、運維、QA、管理部門等),並且將軟件交付的過程自動化。另壹方面,持續交付是壹種自動化交付的手段,關注點在於將不同的過程集中起來,並且更快、更頻繁地執行這些過程。因此,DevOps可以是持續交付的壹個產物,持續交付直接匯入DevOps;
與持續部署的關系
有時候,持續交付也與持續部署混淆。持續部署意味着所有的變更都會被自動部署到生產環境中。持續交付意味着所有的變更都可以被部署到生產環境中,但是出於業務考慮,可以選擇不部署。如果要實施持續部署,必須先實施持續交付。
為什么要用 Jenkins
目前持續集成(CI)已成為當前許多軟件開發團隊在整個軟件開發生命周期內側重於保證代碼質量的常見做法。它是一種實踐,旨在緩和和穩固軟件的構建過程。並且能夠幫助您的開發團隊應對如下挑戰:
- 軟件構建自動化 :
- 配置完成后,CI系統會依照預先制定的時間表,或者針對某一特定事件,對目標軟件進行構建。
- 構建可持續的自動化檢查 :
- CI系統能持續地獲取新增或修改后簽入的源代碼,也就是說,當軟件開發團隊需要周期性的檢查新增或修改后的代碼時,CI系統會不斷確認這些新代碼是否破壞了原有軟件的成功構建。這減少了開發者們在檢查彼此相互依存的代碼中變化情況需要花費的時間和精力(說直接一點也是錢啊,呵呵)。
- 構建可持續的自動化測試 :
- 構建檢查的擴展部分,構建后執行預先制定的一套測試規則,完成后觸發通知(Email,RSS等等)給相關的當事人。
- 生成后后續過程的自動化 :
- 當自動化檢查和測試成功完成,軟件構建的周期中可能也需要一些額外的任務,諸如生成文檔、打包軟件、部署構件到一個運行環境或者軟件倉庫。這樣,構件才能更迅速地提供給用戶使用。
部署一個CI系統需要的最低要求是,一個可獲取的源代碼的倉庫,一個包含構建腳本的項目。
Jenkins的目標
Jenkins的主要目標是監控軟件開發流程,快速顯示問題。所以能保證開發人員以及相關人員省時省力提高開發效率。
CI系統在整個開發過程中的主要作用是控制:
當系統在代碼存儲庫中探測到修改時,它將運行構建的任務委托給構建過程本身。如果構建失敗了,那么CI系統將通知相關人員,然后繼續監視存儲庫。它的角色看起來是被動的;但它確能快速反映問題。
特別是它具有以下優點:
- l Jenkins一切配置都可以在web界面上完成。有些配置如MAVEN_HOME和Email,只需要配置一次,所有的項目就都能用。當然也可以通過修改XML進行配置。
- l 支持Maven的模塊(Module),Jenkins對Maven做了優化,因此它能自動識別Module,每個Module可以配置成一個job。相當靈活。
- l 測試報告聚合,所有模塊的測試報告都被聚合在一起,結果一目了然,使用其他CI,這幾乎是件不可能完成的任務。
- l 構件指紋(artifact fingerprint),每次build的結果構件都被很好的自動管理,無需任何配置就可以方便的瀏覽下載。
Jenkins的主要特點
* 容易安裝,只需要執行Java -jar jenkins.war, 或者直接部署到一個servlet container中,例如tomcat。不需要安裝,不需要數據庫的支持。
* 容易配置,jenkins可以完全地通過友好的web GUI來配置,且配置頁面支持配置項的錯誤檢查和很好的在線幫助。不需要手動地編輯xml的配置文件,但是jenkins也支持手動修改xml配置文件。
* 項目源碼修改的檢測,jenkins能夠從項目的Subversion/CVS生成最近修改的集合列表,且改方式非常有效,不會增加Subversion/CVS Repository的負載。
* 可讀的永久的鏈接生成,jenkins對於大部分pages都生成清楚的可讀的永久的鏈接,例如''latest build"/"latest successful build",因此可以容易地在其他的地方引用jenkins的生成的pages。
* RSS/EMail/IM集成,可以通過RSS,EMail或IM來實時地監視build的失敗。
* Build完成后仍然可以tag,支持在build完成后tag或重tag。
* Junit/TestNG 測試報告,能夠很好地顯示各種測試的報告,且可以生成失敗的趨向圖。
* 分布式build,jenkins能夠分發build/test的負載到多台機器,能夠更好地利用硬件資源,提高build的時間。
* 文件標識,jenkins可以標識build產生的文件,例如jars。
* 插件支持,jenkins可以通過第三方的插件來擴展。
* 跨平台,支持幾乎所有的平台,例如Windows,Ubuntu/Debian,Red Hat/Fedora/CentOS,Mac OS X,openSUSE,FreeBSD,OpenBSD,Solaris/OpenIndiana.Gentoo。
參考鏈接:
https://blog.csdn.net/zhishidi/article/details/118082509
https://blog.csdn.net/Soinice/article/details/84062336