Jenkins的主要開(kāi)發(fā)者是川口耕介, 是在MIT許可證下發(fā)布的自由軟件。
Jenkins是一個(gè)用Java編寫的開(kāi)源的持續(xù)集成工具。在與Oracle發(fā)生爭(zhēng)執(zhí)后,項(xiàng)目從Hudson項(xiàng)目獨(dú)立。
Jenkins提供了軟件開(kāi)發(fā)的持續(xù)集成服務(wù)。它運(yùn)行在Servlet容器中(例如Apache Tomcat)。
Jenkins支持軟件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以執(zhí)行基于Apache Ant和Apache Maven的項(xiàng)目,以及任意的Shell腳本和Windows批處理命令。
Jenkins功能
1、持續(xù)的軟件版本發(fā)布/測(cè)試項(xiàng)目。
2、監(jiān)控外部調(diào)用執(zhí)行的工作。
Jenkins概念
Jenkins是一個(gè)功能強(qiáng)大的應(yīng)用程序,允許持續(xù)集成和持續(xù)交付項(xiàng)目,無(wú)論用的是什么平臺(tái)。
這是一個(gè)免費(fèi)的開(kāi)源項(xiàng)目,可以處理任何類型的構(gòu)建或持續(xù)集成。集成Jenkins可以用于一些測(cè)試和部署技術(shù)。Jenkins是一種軟件允許持續(xù)集成。
Jenkins目的
① 持續(xù)、自動(dòng)地構(gòu)建/測(cè)試軟件項(xiàng)目。
② 監(jiān)控軟件開(kāi)發(fā)流程,快速問(wèn)題定位及處理,提高開(kāi)發(fā)效率。
Jenkins特性
① 開(kāi)源的java語(yǔ)言開(kāi)發(fā)持續(xù)集成工具,支持CI,CD。
② 易于安裝部署配置:可通過(guò)yum安裝,或下載war包以及通過(guò)docker容器等快速實(shí)現(xiàn)安裝部署,可方便web界面配置管理。
③ 消息通知及測(cè)試報(bào)告:集成RSS/E-mail通過(guò)RSS發(fā)布構(gòu)建結(jié)果或當(dāng)構(gòu)建完成時(shí)通過(guò)e-mail通知,生成JUnit/TestNG測(cè)試報(bào)告。
④ 分布式構(gòu)建:支持Jenkins能夠讓多臺(tái)計(jì)算機(jī)一起構(gòu)建/測(cè)試。
⑤ 文件識(shí)別:Jenkins能夠跟蹤哪次構(gòu)建生成哪些jar,哪次構(gòu)建使用哪個(gè)版本的jar等。
⑥ 豐富的插件支持:支持?jǐn)U展插件,你可以開(kāi)發(fā)適合自己團(tuán)隊(duì)使用的工具,如git,svn,maven,docker等。
產(chǎn)品發(fā)布流程
產(chǎn)品設(shè)計(jì)成型 -> 開(kāi)發(fā)人員開(kāi)發(fā)代碼 -> 測(cè)試人員測(cè)試功能 -> 運(yùn)維人員發(fā)布上線
持續(xù)集成 持續(xù)交付 持續(xù)布署 (CI/CD)
持續(xù)集成(Continuous Integration),一種軟件工程流程,將所有工程師對(duì)于軟件的工作復(fù)本,每天集成數(shù)次到共用主線(mainline)上。
這個(gè)名稱最早由葛來(lái)迪·布區(qū)(Grady Booch)在他的布區(qū)方法中提出,但是他并沒(méi)有提到要每天集成數(shù)次。 之后成為極限編程(extreme
programming,縮寫為XP)的一部分。在測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)的作法中,通常還會(huì)搭配自動(dòng)單元測(cè)試。
持續(xù)集成的提出,主要是為了解決軟件進(jìn)行系統(tǒng)集成時(shí)面臨的各項(xiàng)問(wèn)題,極限編程稱這些問(wèn)題為集成地獄(integration hell)。
持續(xù)集成主要是強(qiáng)調(diào)開(kāi)發(fā)人員提交了新代碼之后,立刻進(jìn)行構(gòu)建、(單元)測(cè)試。根據(jù)測(cè)試結(jié)果,確定新代碼和原有代碼能否正確地集成在一起。
簡(jiǎn)單來(lái)講就是:頻繁地(一天多次)將代碼集成到主干。
持續(xù)集成目的在產(chǎn)生以下效益如:
? 及早發(fā)現(xiàn)集成錯(cuò)誤且由于修訂的內(nèi)容較小所以易于追蹤,這可以節(jié)省項(xiàng)目的時(shí)間與成本。
? 避免發(fā)布日期的前一分鐘發(fā)生混亂,當(dāng)每個(gè)人都會(huì)嘗試為他們所造成的那一點(diǎn)點(diǎn)不兼容的版本做檢查。
? 當(dāng)單元測(cè)試失或發(fā)生錯(cuò)誤,若開(kāi)發(fā)人員需要在不除錯(cuò)的情況下還原代碼庫(kù)到一個(gè)沒(méi)有問(wèn)題的狀態(tài),只需要放棄一小部分的更改 (因?yàn)榧傻拇螖?shù)頻繁)。
? 讓 “最新” 的程序可保持可用的狀態(tài)供測(cè)試、展示或發(fā)布用。
? 頻繁的提交代碼會(huì)促使開(kāi)發(fā)人員創(chuàng)建模塊化,低復(fù)雜性的代碼。
? 防止分支大幅偏離主干。如果不是經(jīng)常集成,主干又在不斷更新,會(huì)導(dǎo)致以后集成的難度變大,甚至難以集成。
持續(xù)交付(Continuous Delivery),
是一種軟件工程手法,讓軟件產(chǎn)品的產(chǎn)出過(guò)程在一個(gè)短周期內(nèi)完成,以保證軟件可以穩(wěn)定、持續(xù)的保持在隨時(shí)可以釋出的狀況。
它的目標(biāo)在于讓軟件的構(gòu)建、測(cè)試與釋出變得更快更頻繁。這種方式可以減少軟件開(kāi)發(fā)的成本與時(shí)間,減少風(fēng)險(xiǎn)。
持續(xù)交付在持續(xù)集成的基礎(chǔ)上,將集成后的代碼部署到更貼近真實(shí)運(yùn)行環(huán)境的「類生產(chǎn)環(huán)境」(production-like environments)中。
比如,我們完成單元測(cè)試后,可以把代碼部署到連接數(shù)據(jù)庫(kù)的Staging 環(huán)境中更多的測(cè)試。如果代碼沒(méi)有問(wèn)題,可以繼續(xù)手動(dòng)部署到生產(chǎn)環(huán)境中。
持續(xù)部署(Continuous Deployment),是持續(xù)交付的下一步,指的是代碼通過(guò)評(píng)審以后,自動(dòng)部署到生產(chǎn)環(huán)境。
持續(xù)部署即在持續(xù)交付的基礎(chǔ)上,把部署到生產(chǎn)環(huán)境的過(guò)程自動(dòng)化。
簡(jiǎn)單總結(jié)
持續(xù)集成(Continuous Integration, CI): 代碼合并,構(gòu)建,部署,測(cè)試都在一起,不斷地執(zhí)行這個(gè)過(guò)程,并對(duì)結(jié)果反饋。
持續(xù)交付(Continuous Deployment, CD): 將產(chǎn)品部署到測(cè)試環(huán)境、預(yù)生產(chǎn)環(huán)境, 手動(dòng)(選擇性的)布署到生產(chǎn)環(huán)境?!?/strong>
持續(xù)部署(Continuous Delivery, CD): 將最終產(chǎn)品自動(dòng)布署到生成環(huán)境, 給用戶使用。
持續(xù)交付與持續(xù)部署
持續(xù)交付意味著所有的變更都可以被部署到生產(chǎn)環(huán)境中,但是出于業(yè)務(wù)考慮,可以選擇不部署, 人為控制。
持續(xù)部署意味著所有的變更都會(huì)被自動(dòng)部署到生產(chǎn)環(huán)境中,自動(dòng)部署。 如果要實(shí)施持續(xù)部署,必須先實(shí)施持續(xù)交付.
持續(xù)交付與 DevOps
持續(xù)交付與DevOps的含義很相似, 所以經(jīng)常被混淆, 但是它們是不同的兩個(gè)概念。 DevOps的范圍更廣, 它以文化變遷為中心,
特別是軟件交付過(guò)程所涉及的多個(gè)團(tuán)隊(duì)之間的合作(開(kāi)發(fā),運(yùn)維,QA,管理部門等), 并且將軟件交付的過(guò)程自動(dòng)化。
持續(xù)交付是一種自動(dòng)化交付的手段,關(guān)注點(diǎn)在于將不同的過(guò)程集中起來(lái),并且更快、更頻繁地執(zhí)行這些過(guò)程。
因此,DevOps可以是持續(xù)交付的一個(gè)產(chǎn)物,持續(xù)交付直接匯入DevOps。
參考: What is DevOps? | Opensource.com
實(shí)現(xiàn)CI/CD可分為以下五步:
CI/CD 框架
源代碼控制管理
自動(dòng)化構(gòu)建工具
應(yīng)用服務(wù)器
代碼覆蓋測(cè)試
CI/CD 框架
CI/CD 工具有很多,其中Jenkins是應(yīng)用最為廣泛的一種。 Jenkins,
是一個(gè)基于 Java 的 MIT 許可下的開(kāi)源 CI/CD
工具,它是推廣 DevOps 運(yùn)動(dòng)的工具,并已成為了事實(shí)標(biāo)準(zhǔn)。
源代碼控制管理
CI/CD 工具與源代碼控制管理(SCM)工具集成是最佳實(shí)踐之一。 在眾多的 SCM 工具中, Git 是最標(biāo)準(zhǔn)恰當(dāng)?shù)?。在此極力推薦使用Git。
自動(dòng)化構(gòu)建工具
有了 SCM之后,我們可以很好的管理我們的源代碼了,但要想讓它成為一個(gè)網(wǎng)頁(yè)應(yīng)用,還要將其編譯并打包成可部署的包或可執(zhí)行程序(解釋類語(yǔ)言不用)。
自動(dòng)化構(gòu)建工具的目標(biāo):將源代碼構(gòu)建成某種想要的格式,并且將清理、編譯、測(cè)試、部署到某個(gè)位置這些任務(wù)自動(dòng)化。
構(gòu)建工具會(huì)根據(jù)編程語(yǔ)言的不同而不同,下面是一些常用語(yǔ)言對(duì)應(yīng)的開(kāi)源構(gòu)建工具: Java: Maven, Ant, Gradle, Bazel
JavaScript: Grunt, Gulp Ruby: Buildr, Rake Python: A-A-P, SCons,
BitBake C#: Cake …
應(yīng)用服務(wù)器
構(gòu)建出應(yīng)用之后,還需要應(yīng)用服務(wù)器來(lái)發(fā)布我們的應(yīng)用,以下為常見(jiàn)的網(wǎng)頁(yè)應(yīng)用服務(wù)器: Java:Tomcat, Jetty, WildFly
… Python: Django, Tornado … JavaScript: Node.js
代碼覆蓋測(cè)試
實(shí)現(xiàn)代碼測(cè)試件可能是另一個(gè)麻煩的需求,但是開(kāi)發(fā)者需要盡早地捕捉程序中的所有錯(cuò)誤并提升代碼質(zhì)量來(lái)保證最終用戶滿意度。
幸運(yùn)的是,這里有許多開(kāi)源工具來(lái)測(cè)試你的代碼并提出改善質(zhì)量的建議。甚至更好的,大部分 CI/CD 工具能夠集成這些工具并將測(cè)試過(guò)程自動(dòng)化進(jìn)行。
代碼測(cè)試分為兩個(gè)部分:“代碼測(cè)試框架”幫助進(jìn)行編寫與運(yùn)行測(cè)試,“代碼質(zhì)量改進(jìn)工具”幫助提升代碼的質(zhì)量。
代碼測(cè)試框架:
Java: JUnit, EasyMock, Mockito, PowerMock Python: Pytest, Hypothesis, Tox
代碼質(zhì)量改進(jìn)工具:
Java: Cobertura, CodeCover, Emma, JaCoCo Python: Coverage.py,
Hypothesis, Tox JavaScript: Jasmine, Karma, Mocha, Jest
————————————————
版權(quán)聲明:本文為CSDN博主「wenqing_ruyu」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wenqing_ruyu/article/details/126067740
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)