持续集成、持续交付(CI/CD)开篇,先来唠唠嗑
前言
現(xiàn)在稍微有點規(guī)模的系統(tǒng),很多都是采用分布式/微服務(wù)架構(gòu),將一個大系統(tǒng)拆分為很多個功能模塊進(jìn)行開發(fā)、測試、發(fā)布、管理等,如果全部流程都采用人工的形式進(jìn)行的話,效率肯定是超級不高效滴。而且現(xiàn)在很多項目都采用極限編程的模式,將原有比較復(fù)雜的過程分解為更小的周期進(jìn)行管理,將開發(fā)的成果快速的體現(xiàn)給用戶,如果單純?nèi)斯げ僮?#xff0c;就需要大量的人力成本才能達(dá)到要求(頻繁的開發(fā)、測試、部署是很耗時的),另外很容出錯。所以自動化的集成和交付是很有必要的,接下來就開始這系列的學(xué)習(xí)和分享,小伙伴們一起哦。
極限編程(ExtremeProgramming,簡稱XP)是一個輕量級的、靈巧的軟件開發(fā)方法;同時它也是一個非常嚴(yán)謹(jǐn)和周密的方法;XP是一種近螺旋式的開發(fā)方法,它將復(fù)雜的開發(fā)過程分解為一個個相對比較簡單的小周期;通過積極的交流、反饋以及其它一系列的方法,開發(fā)人員和客戶可以非常清楚開發(fā)進(jìn)度、變化、待解決的問題和潛在的困難等,并根據(jù)實際情況及時地調(diào)整開發(fā)過程。---摘自百度百科
正文
1. CI/CD簡介
需求變更頻繁、開發(fā)人員時間不夠用、傳統(tǒng)人工運維費事費力是項目遇到的三大難題,所以各種模式應(yīng)運而生,比如常聽見的DevOps、CI/CD、敏捷開發(fā)等,其實最終的目的就是通過自動化的工具協(xié)作和溝通來完成軟件的生命周期管理,從而更快、更頻繁地交付更穩(wěn)定的軟件產(chǎn)品,盡可能降低開發(fā)成本,滿足客戶需求。
有了自動化就不用加班了?想多了,只是減少不必要的時間浪費,節(jié)省出來時間還得去做其他的更有意義的事,所以該加的還加。
1.1 CI持續(xù)集成
CI(Continuous integration)持續(xù)集成:根據(jù)開發(fā)情況,隨時將功能集成到整個項目中。
有點規(guī)模的系統(tǒng)都會分解為很多模塊,每個模塊又會分解為很多小功能,每個小功能還會分解成很多小操作,而這些功能模塊可能都是不同的開發(fā)人員進(jìn)行開發(fā),持續(xù)集成的目的就是開發(fā)人員根據(jù)功能的完成情況,可以隨時將對應(yīng)的開發(fā)成果合并到整體項目中,盡早的與其他模塊集成并進(jìn)行測試,盡早發(fā)現(xiàn)問題并解決。
1.2 CD持續(xù)交付
CD(Continuous delivery)持續(xù)交付:根據(jù)功能集成情況,小周期內(nèi)形成小版本交付,快速迭代,讓用戶盡快的體驗到新功能。
項目開發(fā)過程中,需求變更是避免不了的,通過短周期的小版本交付,實時獲取用戶反饋,有針對性的快速優(yōu)化和完善,減少不必要的返工和大的需求變動,還可以降低累積功能交付的風(fēng)險。另外一個角度來說,讓用戶快速使用到新功能,用戶的體驗感也不一樣(用戶就是上帝)。
2. CI/CD實操流程
實際工作中,其實通俗點說就是將原有的部分人為參與的步驟借助自動化工具進(jìn)行管理,使得整個流程自動化、標(biāo)準(zhǔn)化,降低人為操作錯誤的風(fēng)險。人為操作和自動化操作流程如下:
人為操作
上圖簡述:
1.開發(fā)人員將功能代碼推送的服務(wù)器;
2.經(jīng)過多輪測試,直到可發(fā)布;
3.運維人員拉取可發(fā)布代碼;
4.然后進(jìn)行打包;
5.最后發(fā)布到應(yīng)用服務(wù)器上;
當(dāng)然也有開發(fā)人員把活全干了的,但不管咋弄,假如發(fā)布的功能比較多或是發(fā)布比較頻繁,那對應(yīng)的人員工作就只能干發(fā)布這一件事了,而且人為操作出錯的概率比較高。
自動化操作
上圖簡述:
1.開發(fā)人員將功能代碼推送的服務(wù)器,推送正式代碼前會先自動化測試和人工測試(圖中沒體現(xiàn));
2.版本控制服務(wù)器收到代碼的同時,會觸發(fā)對應(yīng)的鉤子程序(或定時程序) ;
3.通知持續(xù)集成工具(Jenkins,Hudson等),工具會自動先使用安裝的git/svn插件從版本控制服務(wù)器上拉取源代碼;
4.工具會使用編譯/打包插件將拉取下來的代碼進(jìn)行自動編譯打包;
5.工具最后將打包的程序發(fā)布到應(yīng)用服務(wù)器上;(這里根據(jù)打包的形式不一樣,發(fā)布方式也不一樣;比如直接運行,或者是鏡像方式,又或者是集成K8S,后續(xù)我們會逐步實操);這步使用插件根據(jù)部署場景不一樣,使用的也不一樣。
6.在自動化期間如果發(fā)生錯誤,可以配置通知,相關(guān)人員會及時進(jìn)行處理,從而快速響應(yīng),快速迭代。
相比人工操作,開發(fā)人員只需提交代碼,后續(xù)就基本自動化了,這樣是不是很給力。至于要不要這樣做,主要還是看業(yè)務(wù)和制度。
3. Jenkins 簡介及安裝
關(guān)于持續(xù)集成的工具有Jenkins,Hudson,gitLab-runner等,大家常用的就是Jenkins,接一下來就以它為工具的前提下進(jìn)行實操演示。
3.1 Jenkins簡介
Jenkins是一個開源的軟件項目,是基于Java開發(fā)的一種持續(xù)集成工具,幫助開發(fā)人員自動構(gòu)建項目;Jenkins通過插件化的方式可以集成不同開發(fā)語言、不同版本控制工具、不同流程部署等場景。
3.2 Jenkins安裝
這里還是采用Docker的方式進(jìn)行安裝,采用的是云服務(wù)器(Linux),具體步驟如下:
執(zhí)行Docker命令進(jìn)行安裝
docker?run?-p?8080:8080?-p?5000:5000?--name?jenkins?\ -u?root?\ -v?/mydata/jenkins_home:/var/jenkins_home?\ -d?jenkins/jenkins:lts命令解析:
-p 8080:8080 -p 5000:5000 指定主機和容器的映射端口;
--name jenkins 指定容器名為jenkins;
-u root 指定用戶,這里root用戶下;
-v /mydata/jenkins_home:/var/jenkins_home 掛載目錄;
-d 是以后臺形式啟動容器;最后一串是代表使用的鏡像。
訪問8080端口看效果,如下:
查找初始密碼
命令方式,如下:
docker?logs?jenkins?#?看容器的啟動日志進(jìn)入容器內(nèi)部看初始密碼文件的方式,如下:
安裝插件
登錄之后就提示進(jìn)行插件安裝,剛開始直接安裝推薦插件即可;
接下來就是等待插件安裝完成即可,如果安裝失敗,就多試幾次。
新建用戶
推薦插件安裝完畢之后,會出現(xiàn)新建用戶的界面,根據(jù)自己需要創(chuàng)建屬于自己的新賬號,如下:
配置地址,這個地址先按默認(rèn)的來,后續(xù)用到了我們再來解釋
安裝完成
總結(jié)
其實對于項目周期的管理越是簡單高效越好,不要盲目使用工具;就比如小小的單體程序,各種持續(xù)集成、部署工具都用上,那就是自己給自己添堵,一定要以解決問題為目的。
到這就先把Jenkins環(huán)境搭建好,后續(xù)的文章會陸續(xù)分享,從代碼到最后容器化,咱們一步一步的來;之后的案例將會使用碼云作為代碼的版本控制服務(wù)器,相對github來說比較快,不過原理都差不多。關(guān)注“Code綜藝圈”,和我一起學(xué)習(xí)吧;
總結(jié)
以上是生活随笔為你收集整理的持续集成、持续交付(CI/CD)开篇,先来唠唠嗑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 05Prism WPF 入门实战 - N
- 下一篇: 聊一聊声明式接口调用与Nacos的结合使