為什么要做持續(xù)集成
- 自動化冒煙測試
- 自動化用例運行
- 自動遍歷測試運行
- 兼容性測試
核心依賴資源
- 設(shè)備集群:真機占遥、模擬器、云端設(shè)備
- 管理平臺:STF且叁、Jenkins、Selenium Grid
- 測試用例:遍歷工具、測試用例
為什么要持續(xù)集成與持續(xù)部署
聲明:以下內(nèi)容轉(zhuǎn)自https://zhuanlan.zhihu.com/p/72399262
DevOps、持續(xù)集成、持續(xù)交付、持續(xù)部署什荣、敏捷等詞語大家應(yīng)該都耳熟能詳了,說到底就是快速交付價值怀酷,從工程上稻爬、管理上、組織上蜕依、工具上來提高效率桅锄,打造可靠的、快速的產(chǎn)品(項目)交付過程样眠。本書將圍繞項目管理友瘤、自動化部署、自動化發(fā)布檐束、自動化測試辫秧、容器云來實現(xiàn)持續(xù)集成、持續(xù)交付及持續(xù)部署被丧,因為它不是一本理論圖書盟戏,不打算大談道理绪妹,我們將直接談?wù)摮掷m(xù)集成、持續(xù)交付柿究、持續(xù)部署的價值邮旷,拋出問題,說思路蝇摸,講方案婶肩,講實際操作。希望能夠幫助廣大讀者快速在企業(yè)落地持續(xù)集成貌夕、持續(xù)交付與持續(xù)部署律歼。
1.1CI&CD 的價值
持續(xù)集成(Continuous Integration,CI)是一種軟件開發(fā)實踐啡专。在持續(xù)集成中苗膝,團隊成員頻繁集成他們的工作成果,一般每人每天至少集成一次植旧,也可以多次。每次集成會經(jīng)過自動構(gòu)建(包括靜態(tài)掃描离唐、安全掃描病附、自動測試等過程)的檢驗,以盡快發(fā)現(xiàn)集成錯誤亥鬓。許多團隊發(fā)現(xiàn)這種方法可以顯著減少集成引起的問題完沪,并可以加快團隊合作軟件開發(fā)的速度(以上引用自Martin Fowler 對持續(xù)集成的定義)。
持續(xù)交付(Continuous Delivery)是指頻繁地將軟件的新版本交付給質(zhì)量團隊或者用戶嵌戈,以供評審覆积,如果評審?fù)ㄟ^,代碼就進入生產(chǎn)階段熟呛。
持續(xù)部署(Continuous Deployment)是持續(xù)交付的下一步宽档,指的是代碼通過評審以后,自動部署到生產(chǎn)環(huán)境中庵朝。
通過上面的定義我們不難發(fā)現(xiàn)吗冤,持續(xù)突出的就是一個快字,商業(yè)軟件的快速落地需求推動了軟件工程的發(fā)展九府∽滴粒可持續(xù)的、快速迭代的軟件過程是當今主流開發(fā)規(guī)約侄旬。尤其在互聯(lián)網(wǎng)行業(yè)肺蔚,快速響應(yīng)即是生命線。從一個想法到產(chǎn)品落地都處在沖鋒的過程中儡羔,機會稍縱即逝宣羊。響應(yīng)用戶反饋也是萬分敏捷璧诵,早晨的反饋在當天就會上線發(fā)布,快得讓用戶感覺倍受重視段只∪“快”已經(jīng)成為商業(yè)競爭力。這一切都要求企業(yè)具備快速響應(yīng)的能力赞枕,這正是推動持續(xù)集成澈缺、持續(xù)交付、持續(xù)部署的動力炕婶。
產(chǎn)品或者項目的參與者應(yīng)該能夠深刻體會到團隊協(xié)作時姐赡,工作交接(系統(tǒng)集成)部分最容易出問題,會消耗大量的溝通成本與時間成本柠掂,直接拖慢進度项滑。所以,一個行之有效的項目管理過程(包括溝通管理涯贞、流程管理)在大型項目中效果明顯枪狂。當前敏捷開發(fā)是主流,持續(xù)集成宋渔、持續(xù)交付與持續(xù)部署正好能夠幫助高效地實施敏捷過程州疾,促進開發(fā)、運維和質(zhì)量保障(QA)部門之間的溝通皇拣、協(xié)作與整合严蓖。
1.2 CI&CD 帶來的變化
通常把開發(fā)工作過程分為編碼、構(gòu)建氧急、集成颗胡、測試、交付吩坝、部署幾個階段(見圖1-1)毒姨,持續(xù)集成、持續(xù)交付钉寝、持續(xù)部署剛好覆蓋這些階段手素。從提高效率上來講,對每個階段的優(yōu)化都可以縮短軟件交付時間瘩蚪。持續(xù)集成泉懦、持續(xù)交付及持續(xù)部署的過程即是一個軟件開發(fā)優(yōu)化過程。
墨菲定律大家都不陌生疹瘦,越是擔心什么就越會發(fā)生什么崩哩;在多團隊協(xié)作時,比如系統(tǒng)對接時,我們都會擔心對接是否順利邓嘹,往往也不枉我們擔心酣栈,時常我們會被集成折磨得焦頭爛額。有很多團隊只是擔心汹押,并沒有拿出有效的措施去避免這種事情發(fā)生矿筝,以至于延長了交付時間。既然擔心棚贾,我們何不及早集成窖维,把問題先暴露出來?
目前多數(shù)公司都已經(jīng)使用了版本管理工具來管理源碼妙痹,比如GitLab铸史、SVN 等版本管理工具。在版本管理這一塊怯伊,公司會根據(jù)自己的實際情況來制訂版本管理辦法琳轿。對于持續(xù)集成來說,業(yè)內(nèi)建議只維護一個源碼倉庫耿芹,降低版本管理的復(fù)雜度崭篡。開發(fā)人員持續(xù)提交自己的修改,自動觸發(fā)編譯吧秕,自動集成媚送,自動進行自動化的測試,及早反饋集成過程中的問題寇甸,就能更好地防止出現(xiàn)平時不集成、集成就出問題的現(xiàn)象疗涉。
通過自動化的持續(xù)集成拿霉,把管理流程固化;保證集成的有序性咱扣、可靠性绽淘;減少版本發(fā)布的不合規(guī)性(開發(fā)或者測試手動打包,可能一天打多個包闹伪,更新多次沪铭,測試不充分),保證版本可控偏瓤,問題可追溯(至于哪個版本出現(xiàn)的問題杀怠,可以回溯)。
一旦把這種持續(xù)集成的過程固定下來厅克,形成一個自動化過程赔退,就具備了持續(xù)集成的能力,軟件交付的可靠性就大大增強,這無形也是一種競爭力硕旗。這種競爭力保證了集成的有序性窗骑、可靠性。過程的自動化拋棄了人工漆枚,降低了出錯率创译,提高了速度,自然會節(jié)省成本墙基。
1.3 CI&CD 實施現(xiàn)狀
在日常生活中處處都體現(xiàn)著一個“快”字软族,互聯(lián)網(wǎng)更是對快追求到極致。持續(xù)集成碘橘、持續(xù)交付互订、持續(xù)部署在互聯(lián)網(wǎng)行業(yè)更為廣泛。作者沒有統(tǒng)計哪些公司在用痘拆,只是圈子中朋友公司都實施了持續(xù)集成仰禽,具備持續(xù)交付能力。至于持續(xù)部署就沒這么廣泛了纺蛆,畢竟持續(xù)部署不僅僅是技術(shù)問題吐葵,還涉及管理、營運等問題桥氏。尤其是一些金融企業(yè)温峭、大型國企,開發(fā)團隊外包字支,測試外包凤藏,運營半外包,安全要求高堕伪,很難快速實施揖庄。多數(shù)能夠在測試環(huán)境中建立起CI&CD就已經(jīng)很不錯了。
阿里云欠雌、騰訊云蹄梢、網(wǎng)易蜂巢等國內(nèi)云,都提供了從GitLab 下拉代碼富俄、編譯打包禁炒、單元測試、鏡像制作霍比、容器發(fā)布的功能幕袱。這個過程實際上就是持續(xù)集成、持續(xù)交付的過程悠瞬,同時具有持續(xù)部署的能力凹蜂。基本上,持續(xù)集成玛痊、持續(xù)交付汰瘫、持續(xù)部署是一種服務(wù)能力,是云平臺必須具備的能力擂煞。
下面引自2017 年DevOps 現(xiàn)狀調(diào)查報告混弥。
統(tǒng)計資料顯示,DevOps 正在各個行業(yè)对省、各種規(guī)模的企業(yè)中落地蝗拿。DevOps 團隊的比例在2014 年是16%,在2015 年是19%蒿涎,在2016 年是22%哀托,在2017 年已經(jīng)增長到27%,越來越多的企業(yè)和團隊開始擁抱DevOps劳秋。圖1-2 是2017 年DevOps 現(xiàn)狀調(diào)查報告統(tǒng)計的從業(yè)分布情況仓手。
完整的報告可以從qcloudimg 網(wǎng)站下載。
在本書撰寫過程中2018 年DevOps 現(xiàn)狀調(diào)查報告也已經(jīng)出來玻淑,圖1-3 是精英級執(zhí)行團隊使用DevOps 后的效率嗽冒。精英級執(zhí)行團隊在以下幾個方面有著突出的表現(xiàn)。
1)代碼發(fā)布頻率高46 倍补履。
2)代碼從提交至發(fā)布的速度快2555 倍添坊。
3)故障變更率降低1/7。
4)事故恢復(fù)時間快2604 倍箫锤。
另外贬蛙,云計算持續(xù)增長(見圖1-4)。有17%的調(diào)查者仍然沒有使用云廠商的服務(wù)谚攒。AWS最受歡迎阳准,占比為52%,Azure 屈居次席五鲫,占比為34%。
1.4 CI&CD 技術(shù)棧
目前持續(xù)集成岔擂、持續(xù)交付位喂、持續(xù)部署在開源社區(qū)都是熱點,用戶可以方便地利用這些開源組件來構(gòu)建自己企業(yè)的持續(xù)集成乱灵、持續(xù)交付及持續(xù)部署平臺塑崖。
持續(xù)集成工具中以Jenkins 使用最為廣泛,由Jenkins 來作業(yè)化持續(xù)集成過程痛倚;利用GitLab來管理程序版本规婆;利用Gerrit 來做代碼審核;利用Sonar 進行代碼質(zhì)量掃描;利用JUnit 進行單元測試抒蚜;利用Docker compose 來構(gòu)建鏡像掘鄙;利用Docker 來部署容器;利用Kubernetes嗡髓、Rancher 等進行服務(wù)編排操漠。圖1-5 顯示了常見的CI&CD 技術(shù)棧。
后續(xù)講解CI&CD 落地時會運用到其中的一些技術(shù)與工具饿这。當然浊伙,基本上都運用開源工具,這也有助于企業(yè)在落地時節(jié)省費用长捧。
1.5 大規(guī)模部署的煩惱
對于同樣的功能嚣鄙,在用戶量不同的系統(tǒng)中,工作量是完全不同的串结,后臺為性能考慮而設(shè)計的架構(gòu)完全不一樣哑子。對于CI&CD 也是如此,小規(guī)模的很容易奉芦,配幾個作業(yè)就可以完成工作赵抢,但對于大規(guī)模的CI&CD,一旦系統(tǒng)數(shù)量声功、實例數(shù)量上去后各種問題就都來了烦却。下面列舉幾個主要的問題。
1)更新問題先巴。更新一次要耗費大量精力其爵,很多企業(yè)都是晚上更新,員工得通宵加班伸蚯,還不能保證更新沒問題摩渺,不具備快速大批量部署的能力。
2)部署包(jar 包剂邮、war 包摇幻、ear 包等)的管理問題。為了保證版本可追溯挥萌,出錯后能夠回滾绰姻,我們需要保存各個歷史版本,而且方便下載引瀑。
3)版本的安全性狂芋。傳統(tǒng)上以Java 語言開發(fā)的系統(tǒng)多數(shù)以jar 包、war 包憨栽、ear 包的方式發(fā)布帜矾,容易被篡改(人為修改翼虫,傳輸過程不完整);通常我們用md5 來驗證完整性屡萤,但包與md5 對應(yīng)關(guān)系的管理并沒有系統(tǒng)化珍剑,往往在出問題后人工進行md5 驗證。
4)主機管理問題灭衷。系統(tǒng)部署到哪些機器上需要進行主機管理次慢?在部署時人工選擇部署到哪臺主機顯然不是一種明智的方式,能否自動進行調(diào)度翔曲?同時迫像,不會產(chǎn)生有些主機性能堪憂、有些主機空閑導(dǎo)致的負載不均情況瞳遍。
5)端口管理問題闻妓,在部署Java 項目時我們并不建議設(shè)置太多的JVM 內(nèi)存,因此一臺主機上往往能夠部署多個應(yīng)用實例掠械,同一臺機器上多個實例的開放端口就必須不一致由缆,于是端口又成了需要管理的資源。有人會說可以選用虛擬機猾蒂,一臺虛擬機上只部署一個實例均唉。當然,這也是可以的肚菠。實際上舔箭,多數(shù)企業(yè)也是這么做的。這種做法也有弊端蚊逢,虛擬機雖然幫助做了隔離层扶,但會損失一些主機性能;虛擬機要使用內(nèi)網(wǎng)IP烙荷,這樣IP 又成了稀有資源镜会,當部署多個實例時IP 會不夠用。
6)負載均衡管理問題终抽。不管是在主機上部署多個實例戳表,還是利用虛擬機來部署多個實例,在做集群時昼伴,都會通過代理(Nginx匾旭、Apache、LVS……)軟件來做負載均衡亩码,因此我們需要把各實例的訪問地址配置到負載器的配置文件中季率。實例數(shù)少的時候手工配置還可以接受野瘦,多了就沒法手工配置了描沟。當然飒泻,方法也會有,比如用Etcd+Confd+Nginx(HAProxy)來做服務(wù)發(fā)現(xiàn)吏廉,我們需要自己部署一套工具泞遗,并進行維護,復(fù)雜的框架提高了對運維人員的要求席覆。
7)服務(wù)伸縮問題史辙。當服務(wù)訪問量上去后,要能夠具備快速擴充的能力佩伤;當訪問量下去后聊倔,要能夠具備縮小服務(wù)規(guī)模的能力,收放自如生巡。這種彈性的服務(wù)能力顯然是通過工具來完成的耙蔑,手動完成是不可能的。
8)IP 管理問題孤荣。當大規(guī)模部署后甸陌,IP 資源會成為稀有資源,如何用更少的IP 來部署更多的服務(wù)盐股?IP 的分配及管理顯然不能人工完成钱豁,那樣效率太過低下,這就需要一個IP 管理工具疯汁。
如果有一個系統(tǒng)能夠一站式解決以上問題牲尺,那真是太完美了。因為沒有這樣的系統(tǒng)涛目,所以很多公司開發(fā)了他們的運維平臺秸谢,專門用來解決大規(guī)模部署問題。但對于中小公司來說霹肝,技術(shù)與人力投入往往受限估蹄,沒有這個能力、精力或者財力去建立一個智能的運維平臺沫换。但是我們可以利用開源工具臭蚁、開源技術(shù)來搭建一個相對完善的持續(xù)集成、持續(xù)部署體系讯赏。
1.6 實施云平臺化
虛擬化垮兑、云平臺化為大規(guī)模部署提供了方便,尤其是在硬件資源管理及網(wǎng)絡(luò)管理方面漱挎∠登梗互聯(lián)網(wǎng)的火熱更是推動了云的快速發(fā)展,基本上各大互聯(lián)網(wǎng)企業(yè)都已經(jīng)完成了云平臺化磕谅,生產(chǎn)力也在不斷提升私爷。以Docker 為代表的容器化技術(shù)出現(xiàn)后雾棺,云變得更靈活,容器化已經(jīng)成為大潮衬浑,Docker 也占據(jù)了容器市場的絕對份額捌浩。容器部署方式能夠滿足快速大批量部署的要求,充分利用物理機器資源工秩。以Docker 為例尸饺,Docker 容器技術(shù)讓應(yīng)用一次構(gòu)建,到處(物理機助币、虛擬機浪听、公有云、私有云眉菱、Windows 系統(tǒng)馋辈、Linux 系統(tǒng)等)可運行,加快了本地開發(fā)和構(gòu)建倍谜,實現(xiàn)了快速交付和部署迈螟;同時還可以在操作系統(tǒng)層面提供資源隔離服務(wù)。
為了提高服務(wù)水平尔崔,企業(yè)服務(wù)需要能夠快速水平擴展答毫,在系統(tǒng)設(shè)計層面也大舉采用SOA框架,這種框架天生適合使用容器大規(guī)模部署季春。當然洗搂,也存在一些問題,比如管理大量的服務(wù)實例成為一個挑戰(zhàn)载弄,運維耘拇、監(jiān)控、問題分析等變得復(fù)雜宇攻。那么如何管理這些容器呢惫叛?于是就產(chǎn)生了大量的容器管理工具,支持Docker 容器管理的工具使用得比較廣的有Swarm逞刷、Mesos嘉涌、Kubernetes、Rancher 等工具夸浅。這些工具能夠幫我們方便管理容器仑最,雖然有一些問題的解決方式并不完美,但這也給運維開發(fā)帆喇、測試開發(fā)提供了更多的想象空間與工作機會警医。目前容器管理工具Kubernetes 影響最大,但Kubernetes 的學習與運維成本相對較高坯钦,需要專業(yè)人士的支持预皇。目前國內(nèi)大型互聯(lián)網(wǎng)公司基本都基于Kubernetes 來管理大量容器损敷,包括BAT、京東等企業(yè)深啤。騰訊的藍鯨(DevOps)也基于Kubernetes,已經(jīng)開始市場化路星;淘寶的云效也是與藍鯨同類型的產(chǎn)品溯街。
對于中小型企業(yè)來說,上Kubernetes 顯得有點操之過急洋丐,需要有技術(shù)儲備與維護團隊呈昔,學習成本相對也會高一點,因此應(yīng)該選擇簡單的友绝、快速能夠落地的堤尾、能夠滿足企業(yè)要求的、有一定市場的工具迁客。當然郭宝,最好還是開源的,社區(qū)也支持的掷漱。所以我們選擇Rancher粘室,據(jù)說早期云效也是整合Rancher 的,作者也在基于Rancher 做整合卜范,利用Rancher 實現(xiàn)容器的管理衔统,利用Jenkins 構(gòu)建,利用GitLab 實現(xiàn)源碼管理海雪,再加上靜態(tài)掃描锦爵、自動化測試、性能測試奥裸、日志管理等功能险掀,整合成DevOps,足夠運行湾宙、管理上千個實例級別的容器實例迷郑。實際上,擁有DevOps 并且已經(jīng)容器化创倔,就相當于已經(jīng)擁有一個相對智能化的私有云平臺(不是真正意義上的云嗡害,并沒有對物理資源進行管理,抽象成服務(wù))畦攘。圖1-6 是作者早期開發(fā)的DevOps靜態(tài)架構(gòu)霸妹。
此平臺類似于一個私有云平臺,基本涵蓋了系統(tǒng)的生命周期:編譯知押、打包叹螟、發(fā)布鹃骂、測試、上線罢绽、運維畏线、下線。同時把硬件資源管理起來良价,這些硬件對用戶透明寝殴。平臺主要分3 層。
? 基礎(chǔ)組件層明垢,提供了存儲蚣常、網(wǎng)絡(luò)與運算功能。對于上層來說痊银,硬件只是一個服務(wù)而已抵蚊。
? 服務(wù)組件層,提供了運維與監(jiān)控功能溯革。對于大規(guī)模系統(tǒng)營運來說贞绳,系統(tǒng)監(jiān)控、問題診斷分析變得復(fù)雜致稀,必須在系統(tǒng)層面給予幫助熔酷,結(jié)合平臺能力,讓用戶分析問題變得簡單豺裆。那種從服務(wù)器上看日志的老舊方式一去不復(fù)返了拒秘。
? DevOps 用戶層,直接面向運維人員臭猜,做到持續(xù)集成躺酒、持續(xù)交付、持續(xù)部署蔑歌,在平臺中完成各種測試羹应。支持多種形式的發(fā)布,減少上線風險次屠。
圖1-7 是上述平臺用到的技術(shù)棧园匹。下面對用到的部分工具進行簡單說明。
? Rancher:一個開源的企業(yè)級容器管理平臺劫灶。通過Rancher裸违,企業(yè)再也不必自己使用一系列的開源軟件去從頭搭建容器服務(wù)平臺。Rancher 提供了在生產(chǎn)環(huán)境中使用的管理Docker 和Kubernetes 的全棻净瑁化容器部署與管理平臺供汛。
? Jenkins:用于構(gòu)建管理,定義管理工作過程。
? Docker compose:一種定義編排容器的工具怔昨,以YAML 或者XML 的格式展示編排內(nèi)容雀久。
? Maven:源碼編譯工具。
? GitLab:源碼管理工具趁舀。
? Gerrit:代碼審核工具赖捌。
? Sonar:代碼靜態(tài)掃描工具。
? robot:自動化測試工具矮烹。
? Ceph:分布式存儲產(chǎn)品越庇。
? Spring Boot:DevOps 集成開發(fā)技術(shù)框架。
? React:門戶開發(fā)框架擂送。
? Redux:門戶開發(fā)框架。
? MySQL:數(shù)據(jù)庫唯欣。
? MyBatis:ORM 框架嘹吨。
? Kibana、Logstash境氢、Elastic:用于統(tǒng)一進行日志管理蟀拷、日志存儲、日志分析萍聊。
本書講到的CI&CD剛好是這個DevOps 的一個子集问芬,我們將圍繞上述架構(gòu)及技術(shù)棧展開,
本書不僅講解如何實現(xiàn)寿桨,還會結(jié)合實例展示如何落地此衅。這些對于大多數(shù)中小型企業(yè)來說已經(jīng)足夠支撐業(yè)務(wù)。企業(yè)給CI&CD 加上Web 版本的門戶亭螟、集中的賬戶管理體系以及運維監(jiān)控體系挡鞍,即可打造一個智能的DevOps 平臺。
圖1-8 是CI&CD 流程预烙,后面的實例也將圍繞這個流程墨微。
下面先簡單介紹該流程。
1)程序員提交代碼扁掸。
2)Gerrit 做代碼審核翘县,通過提交到GitLab,能通過郵件通知相關(guān)人員谴分。
3)Sonar 做代碼靜態(tài)掃描锈麸,并把結(jié)果通知相關(guān)人員。
4)在GitLab 中貼標簽(通過WebHook 觸發(fā)Jenkins 作業(yè))或者手動在Jenkins 中觸發(fā)作業(yè)牺蹄,Maven 開始下拉代碼進行編譯掐隐,然后進行單元測試和打包。
5)打包完成后利用Docker cli 構(gòu)建鏡像。
6)把鏡像上傳到鏡像倉庫中虑省。
7)Jenkins 作業(yè)觸發(fā)Rancher 在測試環(huán)境中啟動容器匿刮,首先下拉鏡像,然后根據(jù)配置啟動容器探颈。
8)Rancher 自動或者按規(guī)則調(diào)度容器在哪臺機器上運行熟丸。
9)Rancher 負責容器生命周期管理(啟動、監(jiān)控伪节、健康檢查光羞、擴展等)。
10)進行自動化測試怀大。
11)測試通過后纱兑,Jenkins 觸發(fā)Rancher 在生產(chǎn)環(huán)境中啟動或者更新測試通過的服務(wù),當然化借,也可以手動在Rancher 中進行發(fā)布猿诸,當實例增加時只需要填寫實例數(shù)量即可快速擴展虱朵,在發(fā)布時可以支持灰度發(fā)布绪励、藍綠發(fā)布等個性化的發(fā)布需求黎烈。
注意:
1)我們一直不加上云平臺這個名稱,是因為云平臺的定義太廣蒜焊,我們并沒有產(chǎn)品接入功能倒信,比如提供數(shù)據(jù)存儲服務(wù)、緩存服務(wù)泳梆,以及提供大數(shù)據(jù)運算能力鳖悠。
2)當然,我們也具備云要提供的很多服務(wù)优妙,所以在把下面要講的一套東西落地后竞穷,也可以冠以云平臺之名,其他的功能可以慢慢補上來鳞溉●“欲立新功,行之有名熟菲;立人之先看政,憨享其成〕保”
由于要用的工具比較多允蚣,這些工具多由外國人開發(fā),譯過來叫法比較多呆贿,因此為了方便講述嚷兔,下面介紹術(shù)語森渐。
? 服務(wù):完成某一功能的程序。
? 服務(wù)實例:程序部署單元冒晰,比如一個訂單程序由Tomcat 啟動同衣,一個這樣的部署單元(一個JVM 實例)稱為一個服務(wù)實例。
? 容器:如Docker 容器壶运。
? 容器實例:鏡像的運行態(tài)叫容器實例耐齐,如果運行一個Nginx 鏡像,那么這就是一個容器實例蒋情,我們利用鏡像運行兩個Nginx埠况,那么實例數(shù)為2;這些實例稱為容器實例棵癣,一定語境下直接稱為實例辕翰。
1.7 本章小結(jié)
本章簡單敘述了進行CI&CD 的價值,以及通過CI&CD 的實施能夠幫我們解決什么問題狈谊。結(jié)合當前的CI&CD 技術(shù)棧喜命,我們知道要朝哪個方向去發(fā)力建立自己的私有云平臺。利用當前的開源技術(shù)實現(xiàn)CI&CD的畴,運行自己的私有云平臺渊抄,加速企業(yè)的系統(tǒng)集成效率尝胆,縮短部署時間丧裁,提高成功率。
本文摘自《持續(xù)集成與持續(xù)部署實踐》
《持續(xù)集成與持續(xù)部署實踐》
作者:陳志勇 錢琪 孫金飛 李誠誠
- 騰訊含衔、阿里煎娇、滴滴等公司眾多專家推薦
- 講述如何用Docker構(gòu)建集成容器、鏡像倉庫規(guī)劃及管理
- 一書在手贪染,持續(xù)集成無憂缓呛。
本書來自一線的實踐經(jīng)驗,深入呈現(xiàn)技術(shù)細節(jié)杭隙;詳實的實操示例哟绊,即學即用的實戰(zhàn)技術(shù)。
講解了持續(xù)集成中引人入勝的內(nèi)容:CI/CD到底要解決什么問題痰憎?它與DevOps之間的關(guān)系是怎樣的票髓?程序員如何用工具化的系統(tǒng)持續(xù)進行代碼的版本管理、構(gòu)建铣耘、打包洽沟、集成、測試和部署蜗细?利用云平臺和容器技術(shù)實現(xiàn)彈性伸縮價值等裆操。