国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

持續(xù)集成在移動開發(fā)中的應(yīng)用

2019-07-24 02:03:20蔡國華魏麗麗韓小博
中國傳媒科技 2019年6期
關(guān)鍵詞:代碼部署工具

文/蔡國華 魏麗麗 韓小博

引言

移動互聯(lián)網(wǎng)發(fā)展方興未艾,作為移動互聯(lián)網(wǎng)入口的移動應(yīng)用也成為各個互聯(lián)網(wǎng)企業(yè)競爭激烈的必爭之地。這就對移動應(yīng)用的迭代開發(fā)、測試、發(fā)布等一系列流程提出了更高的要求,在滿足基本功能性的前提下,還要求在安全可靠性、渠道并發(fā)性、信息時效性等方面都能夠緊跟市場變化。中國搜索移動應(yīng)用類產(chǎn)品的開發(fā)采用敏捷開發(fā)的模式,在多版本迭代開發(fā)過程中,需要頻繁的進行代碼集成、編譯、測試檢查、打包、發(fā)布部署等活動,如何將開發(fā)人員從頻繁的手工勞動中解放出來,降低人工操作帶來的失誤,加快迭代速度,提高發(fā)布質(zhì)量就成為亟待解決的問題。經(jīng)過調(diào)研選型和實踐,中國搜索基于jenkins工具平臺,研發(fā)設(shè)計了一套移動應(yīng)用自動化持續(xù)集成發(fā)布解決方案,該方案規(guī)范優(yōu)化了眾多環(huán)節(jié),集成了多種異構(gòu)工具及環(huán)境,實現(xiàn)了從代碼編譯到發(fā)布的自動化。

1.持續(xù)集成

1.1 什么是持續(xù)集成

持續(xù)集成是一種軟件開發(fā)實踐,是開發(fā)團隊基于某種或者某些變化對系統(tǒng)進行的經(jīng)常性的構(gòu)建活動,比如持續(xù)檢查、持續(xù)編譯、持續(xù)驗證、持續(xù)部署、持續(xù)基礎(chǔ)設(shè)施、持續(xù)報告等。

1.2 為什么需要持續(xù)集成

通過持續(xù)集成,可以:

(1)解放勞動力,減少手工操作的失誤率,通過持續(xù)集成,可以將編譯、審查、打包、部署等高頻度的重復(fù)性手工操作通過工具自動化。

(2)更早的發(fā)現(xiàn)問題,通過持續(xù)對代碼進行集成,可以更早的獲取變更,更早進入測試,更早的發(fā)現(xiàn)問題,降低解決問題的成本。

(3)增強項目的可見性,持續(xù)集成使得軟件開發(fā)過程更加透明,持續(xù)集成系統(tǒng)可以實時提供構(gòu)建狀態(tài)和品質(zhì)。

(4)更快的交付成果,持續(xù)集成縮短了編譯、集成、測試、發(fā)布、部署各個環(huán)節(jié)的時間,使得交付更快捷。

(5)更高的產(chǎn)品質(zhì)量,可將代碼檢查等集成到工具中,通過持續(xù)集成對每次提交的代碼進行檢查。

圖1 持續(xù)集成典型場景

1.3 持續(xù)集成構(gòu)建系統(tǒng)的組成要素

一個完整的持續(xù)集成構(gòu)建系統(tǒng)應(yīng)該包括:

(1)代碼配置管理工具及恰當(dāng)?shù)陌姹究刂撇呗?,通過代碼配置管理工具保證代碼的可維護性和可追溯性,本方案使用subversion作為版本庫。

(2)定義編排好的構(gòu)建集成流程設(shè)計,包括編譯、測試、分發(fā)、部署等。

(3)持續(xù)集成服務(wù)平臺,實現(xiàn)重復(fù)工作的自動化執(zhí)行,可持續(xù)實施預(yù)先定義編排的構(gòu)建流程設(shè)計。本方案使用Jenkins作為持續(xù)集成服務(wù)平臺。

1.4 持續(xù)集成工具平臺的選擇

Jenkins作為一款開源軟件,是基于java開發(fā)的持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,內(nèi)置功能強大,能完成常見的構(gòu)建任務(wù)。Jenkins有著豐富的插件庫,可以根據(jù)業(yè)務(wù)需求定制開發(fā)構(gòu)建、測試、部署或其他自定義邏輯任務(wù),也可以進行靜態(tài)檢查,在業(yè)界已得到廣泛認(rèn)可和使用。

2.自動化集成發(fā)布方案設(shè)計和實施

2.1 移動應(yīng)用的開發(fā)模式

圖2 持續(xù)集成流程框架

中國搜索移動產(chǎn)品應(yīng)用采用敏捷開發(fā)的模式,已經(jīng)形成了一套標(biāo)準(zhǔn)的流程,將開發(fā)工作流程分為以下階段:編碼->構(gòu)建->集成->測試->交付->發(fā)布,通過借助工具平臺采用自動化的方式在不同的開發(fā)階段實現(xiàn)持續(xù)集成、持續(xù)發(fā)布、持續(xù)部署。

持續(xù)集成:在開發(fā)過程中,開發(fā)人員頻繁的將工作副本合并到開發(fā)主干,每一次合并都是一次集成過程,通過持續(xù)集成可及時發(fā)現(xiàn)代碼錯誤,避免偏離開發(fā)主線,實現(xiàn)產(chǎn)品高質(zhì)量的快速迭代.

持續(xù)交付:通過持續(xù)交付,可實現(xiàn)頻繁的將新版本交付給測試團隊以供測試評審,測試評審?fù)ㄟ^,代碼即可進入發(fā)布階段。

持續(xù)發(fā)布:一旦通過測試評審,通過持續(xù)部署可以自動部署到線上生產(chǎn)環(huán)境,達到隨時隨地可發(fā)布應(yīng)用產(chǎn)品。

2.2 集成系統(tǒng)整體架構(gòu)

針對中國搜索移動應(yīng)用的開發(fā)模式和實際需求,持續(xù)集成平臺整合了jira流程管理平臺與jenkins自動化平臺。其中jira平臺用于進行項目相關(guān)角色對項目信息及需求進行提交,并進行工作流程的審批流轉(zhuǎn)。Jenkins工具平臺采用了控制邏輯與構(gòu)建動作分離的主從結(jié)構(gòu),jenkins主節(jié)點主要用于分解集成環(huán)節(jié),配置各流程步驟邏輯,任務(wù)分發(fā)等。Jenkins從節(jié)點主要用于對分發(fā)的任務(wù)進行執(zhí)行,生成中間產(chǎn)出等。鑒于安卓移動客戶端構(gòu)建環(huán)境涉及到的工具依賴較多,配置繁雜,將安卓構(gòu)建從節(jié)點環(huán)境進行容器化實現(xiàn),方便后續(xù)的復(fù)制遷移和維護。

項目發(fā)布過程中涉及到眾多相關(guān)責(zé)任角色,包括:

產(chǎn)品經(jīng)理,其職責(zé)包括提交應(yīng)用信息、代碼版本、應(yīng)用版本、渠道分發(fā)信息、新版功能描述等。

測試人員,其職責(zé)涵蓋對生成應(yīng)用的功能性測試及集成測試。

項目負(fù)責(zé)人,對最終產(chǎn)品是否上線,上線時間點進行最終決策。

圖3 集成系統(tǒng)整體架構(gòu)

質(zhì)量管理人,對整個流程進行過程跟蹤,關(guān)注環(huán)節(jié)流轉(zhuǎn)狀態(tài),規(guī)范安全監(jiān)督等。

產(chǎn)品經(jīng)理使用jira平臺提交相關(guān)產(chǎn)品信息后,由Jenkins系統(tǒng)工具對各單元參數(shù)進行base64編碼,避免參數(shù)傳遞解析問題。

Jenkins平臺獲取參數(shù)信息后,進行解碼和參數(shù)適配,并傳遞給環(huán)節(jié)編排模塊,對整個構(gòu)建部署過程進行流程編排。該模塊也負(fù)責(zé)工作節(jié)點各個分解環(huán)節(jié)的流轉(zhuǎn)及最終產(chǎn)出整合,定制化通知模塊負(fù)責(zé)對流程中的各個狀態(tài),異常等情況進行及時通知告警。角色管理模塊負(fù)責(zé)對項目進行必要的安全約束,對不同角色賦予相應(yīng)的平臺使用權(quán)限,同時該模塊也負(fù)責(zé)版本倉庫具體路徑及密鑰配置,原則上該模塊由質(zhì)量管理人負(fù)責(zé)。

具體從節(jié)點使用構(gòu)建工具如下表:

構(gòu)建工具 版本 功能Openjdk 1.8 提供jenkins運行環(huán)境支持與安卓java代碼編譯支持Build-tools 28.0 官方提供的安卓構(gòu)建輔助工具Gradle 5.3.1 自動化構(gòu)建開源工具,用于解析安卓項目配置,整合構(gòu)建步驟sshd 跟隨系統(tǒng) 用于jenkins主從連接配置

經(jīng)過編排的具體任務(wù)被分發(fā)給jenkins工作節(jié)點,進行具體處理。工作節(jié)點職能主要包括:提供異構(gòu)環(huán)境基礎(chǔ)能力,完成客戶端構(gòu)建,第三方工具加固,渠道分發(fā)應(yīng)用生成,應(yīng)用簽名,壓縮封裝,規(guī)范化生產(chǎn)環(huán)境產(chǎn)出等。

2.3 移動應(yīng)用集成發(fā)布流程方案

根據(jù)中國搜索移動客戶端產(chǎn)品開發(fā)的特性,移動應(yīng)用的自動化構(gòu)建發(fā)布分為兩個場景,一種是日常迭代開發(fā),另一種是產(chǎn)品的上線和多渠道發(fā)布,針對兩種應(yīng)用場景,分別設(shè)計了兩種構(gòu)建流程發(fā)布方案

2.3.1 日常迭代開發(fā)場景下的自動構(gòu)建流程方案

日常迭代開發(fā)過程中,開發(fā)人員從源代碼主干獲取最新的代碼簽出到本地,編碼完成本地測試后,按照配置管理策略將本地副本簽入源碼主干,jenkins構(gòu)建平臺將自動獲取到簽入動作通知,依次按順序執(zhí)行代碼規(guī)范檢查、構(gòu)建、單元測試、打包、測試一系列動作,在執(zhí)行過程中一旦發(fā)現(xiàn)錯誤,將中止后續(xù)構(gòu)建過程,將錯誤信息實時通知到開發(fā)人員,相關(guān)人員可在線實時查看執(zhí)行的過程,也可以繼續(xù)其他工作,系統(tǒng)將在執(zhí)行完畢后自動發(fā)送執(zhí)行結(jié)果。

圖4 日常迭代開發(fā)場景下的自動構(gòu)建流程方案

2.3.2 產(chǎn)品的正式上線和多渠道發(fā)布流程方案

基于測試評審?fù)ㄟ^的代碼版本,按計劃或需求可進行產(chǎn)品的正式上線和更新發(fā)布,日常因運營活動推廣的需要,也有多渠道發(fā)布的需求,發(fā)布到生產(chǎn)環(huán)境提供給用戶使用的產(chǎn)品,在日常構(gòu)建的基礎(chǔ)上,還需要考慮安全因素,防止出現(xiàn)移動應(yīng)用被脫殼篡改,植入廣告或其他惡意操作的情況,危機用戶信息安全,影響使用體驗,因此引入第三方加固工具對安裝包進行加固操作,加固后的應(yīng)用包已進行了混淆加密壓縮,具備較高的安全性。針對眾多應(yīng)用市場和第三方推廣渠道,在發(fā)布應(yīng)用時需要對應(yīng)用包進行渠道標(biāo)記,用戶在不同市場和推廣渠道安裝的應(yīng)用可以通過統(tǒng)計接口進行計量,按照渠道維度進行統(tǒng)計,對移動應(yīng)用的推廣效果,有效活躍用戶數(shù)量,用戶使用習(xí)慣等進行收集,以便產(chǎn)品人員進一步分析用戶行為,進行產(chǎn)品優(yōu)化。應(yīng)用簽名作為安卓應(yīng)用的規(guī)范之一,主要用于應(yīng)用基本信息標(biāo)注,其中簽名也在一定程度上提供了防篡改功能。本方案利用key-store和簽名密鑰實現(xiàn)了應(yīng)用包的批量自動化簽名步驟,進一步完善了應(yīng)用客戶端發(fā)布包的規(guī)范信息。加固簽名后的應(yīng)用包還需要經(jīng)過人工測試驗證和審批流程方能發(fā)布到生產(chǎn)環(huán)境提供給用戶使用。

圖5 產(chǎn)品的正式上線和多渠道發(fā)布流程方案

結(jié)語

基于jenkins平臺強大的基礎(chǔ)能力和靈活的擴展性,中國搜索設(shè)計了移動應(yīng)用開發(fā)項目的自動化構(gòu)建部署流程,涉及到代碼構(gòu)建、渠道分發(fā)標(biāo)記、第三方加固、文件規(guī)范化、自動批量簽名等步驟,整個流程體現(xiàn)了自動化特點,并將項目相關(guān)角色和任務(wù)職責(zé)有機融合在流轉(zhuǎn)的各個環(huán)節(jié),降低了相關(guān)人員溝通成本,并使得從項目構(gòu)建到最終部署的環(huán)節(jié)操作都有歷史留存,方便追溯,既滿足了日常開發(fā)項目的快速集成的需求,也保證了生產(chǎn)環(huán)境的穩(wěn)定快速發(fā)布。

猜你喜歡
代碼部署工具
一種基于Kubernetes的Web應(yīng)用部署與配置系統(tǒng)
晉城:安排部署 統(tǒng)防統(tǒng)治
波比的工具
波比的工具
部署
創(chuàng)世代碼
動漫星空(2018年11期)2018-10-26 02:24:02
創(chuàng)世代碼
動漫星空(2018年2期)2018-10-26 02:11:00
創(chuàng)世代碼
動漫星空(2018年9期)2018-10-26 01:16:48
創(chuàng)世代碼
動漫星空(2018年5期)2018-10-26 01:15:02
“巧用”工具
讀者(2017年18期)2017-08-29 21:22:03
兴宁市| 兴业县| 大同县| 横峰县| 九江县| 桦南县| 革吉县| 随州市| 大城县| 察雅县| 五常市| 云梦县| 武山县| 东平县| 丰原市| 麻城市| 香格里拉县| 无棣县| 江津市| 山丹县| 大安市| 中江县| 紫金县| 富源县| 衡东县| 绥宁县| 许昌县| 桑植县| 永新县| 财经| 三江| 宣威市| 开封县| 娄烦县| 石台县| 涪陵区| 永和县| 讷河市| 滁州市| 湘潭县| 苍溪县|