幫助中心
技術(shù)運(yùn)維百科
CI 失敗的原因與解決辦法
2017-06-19 17:44:40
ModelId=2&Id=763">
  理想情況下,當(dāng)構(gòu)建失敗時(shí),我們是不能允許軟件繼續(xù)發(fā)布到生產(chǎn)上。但是,持續(xù)集成的理念并未貫徹到每一個(gè)敏捷團(tuán)隊(duì)。有些團(tuán)隊(duì)非常嚴(yán)肅地對(duì)待CI實(shí)踐,有些只是為了敏捷而做,有些則完全忽略CI流程,甚至有的連CI服務(wù)器都沒(méi)有搭建。
  有很多種原因?qū)е聢F(tuán)隊(duì)忽視CI流程。工作有不同的優(yōu)先級(jí),產(chǎn)品經(jīng)理不理解代碼質(zhì)量,測(cè)試流程和完整構(gòu)建的重要性。技術(shù)經(jīng)理無(wú)法分配足夠的時(shí)間實(shí)施CI或者修正出問(wèn)題的CI。產(chǎn)品和技術(shù)管理層互相不理解各自的優(yōu)先級(jí)以至于最后部署的是構(gòu)建失敗的產(chǎn)品。   這個(gè)方法短期看沒(méi)什么問(wèn)題,但其實(shí)非常危險(xiǎn)。可能會(huì)導(dǎo)致產(chǎn)品有嚴(yán)重的缺陷,從而影響業(yè)務(wù)運(yùn)作。這種影響是不可預(yù)測(cè)的,可能是金錢(qián)的損失,也可能是企業(yè)聲譽(yù),最極端的可能導(dǎo)致整個(gè)業(yè)務(wù)完全流失。   然而,即使產(chǎn)品經(jīng)理和技術(shù)團(tuán)隊(duì)愿意投入時(shí)間和金錢(qián)來(lái)實(shí)施CI和修正CI問(wèn)題。一些團(tuán)隊(duì)還是從未成功。我們?cè)谶@里討論一下CI失敗的5大原因和克服這些困難的推薦解決方案。   1. 錯(cuò)誤地選擇CI服務(wù)器   市場(chǎng)上有很多種持續(xù)集成工具。CI服務(wù)器可以在云端也可以在本地。這里可以推薦一堆CI服務(wù)器(https://www.slant.co/topics/799/~continuous-integration-tools)。Jenkins是其中之一,但過(guò)去人們都盲目地使用它。為了適應(yīng)Jenkins,我們時(shí)常不得不更改項(xiàng)目妥協(xié)?,F(xiàn)在,情況有所改變,市場(chǎng)上出現(xiàn)了多種不錯(cuò)的CI服務(wù)器。面對(duì)如此眾多的產(chǎn)品,選擇適合自己所需的的確是一項(xiàng)挑戰(zhàn)。   搭建CI服務(wù)器需要耗費(fèi)大量的時(shí)間和金錢(qián)。如果沒(méi)有提前研究就貿(mào)然決定,那么前期的投入都付之東流。管理層經(jīng)常犯的一個(gè)錯(cuò)誤就是選擇一款通用型CI服務(wù)器或者適用于所有平臺(tái)的服務(wù)。設(shè)想一下,你的應(yīng)用包含Web網(wǎng)站、IOS app、Android app,用一個(gè)通用CI并不是一個(gè)很好的辦法。我們必須非常小心來(lái)選擇CI服務(wù)器。   推薦解決方案   仔細(xì)研究市場(chǎng)并通過(guò)實(shí)驗(yàn)權(quán)衡各種選項(xiàng)。Slant上已經(jīng)對(duì)主流的各種CI產(chǎn)品(https://www.slant.co/topics/799/~continuous-integration-tools)有優(yōu)劣評(píng)估。關(guān)注特性,例如容器支持,平臺(tái)支持,易用型,可用性等等。不要為了試圖省錢(qián)采用一款通用的適應(yīng)所有平臺(tái)的CI產(chǎn)品,每一個(gè)平臺(tái)都有不同的技術(shù)需求和挑戰(zhàn)。和團(tuán)隊(duì)討論并借鑒過(guò)去的經(jīng)驗(yàn)。   2. 業(yè)余工程師   在敏捷團(tuán)隊(duì)的每一位工程師都有很強(qiáng)的編程能力。但僅僅是是寫(xiě)代碼和測(cè)試代碼是不夠的,還需要搭建環(huán)境的能力,運(yùn)行命令行和編寫(xiě)腳本的技能,還要具有對(duì)各種構(gòu)建工具和軟件包管理工具的扎實(shí)的知識(shí)。   最近,很多公司都開(kāi)始講IT架構(gòu)遷移上云,所以還需要 Devops 技能。例如,AWS、AZure、Heroku,各種配置工具例如:bash、Ansible和 Chef,還有容器Docker and Kubernetes。最重要的是要具備至少一種腳本編程能力,比如Bash、Ruby或者Python。這當(dāng)然并不意味者你需要學(xué)所有的東西,但你需要了解平臺(tái)上的所有東西。假設(shè)一位從事IOS開(kāi)發(fā)的工程師,他就需要了解各種相關(guān)的工具例如:Cocoapods、Carthage和Swift Package Manager。還有用于構(gòu)建的工具,例如在A(yíng)PPLE 命令行工具之上的Fastlane、Rake和Make。   術(shù)業(yè)有專(zhuān)攻,有些工程師擅長(zhǎng)基本編程語(yǔ)言,比如 Java、Objective-C和Swift,并且對(duì)DevOps相關(guān)的各種工具相當(dāng)熟悉。 有些工程師則習(xí)慣于使用IDE環(huán)境開(kāi)發(fā)(比如Eclipse、IntelliJ和Xcode),他們不太熟悉使用終端敲入命令。還有些工程師擅長(zhǎng)構(gòu)建工具但寫(xiě)程序代碼則弱一些。所謂業(yè)余工程師是指那些只會(huì)在IDE環(huán)境下編程,不會(huì)使用命令行和腳本工具的人,他們只喜歡使用GUI去做事而抗拒使用命令行或腳本。但是,CI服務(wù)器并沒(méi)有GUI,所有的事情都只能用腳本來(lái)完成。如果你的團(tuán)隊(duì)有這類(lèi)人,那CI就永遠(yuǎn)不可能成功,他們可能會(huì)開(kāi)發(fā)一些質(zhì)量低劣的自動(dòng)化腳本,然后大家的時(shí)間都花在差錯(cuò),該機(jī)和CI服務(wù)器切換上,而不是真正構(gòu)建對(duì)業(yè)務(wù)有意義的功能。   推薦解決方案   招聘具有CI和DevOps基礎(chǔ)知識(shí)的工程師。培訓(xùn)工程師,最好的辦法是送他們?nèi)ネ饷媾嘤?xùn)或者請(qǐng)內(nèi)部有經(jīng)驗(yàn)的CI專(zhuān)家培訓(xùn)。短期招聘一些CI專(zhuān)家來(lái)建立CI流程和分享經(jīng)驗(yàn)。   3. 隨意更改CI服務(wù)器配置   許多CI服務(wù)器允許用戶(hù)通過(guò)Web界面去更改CI服務(wù)器配置。這個(gè)方法對(duì)工程師而言的確比較方便。但是經(jīng)常更改CI配置也會(huì)產(chǎn)生很多問(wèn)題,比如把一些很重要的步驟錯(cuò)誤地忽略掉。而且,如果每個(gè)人都有權(quán)限在上面更改的話(huà),最后就搞不清楚誰(shuí),什么時(shí)間做了什么更改。當(dāng)查錯(cuò)的時(shí)候,都需要花費(fèi)大量的時(shí)間。經(jīng)常性地更改CI服務(wù)器會(huì)導(dǎo)致很多問(wèn)題。   推薦解決方案   把配置文件,腳本和其他相關(guān)文件都放到代碼庫(kù)集中管理。避免手工更改CI 服務(wù)器的配置。控制訪(fǎng)問(wèn)CI 服務(wù)器的權(quán)限。不允許用戶(hù)更改一些特定的構(gòu)建步驟。   4. CI服務(wù)器性能差   在開(kāi)發(fā)過(guò)程中,程序員需要經(jīng)常更新代碼,這會(huì)不停地在CI服務(wù)器上觸發(fā)重構(gòu)流程。這意味著CI服務(wù)器需要不斷地運(yùn)行大量作業(yè)。例如從遠(yuǎn)端服務(wù)器下載,備份數(shù)據(jù)庫(kù),運(yùn)行Docker容器等等,所以CI服務(wù)器必須快速,可靠,網(wǎng)絡(luò)穩(wěn)定。低配的CI服務(wù)器會(huì)影響整個(gè)構(gòu)建流程,導(dǎo)致時(shí)間延長(zhǎng),測(cè)試時(shí)斷時(shí)續(xù),從而浪費(fèi)大量的時(shí)間。   推薦解決方案   采用高配服務(wù)器。不要在CI服務(wù)器上安裝不必要的軟件。不要把CI服務(wù)器掛在Wifi上??茖W(xué)地調(diào)度在CI服務(wù)器上跑的作業(yè)。不要手工安裝軟件。避免使用GUI連接 CI 服務(wù)器,使用SSH足夠了。   5. 缺乏管理   項(xiàng)目管理在整個(gè)CI實(shí)施中起到關(guān)鍵作用。必須對(duì)整個(gè)構(gòu)建流程設(shè)定嚴(yán)格的指引,同時(shí)對(duì)任何不遵守指引的行為零容忍。在任何情況下都不能發(fā)布CI流程中斷的軟件。任何構(gòu)建中斷都要被視為緊急事件并以最高優(yōu)先級(jí)進(jìn)行修復(fù)。很多技術(shù)經(jīng)理可以做到這一點(diǎn),但一些沒(méi)有CI經(jīng)驗(yàn)的管理人員可能會(huì)命令繼續(xù)開(kāi)發(fā)而不顧代碼質(zhì)量。如果這樣管理,CI實(shí)施則不可能成功。   推薦解決方案   建立CI流程并嚴(yán)格執(zhí)行。培訓(xùn)項(xiàng)目經(jīng)理并用于CI實(shí)施。
熱門(mén)文章換一批
新客優(yōu)惠
特價(jià) 酷睿i3系列
性?xún)r(jià)比熱銷(xiāo)推薦,年銷(xiāo)量第一
1180/月起
USA-IDC為您提供免備案服務(wù)器 0元試用
立即聯(lián)系在線(xiàn)客服,即可申請(qǐng)免費(fèi)產(chǎn)品試用服務(wù)
立即申請(qǐng)