什么是 CI/CD? 2020-08-25

CI/CD 的出現(xiàn)改變了開(kāi)發(fā)人員和測(cè)試人員發(fā)布軟件的方式妹懒。本文是描述這一變化的系列文章第一篇, 這些文章將提供各種工具和流程的講解,以幫助開(kāi)發(fā)人員更好的使用 CI/CD肋僧。

從最初的瀑布模型, 到后來(lái)的敏捷開(kāi)發(fā)控淡, 再到今天的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)迫用戶下載更新組件殊鞭。很多時(shí)候遭垛,用戶甚至都不會(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/CD 救鲤,以及現(xiàn)代軟件公司如何使用工具將部署代碼的流程自動(dòng)化久窟。

持續(xù)集成注重將各個(gè)開(kāi)發(fā)者的工作集合到一個(gè)代碼倉(cāng)庫(kù)中,通常每天會(huì)進(jìn)行幾次本缠, 主要目的是盡早發(fā)現(xiàn)集成錯(cuò)誤斥扛,使團(tuán)隊(duì)更加緊密結(jié)合,更好地協(xié)作丹锹。持續(xù)交付的目的是最小化部署或發(fā)布過(guò)程中團(tuán)隊(duì)固有的摩擦稀颁, 它的實(shí)現(xiàn)通常能夠?qū)?gòu)建部署的每個(gè)步驟自動(dòng)化,以便任何時(shí)刻能夠安全地完成代碼發(fā)布(理想情況下)楣黍。持續(xù)部署是一種更高程度的自動(dòng)化匾灶,無(wú)論何時(shí)代碼有較大改動(dòng), 都會(huì)自動(dòng)進(jìn)行構(gòu)建/部署租漂。

以上的每一個(gè)階段都是交付流水線的一部分阶女。Humble 和 Ferley在他們的書(shū)作《持續(xù)交付:通過(guò)自動(dòng)化構(gòu)建、測(cè)試和部署實(shí)現(xiàn)可靠軟件版本發(fā)布》中解釋說(shuō): "對(duì)軟件的每次更改都要經(jīng)過(guò)一個(gè)復(fù)雜的過(guò)程才能發(fā)布窜锯,該過(guò)程包括多個(gè)測(cè)試和部署階段進(jìn)行軟件的構(gòu)建张肾。 反過(guò)來(lái)看,這個(gè)過(guò)程需要許多人之間的合作锚扎,甚至可能需要幾個(gè)團(tuán)隊(duì)間合作吞瞪。 部署流水線對(duì)這一過(guò)程進(jìn)行建模,并且它的持續(xù)集成和發(fā)布管理工具能讓您在代碼從版本控制轉(zhuǎn)移到各種測(cè)試和部署時(shí)驾孔, 查看和控制每次更改的過(guò)程芍秆。"

持續(xù)集成(CI)

通過(guò)持續(xù)集成,開(kāi)發(fā)人員能夠頻繁地將其代碼集成到公共代碼倉(cāng)庫(kù)的主分支中翠勉。 開(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)銷。 實(shí)際情況中,開(kāi)發(fā)人員在集成時(shí)經(jīng)常會(huì)發(fā)現(xiàn)新代碼和已有代碼存在沖突怀读。 如果集成較早并更加頻繁诉位,那么沖突將更容易解決且執(zhí)行成本更低。

當(dāng)然菜枷,這里也有一些權(quán)衡苍糠,這個(gè)流程不提供額外的質(zhì)量保障。 事實(shí)上啤誊,許多組織發(fā)現(xiàn)這樣的集成方式開(kāi)銷更大岳瞭,因?yàn)樗鼈円蕾嚾斯ご_保新代碼不會(huì)引起新的 bug 或者破壞現(xiàn)有代碼。 為了減少集成期間的摩擦蚊锹,持續(xù)集成依賴于測(cè)試套件和自動(dòng)化測(cè)試瞳筏。 然而,要認(rèn)識(shí)到自動(dòng)化測(cè)試和持續(xù)測(cè)試是完全不同的這一點(diǎn)很重要枫耳,我們會(huì)在文章結(jié)尾處詳細(xì)說(shuō)明乏矾。

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 的早期積極解決。

持續(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è)試姜贡。

CD 集中依賴于部署流水線,團(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)證扛邑。

AWS 上提供了可靠的當(dāng)前 CI/CD 的展示,亞馬遜是云計(jì)算的提供商之一铐然,提供出色的 CI/CD 流水線環(huán)境和實(shí)驗(yàn)過(guò)程蔬崩, 有眾多開(kāi)發(fā)資源可供選擇,您可以將它們?cè)谝粋€(gè)易于配置和監(jiān)控的流水線中組合起來(lái)搀暑。

許多人認(rèn)為持續(xù)交付的吸引力主要在于沥阳,它自動(dòng)化了從提交代碼到倉(cāng)庫(kù),再到測(cè)試和發(fā)布產(chǎn)品過(guò)程的所有步驟自点。 這是構(gòu)建和測(cè)試過(guò)程細(xì)致的自動(dòng)化桐罕,但是如何發(fā)布以及發(fā)布什么仍然是需要人工操作,持續(xù)部署可以改變這一點(diǎ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)部署。 此類自動(dòng)部署可以配置為快速向客戶分發(fā)組件粗仓、功能模塊或修復(fù)補(bǔ)丁嫁怀,并準(zhǔn)確說(shuō)明當(dāng)前提供的內(nèi)容。

采用持續(xù)部署的組織可以將新功能快速傳遞給用戶借浊,得到用戶對(duì)于新版本的快速反饋塘淑,并且可以迅速處理任何明顯的缺陷。 用戶對(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师倔。

最受歡迎的自動(dòng)化工具是Jenkins(以前的 Hudson)构韵, 這是一個(gè)由數(shù)百名貢獻(xiàn)者和商業(yè)公司Cloudbees支持的開(kāi)源項(xiàng)目。 Cloudbees 甚至聘請(qǐng)了 Jenkins 的創(chuàng)始人,并提供了一些 Jenkins 培訓(xùn)項(xiàng)目和附加組件疲恢。 除了開(kāi)源項(xiàng)目之外凶朗,還有一些更現(xiàn)代化的商業(yè)產(chǎn)品例如 CircleCI,Codeship 和 Shippable显拳。 這些產(chǎn)品各有優(yōu)缺點(diǎn)棚愤,我鼓勵(lì)開(kāi)發(fā)人員在開(kāi)發(fā)流程中一一嘗試它們,以了解它們?cè)谀沫h(huán)境中的工作方式杂数, 以及它們?nèi)绾闻c您的工具宛畦、云平臺(tái)、容器系統(tǒng)等協(xié)作揍移。

在 mabl 中次和,我們?cè)?a target="_blank">Google Cloud Platform 上進(jìn)行構(gòu)建, 因此那伐,我們正在尋找與 GSP 兼容或者最好是已經(jīng)集成進(jìn) GSO 的產(chǎn)品踏施。我們嘗試過(guò) CircleCI,Codeship 和 Shippable罕邀, 下面有一個(gè)簡(jiǎn)單的表格畅形,展示了每個(gè)工具的一些細(xì)節(jié):

我們最終選擇了Codeship,我認(rèn)為我們的選擇是正確的燃少, 也感謝 Codeship 團(tuán)隊(duì)的支持束亏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铃在,一起剝皮案震驚了整個(gè)濱河市阵具,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌定铜,老刑警劉巖阳液,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異揣炕,居然都是意外死亡帘皿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門畸陡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鹰溜,“玉大人,你說(shuō)我怎么就攤上這事丁恭〔芏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵牲览,是天一觀的道長(zhǎng)墓陈。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么贡必? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任兔港,我火速辦了婚禮,結(jié)果婚禮上仔拟,老公的妹妹穿的比我還像新娘衫樊。我一直安慰自己,他們只是感情好利花,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布橡伞。 她就那樣靜靜地躺著,像睡著了一般晋被。 火紅的嫁衣襯著肌膚如雪兑徘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天羡洛,我揣著相機(jī)與錄音挂脑,去河邊找鬼。 笑死欲侮,一個(gè)胖子當(dāng)著我的面吹牛崭闲,可吹牛的內(nèi)容都是我干的贞瞒。 我是一名探鬼主播罗晕,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肾砂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怠惶!你這毒婦竟也來(lái)了愧捕?” 一聲冷哼從身側(cè)響起方面,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伦仍,失蹤者是張志新(化名)和其女友劉穎获搏,沒(méi)想到半個(gè)月后虑粥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體如孝,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年娩贷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了第晰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彬祖,死狀恐怖茁瘦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情储笑,我是刑警寧澤甜熔,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站南蓬,受9級(jí)特大地震影響纺非,放射性物質(zhì)發(fā)生泄漏哑了。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一烧颖、第九天 我趴在偏房一處隱蔽的房頂上張望弱左。 院中可真熱鬧,春花似錦炕淮、人聲如沸拆火。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)们镜。三九已至,卻和暖如春润歉,著一層夾襖步出監(jiān)牢的瞬間模狭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工踩衩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嚼鹉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓驱富,卻偏偏與公主長(zhǎng)得像锚赤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子褐鸥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350