創(chuàng)作不易,請(qǐng)珍惜,之后會(huì)持續(xù)更新感局,不斷完善
個(gè)人比較喜歡做筆記和寫(xiě)總結(jié),畢竟好記性不如爛筆頭哈哈暂衡,這些文章記錄了我的IOS成長(zhǎng)歷程询微,希望能與大家一起進(jìn)步
溫馨提示:由于簡(jiǎn)書(shū)不支持目錄跳轉(zhuǎn),大家可通過(guò)command + F 輸入目錄標(biāo)題后迅速尋找到你所需要的內(nèi)容
目錄
- 一狂巢、DevOps
- 二拓提、Continuous Integration
- 三、架構(gòu)師的日常
- 四隧膘、關(guān)于旅行
- 參考文獻(xiàn)
CI/CD
的出現(xiàn)改變了開(kāi)發(fā)人員和測(cè)試人員發(fā)布軟件的方式代态。從最初的瀑布模型, 到后來(lái)的敏捷開(kāi)發(fā)(Agile Development
)疹吃, 再到今天的 DevOps
蹦疑,這是現(xiàn)代開(kāi)發(fā)人員構(gòu)建出色產(chǎn)品的技術(shù)路線。 隨著 DevOps
的興起萨驶,出現(xiàn)了持續(xù)集成歉摧,持續(xù)交付(CI/CD
)和持續(xù)部署的新方法, 而傳統(tǒng)的軟件開(kāi)發(fā)和交付方式在迅速變得過(guò)時(shí)腔呜。過(guò)去的敏捷時(shí)代里叁温, 大多數(shù)公司的軟件發(fā)布周期是每月、每季度甚至每年核畴;而在現(xiàn)在 DevOps
時(shí)代膝但,每周、每天甚至每天多次都是常態(tài)谤草。 當(dāng) SaaS
成為業(yè)界主流后尤其如此跟束,您可以輕松地動(dòng)態(tài)更新應(yīng)用程序, 而無(wú)需強(qiáng)迫用戶(hù)下載更新組件丑孩。很多時(shí)候冀宴,用戶(hù)甚至都不會(huì)注意到正在發(fā)生變化。
開(kāi)發(fā)團(tuán)隊(duì)通過(guò)軟件交付流水線(Pipeline
)實(shí)現(xiàn)自動(dòng)化温学,以縮短交付周期略贮, 大多數(shù)團(tuán)隊(duì)都有自動(dòng)化流程來(lái)檢查代碼并部署到新環(huán)境。 我們一直在關(guān)注自動(dòng)化測(cè)試流程仗岖。 今天逃延,我們將介紹什么是 CI/CD
,以及現(xiàn)代軟件公司如何使用工具將部署代碼的流程自動(dòng)化箩帚。
一真友、DevOps
DevOps
是Development
和Operations
的組合,是一種方法論紧帕,是一組過(guò)程盔然、方法與系統(tǒng)的統(tǒng)稱(chēng),用于促進(jìn)應(yīng)用開(kāi)發(fā)是嗜、應(yīng)用運(yùn)維和質(zhì)量保障(QA)部門(mén)之間的溝通愈案、協(xié)作與整合。以期打破傳統(tǒng)開(kāi)發(fā)和運(yùn)營(yíng)之間的壁壘和鴻溝鹅搪。
DevOps
是一種重視“軟件開(kāi)發(fā)人員(Dev
)”和“IT運(yùn)維技術(shù)人員(Ops
)”之間溝通合作的文化站绪、運(yùn)動(dòng)或慣例。通過(guò)自動(dòng)化“軟件交付”和“架構(gòu)變更”的流程丽柿,來(lái)使得構(gòu)建恢准、測(cè)試魂挂、發(fā)布軟件能夠更加地快捷、頻繁和可靠馁筐。具體來(lái)說(shuō)涂召,就是在軟件交付和部署過(guò)程中提高溝通與協(xié)作的效率,旨在更快敏沉、更可靠的的發(fā)布更高質(zhì)量的產(chǎn)品果正。
也就是說(shuō)DevOps
是一組過(guò)程和方法的統(tǒng)稱(chēng),并不指代某一特定的軟件工具或軟件工具組合盟迟。各種工具軟件或軟件組合可以實(shí)現(xiàn)DevOps
的概念方法秋泳。其本質(zhì)是一整套的方法論,而不是指某種或某些工具集合攒菠,與軟件開(kāi)發(fā)中設(shè)計(jì)到的OOP迫皱、AOP、IOC(或DI)等類(lèi)似要尔,是一種理論或過(guò)程或方法的抽象或代稱(chēng)舍杜。
在了解了什么是DevOps
之后、我們來(lái)看看到底什么是CI/CD
赵辕?CI/CD
是一種通過(guò)在應(yīng)用開(kāi)發(fā)階段引入自動(dòng)化來(lái)頻繁向客戶(hù)交付應(yīng)用的方法既绩。CI/CD
的核心概念是持續(xù)集成、持續(xù)交付和持續(xù)部署还惠。作為一個(gè)面向開(kāi)發(fā)和運(yùn)營(yíng)團(tuán)隊(duì)的解決方案饲握,CI/CD
主要針對(duì)在集成新代碼時(shí)所引發(fā)的問(wèn)題(亦稱(chēng):“集成地獄”)。
具體而言蚕键,CI/CD
可讓持續(xù)自動(dòng)化和持續(xù)監(jiān)控貫穿于應(yīng)用的整個(gè)生命周期(從集成和測(cè)試階段救欧,到交付和部署)。這些關(guān)聯(lián)的事務(wù)通常被統(tǒng)稱(chēng)為“CI/CD
管道”锣光,由開(kāi)發(fā)和運(yùn)維團(tuán)隊(duì)以敏捷方式協(xié)同支持“实。現(xiàn)在我們把CI/CD
拆分開(kāi)、我們先來(lái)看看什么是CI
誊爹?
二蹬刷、Continuous Integration
CI
的英文名稱(chēng)是Continuous Integration
,中文翻譯為:持續(xù)集成频丘。CI
中办成,開(kāi)發(fā)人員將會(huì)頻繁地向主干提交代碼,這些新提交的代碼在最終合并到主干前搂漠,需要經(jīng)過(guò)編譯和自動(dòng)化測(cè)試流進(jìn)行驗(yàn)證迂卢。 持續(xù)集成(CI
)是在源代碼變更后自動(dòng)檢測(cè)、拉取、構(gòu)建和(在大多數(shù)情況下)進(jìn)行單元測(cè)試的過(guò)程而克。持續(xù)集成的目標(biāo)是快速確保開(kāi)發(fā)人員新提交的變更是好的靶壮,并且適合在代碼庫(kù)中進(jìn)一步使用。CI的流程執(zhí)行和理論實(shí)踐讓我們可以確定新代碼和原有代碼能否正確地集成在一起拍摇。
通俗點(diǎn)講就是:通過(guò)持續(xù)集成亮钦, 開(kāi)發(fā)人員能夠在任何時(shí)候多次向倉(cāng)庫(kù)提交作品,而不是獨(dú)立地開(kāi)發(fā)每個(gè)功能模塊并在開(kāi)發(fā)周期結(jié)束時(shí)一一提交充活。這里的一個(gè)重要思想就是讓開(kāi)發(fā)人員更快更、頻繁地做到這一點(diǎn)蜡娶,從而降低集成的開(kāi)銷(xiāo)混卵。 實(shí)際情況中,開(kāi)發(fā)人員在集成時(shí)經(jīng)常會(huì)發(fā)現(xiàn)新代碼和已有代碼存在沖突窖张。 如果集成較早并更加頻繁幕随,那么沖突將更容易解決且執(zhí)行成本更低。當(dāng)然宿接,這里也有一些權(quán)衡赘淮,這個(gè)流程不提供額外的質(zhì)量保障。 事實(shí)上睦霎,許多組織發(fā)現(xiàn)這樣的集成方式開(kāi)銷(xiāo)更大梢卸,因?yàn)樗鼈円蕾?lài)人工確保新代碼不會(huì)引起新的 bug 或者破壞現(xiàn)有代碼。 為了減少集成期間的摩擦副女,持續(xù)集成依賴(lài)于測(cè)試套件和自動(dòng)化測(cè)試蛤高。 然而,要認(rèn)識(shí)到自動(dòng)化測(cè)試和持續(xù)測(cè)試是完全不同的這一點(diǎn)很重要碑幅。
CI
的目標(biāo)是將集成簡(jiǎn)化成一個(gè)簡(jiǎn)單戴陡、易于重復(fù)的日常開(kāi)發(fā)任務(wù), 這樣有助于降低總體的構(gòu)建成本并在開(kāi)發(fā)周期的早期發(fā)現(xiàn)缺陷沟涨。 要想有效地使用 CI
必須轉(zhuǎn)變開(kāi)發(fā)團(tuán)隊(duì)的習(xí)慣恤批,要鼓勵(lì)頻繁迭代構(gòu)建, 并且在發(fā)現(xiàn) bug 的早期積極解決裹赴。
三喜庞、CD
這里的CD可對(duì)應(yīng)多個(gè)英文名稱(chēng),持續(xù)交付Continuous Delivery
和持續(xù)部署Continuous Deployment
篮昧。下面我們分別來(lái)看看上面是持續(xù)交付和持續(xù)部署赋荆。
持續(xù)交付(CD)
持續(xù)交付(CD)實(shí)際上是 CI
的擴(kuò)展,其中軟件交付流程進(jìn)一步自動(dòng)化懊昨,以便隨時(shí)輕松地部署到生成環(huán)境中窄潭。 成熟的持續(xù)交付方案也展示了一個(gè)始終可部署的代碼庫(kù)。使用 CD
后,軟件發(fā)布將成為一個(gè)沒(méi)有任何緊張感的例行事件嫉你。 開(kāi)發(fā)團(tuán)隊(duì)可以在日常開(kāi)發(fā)的任何時(shí)間進(jìn)行產(chǎn)品級(jí)的發(fā)布月帝,而不需要詳細(xì)的發(fā)布方案或者特殊的后期測(cè)試。
完成 CI
中構(gòu)建及單元測(cè)試和集成測(cè)試的自動(dòng)化流程后幽污,持續(xù)交付可自動(dòng)將已驗(yàn)證的代碼發(fā)布到存儲(chǔ)庫(kù)嚷辅。為了實(shí)現(xiàn)高效的持續(xù)交付流程,務(wù)必要確保 CI
已內(nèi)置于開(kāi)發(fā)管道距误。持續(xù)交付的目標(biāo)是擁有一個(gè)可隨時(shí)部署到生產(chǎn)環(huán)境的代碼庫(kù)簸搞。
在持續(xù)交付中,每個(gè)階段(從代碼更改的合并准潭,到生產(chǎn)就緒型構(gòu)建版本的交付)都涉及測(cè)試自動(dòng)化和代碼發(fā)布自動(dòng)化趁俊。在流程結(jié)束時(shí),運(yùn)維團(tuán)隊(duì)可以快速刑然、輕松地將應(yīng)用部署到生產(chǎn)環(huán)境中或發(fā)布給最終使用的用戶(hù)寺擂。
CD
集中依賴(lài)于部署流水線,團(tuán)隊(duì)通過(guò)流水線自動(dòng)化測(cè)試和部署過(guò)程泼掠。此流水線是一個(gè)自動(dòng)化系統(tǒng)怔软, 可以針對(duì)構(gòu)建執(zhí)行一組漸進(jìn)的測(cè)試套件。CD
具有高度的自動(dòng)化择镇,并且在一些云計(jì)算環(huán)境中也易于配置挡逼。在流水線的每個(gè)階段,如果構(gòu)建無(wú)法通過(guò)關(guān)鍵測(cè)試會(huì)向團(tuán)隊(duì)發(fā)出警報(bào)沐鼠。否則挚瘟,將繼續(xù)進(jìn)入下一個(gè)測(cè)試, 并在連續(xù)通過(guò)測(cè)試后自動(dòng)進(jìn)入下一個(gè)階段饲梭。流水線的最后一個(gè)部分會(huì)將構(gòu)建部署到和生產(chǎn)環(huán)境等效的環(huán)境中乘盖。 這是一個(gè)整體的過(guò)程,因?yàn)闃?gòu)建憔涉、部署和環(huán)境都是一起執(zhí)行和測(cè)試的订框,它能讓構(gòu)建在實(shí)際的生產(chǎn)環(huán)境可部署和可驗(yàn)證。
持續(xù)部署(CD)
持續(xù)部署擴(kuò)展了持續(xù)交付兜叨,以便軟件構(gòu)建在通過(guò)所有測(cè)試時(shí)自動(dòng)部署穿扳。在這樣的流程中, 不需要人為決定何時(shí)及如何投入生產(chǎn)環(huán)境。CI/CD
系統(tǒng)的最后一步將在構(gòu)建后的組件/包退出流水線時(shí)自動(dòng)部署跪但。 此類(lèi)自動(dòng)部署可以配置為快速向客戶(hù)分發(fā)組件履羞、功能模塊或修復(fù)補(bǔ)丁,并準(zhǔn)確說(shuō)明當(dāng)前提供的內(nèi)容忆首。采用持續(xù)部署的組織可以將新功能快速傳遞給用戶(hù)爱榔,得到用戶(hù)對(duì)于新版本的快速反饋,并且可以迅速處理任何明顯的缺陷唇聘。 用戶(hù)對(duì)無(wú)用或者誤解需求的功能的快速反饋有助于團(tuán)隊(duì)規(guī)劃投入,避免將精力集中于不容易產(chǎn)生回報(bào)的地方夭拌。
隨著 DevOps
的發(fā)展桶现,新的用來(lái)實(shí)現(xiàn)CI/CD
流水線的自動(dòng)化工具也在不斷涌現(xiàn)。這些工具通常能與各種開(kāi)發(fā)工具配合, 包括像 GitHub 這樣的代碼倉(cāng)庫(kù)和 Jira
這樣的 bug 跟蹤工具。此外筒繁,隨著 SaaS
這種交付方式變得更受歡迎修己, 許多工具都可以在現(xiàn)代開(kāi)發(fā)人員運(yùn)行應(yīng)用程序的云環(huán)境中運(yùn)行砂豌,例如 GCP 和 AWS
。但是對(duì)于一個(gè)成熟的CI/CD
管道(Pipeline
)來(lái)說(shuō),最后的階段是持續(xù)部署荸镊。作為持續(xù)交付——自動(dòng)將生產(chǎn)就緒型構(gòu)建版本發(fā)布到代碼存儲(chǔ)庫(kù)——的延伸,持續(xù)部署可以自動(dòng)將應(yīng)用發(fā)布到生產(chǎn)環(huán)境屎暇。目前最受歡迎的自動(dòng)化工具是 Jenkins
根悼。
持續(xù)部署意味著所有的變更都會(huì)被自動(dòng)部署到生產(chǎn)環(huán)境中凶异。持續(xù)交付意味著所有的變更都可以被部署到生產(chǎn)環(huán)境中,但是出于業(yè)務(wù)考慮挤巡,可以選擇不部署唠帝。如果要實(shí)施持續(xù)部署,必須先實(shí)施持續(xù)交付玄柏。持續(xù)交付并不是指軟件每一個(gè)改動(dòng)都要盡快部署到產(chǎn)品環(huán)境中,它指的是任何的代碼修改都可以在任何時(shí)候?qū)嵤┎渴鹛3掷m(xù)交付表示的是一種能力粪摘,而持續(xù)部署表示的則一種方式;持續(xù)部署是持續(xù)交付的最高階段绍坝。
四徘意、Agile Development
最后我們?cè)賮?lái)看看上面是敏捷開(kāi)發(fā),這個(gè)稱(chēng)呼似乎還沒(méi)有所謂的簡(jiǎn)稱(chēng)轩褐,而且這個(gè)稱(chēng)呼似乎在國(guó)內(nèi)被濫用了椎咧。敏捷開(kāi)發(fā)著重于一種開(kāi)發(fā)的思路,擁抱變化和快速迭代把介。如何實(shí)現(xiàn)敏捷開(kāi)發(fā)勤讽,目前似乎尚沒(méi)有完善的工具鏈,更多的是一種概念性拗踢,調(diào)侃的說(shuō)法“既想馬爾跑得快脚牍,又想馬兒不吃草”的另外一種說(shuō)法。