本發(fā)明涉及apk安裝包打包領(lǐng)域,具體涉及一種在服務(wù)器上自動(dòng)打包apk安裝包的方法及系統(tǒng)。
背景技術(shù):
現(xiàn)有的研發(fā)人員對(duì)安卓/ios軟件打包apk安裝包,都是通過tde手動(dòng)升級(jí)后使用開發(fā)工具導(dǎo)出apk安裝包,探后通過qq或者郵件等形式發(fā)送給測(cè)試人員進(jìn)行測(cè)試。這種通過人工打包及傳輸?shù)姆绞綗o疑會(huì)增大研發(fā)人員內(nèi)的工作量,且該工作為重復(fù)、耗時(shí)的工作,無法人工完成大量的打包過程,影響研發(fā)工作效率,且容易出錯(cuò)。
jenkins是一個(gè)開源軟件項(xiàng)目,旨在提供一個(gè)開放易用的軟件平臺(tái),使軟件做到可以持續(xù)集成,用于監(jiān)控持續(xù)重復(fù)的工作,如安卓/ios軟件自動(dòng)打包、自動(dòng)測(cè)試、軟件發(fā)布、網(wǎng)站監(jiān)控等工作。但在服務(wù)器上實(shí)現(xiàn)測(cè)試人員根據(jù)自己的需求進(jìn)行自動(dòng)化打包的相關(guān)技術(shù)鮮少,且現(xiàn)有jenkins服務(wù)器的測(cè)試文件的打包未能進(jìn)行較好配置,導(dǎo)致jenkins平臺(tái)打包效率低。
因此,需要在服務(wù)器上,研發(fā)一種新的持續(xù)打包apk安裝包的技術(shù),可以在現(xiàn)有的資源和配置生成方式基礎(chǔ)上,充分利用jenkins平臺(tái)完成多對(duì)象類型的apk安裝包的打包,建立高效、準(zhǔn)確、持續(xù)的自動(dòng)化打包apk安裝包的技術(shù)思路。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提出一種在服務(wù)器上自動(dòng)打包apk安裝包的方法,該方法基于現(xiàn)有jenkins平臺(tái)持續(xù)集成和git庫托管平臺(tái)的應(yīng)用,充分利用相應(yīng)插件和信息配置,建立高效、準(zhǔn)確、持續(xù)的打包apk安裝包的自動(dòng)化運(yùn)作方法及系統(tǒng)。
為實(shí)現(xiàn)上述目的,本發(fā)明所采用的技術(shù)方案是一種在服務(wù)器上自動(dòng)打包apk安裝包的方法,所述方法至少包括下述步驟:
預(yù)先在管理服務(wù)器上搭建jenkins平臺(tái),在其平臺(tái)建立gradle命令任務(wù);
管理服務(wù)器獲取目標(biāo)項(xiàng)目代碼的測(cè)試代碼,生成測(cè)試項(xiàng)目集并保存至git庫中;
jenkins執(zhí)行節(jié)點(diǎn)定時(shí)自動(dòng)從特定git庫中獲取目標(biāo)測(cè)試項(xiàng)目集,采用gradle工具對(duì)獲取的目標(biāo)測(cè)試項(xiàng)目集文件進(jìn)行編譯打包,生成apk文件:
通過接口腳本文件將生成的apk文件移動(dòng)到指定的目錄下。
本發(fā)明進(jìn)一步的方案中,所述在jenkins平臺(tái)建立gradle命令任務(wù)具體包括下述步驟:
在jenkins平臺(tái)中配置特定git庫和gradle工具包在所述管理服務(wù)器中的存儲(chǔ)路徑,以及測(cè)試代碼集在打包前和打包后的存儲(chǔ)路徑;
在build命令中設(shè)置自動(dòng)構(gòu)建打包任務(wù)的執(zhí)行時(shí)間,完成build.gradle配置文件。
在一個(gè)優(yōu)選方案中,所述方法還包括對(duì)打包后的apk文件進(jìn)行加固,具體為:
在jenkins平臺(tái)上添加用于加固的工具包插件,并配置加固工具包在所述管理服務(wù)器中的存儲(chǔ)路徑;
生成apk文件后,通過所述加固工具包先對(duì)apk文件進(jìn)行簽名,再對(duì)已簽名的apk文件進(jìn)行加固;
其中,所述加固是對(duì)指定的特征信息進(jìn)行雙重加密,所述指定的特征信息為androidmainfest.xml以及dex文件。
本發(fā)明方法中g(shù)it服務(wù)器生成特定git庫,并對(duì)特定git庫可設(shè)置權(quán)限角色,并依據(jù)相應(yīng)的角色權(quán)限生成相應(yīng)任務(wù),具體為:
git服務(wù)器通過界面輸入apk打包項(xiàng)目信息,并創(chuàng)建apk打包項(xiàng)目;其中,所述項(xiàng)目信息包括apk打包項(xiàng)目編碼、項(xiàng)目的唯一標(biāo)識(shí)碼以及項(xiàng)目引用的配置服務(wù)器信息;
錄入需要使用apk打包項(xiàng)目的參與人員,對(duì)其配置apk打包權(quán)限,生成apk打包項(xiàng)目的參與人員列表,隨后引入至所述apk打包項(xiàng)目,創(chuàng)建打包模塊信息;
git倉(cāng)庫生成一個(gè).git目錄,即特定git庫,并將打包模塊信息設(shè)為所述特定git庫的匹配閾值;
管理服務(wù)器將獲取的用戶及其測(cè)試項(xiàng)目集上傳至特定git庫,與匹配閾值比對(duì),判斷是否為apk打包對(duì)象;如是,則加入特定git庫。
進(jìn)一步的方案中,所述判斷是否為apk打包對(duì)象的方法為:
將管理服務(wù)器獲取的用戶與apk打包項(xiàng)目的參與人員列表匹配,如匹配成功,則滿足apk打包項(xiàng)目的參與人員條件;
判斷為滿足apk打包項(xiàng)目的參與人員條件后,獲取該用戶的測(cè)試項(xiàng)目集的上下文信息;用gitadd命令告訴特定git庫開始對(duì)測(cè)試項(xiàng)目集文件進(jìn)行跟蹤,并提交至特定git庫。
本發(fā)明方法為提高jenkins平臺(tái)的打包效率,對(duì)其執(zhí)行節(jié)點(diǎn)進(jìn)行配置。具體的,所述方法在搭建jenkins平臺(tái)時(shí),還包括:
在jenkins平臺(tái)上建立一個(gè)打包任務(wù)分配節(jié)點(diǎn)和n個(gè)打包任務(wù)執(zhí)行節(jié)點(diǎn),其中n為自然數(shù);
在jenkins執(zhí)行任務(wù)時(shí),還包括:到達(dá)執(zhí)行時(shí)間,查詢特定git庫的任務(wù),此時(shí)任務(wù)狀態(tài)為待執(zhí)行,特定git庫分配任務(wù)給jenkins平臺(tái)的打包任務(wù)分配節(jié)點(diǎn),再經(jīng)由打包任務(wù)分配節(jié)點(diǎn)將任務(wù)平均分配給所有的任務(wù)執(zhí)行節(jié)點(diǎn),并更新狀態(tài)為執(zhí)行中。
再進(jìn)一步的方案中,所述方法還包括在執(zhí)行apk打包和加固時(shí),監(jiān)測(cè)任務(wù)執(zhí)行節(jié)點(diǎn)的狀態(tài),并根據(jù)n個(gè)任務(wù)執(zhí)行節(jié)點(diǎn)的狀態(tài)反饋至git服務(wù)器,并采取相應(yīng)操作,具體包括:
當(dāng)加固狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)為零,且空閑狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)至少為打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)的2倍時(shí),則打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)強(qiáng)制離線,并更新狀態(tài)為待執(zhí)行,到達(dá)預(yù)設(shè)時(shí)間后,特定git庫重新分配待執(zhí)行狀態(tài)的任務(wù)給jenkins平臺(tái)的打包任務(wù)分配節(jié)點(diǎn);
當(dāng)加固狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)為零,且空閑狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)不大于打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)的2倍時(shí),記錄該情況出現(xiàn)的初始時(shí)間點(diǎn),且各任務(wù)執(zhí)行節(jié)點(diǎn)正常工作;經(jīng)過預(yù)設(shè)的評(píng)估時(shí)間后,如加固狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)仍然為零,且空閑狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)仍然不大于打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)的2倍,則打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)強(qiáng)制離線,并更新狀態(tài)為待執(zhí)行;否則,各任務(wù)執(zhí)行節(jié)點(diǎn)正常工作;
在上述發(fā)生強(qiáng)制離線事件后,在到達(dá)預(yù)設(shè)時(shí)間時(shí),特定git庫重新分配待執(zhí)行狀態(tài)的任務(wù)給jenkins平臺(tái)的打包任務(wù)分配節(jié)點(diǎn)。
其中的優(yōu)選方案,述預(yù)設(shè)時(shí)間為自n個(gè)任務(wù)執(zhí)行節(jié)點(diǎn)全部強(qiáng)制離線起算的時(shí)間段;所述空閑狀態(tài)是指當(dāng)前執(zhí)行節(jié)點(diǎn)數(shù)為零的狀況。
本發(fā)明另一方面還提供了一種在服務(wù)器上自動(dòng)打包apk安裝包的系統(tǒng),基于管理服務(wù)器上搭建的jenkins平臺(tái)進(jìn)行的apk打包,所述系統(tǒng)至少包括
打包環(huán)境搭建模塊,用于在管理服務(wù)器上搭建jenkins平臺(tái),在其平臺(tái)配置各工具插件的路徑及信息,建立gradle命令任務(wù);
信息實(shí)時(shí)獲取模塊,用于實(shí)時(shí)獲取目標(biāo)項(xiàng)目代碼的測(cè)試代碼,生成測(cè)試項(xiàng)目集,并存放置特定git庫;
打包對(duì)象選取模塊,包括錄入單元、apk打包項(xiàng)目創(chuàng)建單元、權(quán)限指定單元、特定git庫生成單元以及閾值匹配單元;
所述錄入單元用于通過界面輸入apk打包項(xiàng)目信息和需要使用apk打包項(xiàng)目的參與人員信息;
所述apk打包項(xiàng)目創(chuàng)建單元基于錄入信息進(jìn)行項(xiàng)目信息配置,創(chuàng)建apk打包項(xiàng)目;
所述權(quán)限指定單元用于對(duì)錄入的需要使用apk打包項(xiàng)目的參與人員配置apk打包權(quán)限;
所述特定git庫生成單元用于生成一個(gè).git目錄,即特定git庫,并將打包模塊信息設(shè)為所述特定git庫的匹配閾值;
所述閾值匹配單元用于將管理服務(wù)器獲取的用戶及其測(cè)試項(xiàng)目集上傳至特定git庫,與匹配閾值比對(duì),判斷是否為apk打包對(duì)象;
編碼打包模塊,基于jenkins平臺(tái)自動(dòng)從特定git庫中獲取目標(biāo)測(cè)試項(xiàng)目集,采用gradle工具對(duì)獲取的測(cè)試項(xiàng)目集文件進(jìn)行編譯打包,生成apk文件;
傳輸腳本模塊,用于通過接口腳本文件將生成的apk文件移動(dòng)到指定的目錄下。
在上述方案的基礎(chǔ)上,本發(fā)明系統(tǒng)還提供了一個(gè)優(yōu)選方案,所述系統(tǒng)還包括apk文件加固模塊,用于通過jenkins平臺(tái)的加固工具包先對(duì)apk文件進(jìn)行簽名,再對(duì)已簽名的apk文件進(jìn)行加固;所述加固是對(duì)指定的特征信息進(jìn)行雙重加密,所述指定的特征信息為androidmainfest.xml以及dex文件;
所述編碼打包模塊還包括節(jié)點(diǎn)配置單元、執(zhí)行節(jié)點(diǎn)監(jiān)測(cè)單元以及執(zhí)行節(jié)點(diǎn)重新分配單元;
所述節(jié)點(diǎn)配置單元用于在jenkins平臺(tái)上建立一個(gè)打包任務(wù)分配節(jié)點(diǎn)和n個(gè)打包任務(wù)執(zhí)行節(jié)點(diǎn),其中n為自然數(shù);
所述執(zhí)行節(jié)點(diǎn)監(jiān)測(cè)單元用于在執(zhí)行apk打包和加固時(shí),監(jiān)測(cè)任務(wù)執(zhí)行節(jié)點(diǎn)的狀態(tài),并根據(jù)n個(gè)任務(wù)執(zhí)行節(jié)點(diǎn)的狀態(tài)反饋至git服務(wù)器;
所述執(zhí)行節(jié)點(diǎn)重新分配單元依據(jù)監(jiān)測(cè)點(diǎn)的n個(gè)任務(wù)執(zhí)行節(jié)點(diǎn)的狀態(tài)符合設(shè)定強(qiáng)制離線條件時(shí),使打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)離線,更新狀態(tài)為待執(zhí)行;并在到達(dá)預(yù)設(shè)時(shí)間時(shí),特定git庫重新分配待執(zhí)行狀態(tài)的任務(wù)給jenkins平臺(tái)的打包任務(wù)分配節(jié)點(diǎn)。
本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的方法及系統(tǒng),在服務(wù)器上搭建jenkins平臺(tái),通過代碼管理工具連接管理,實(shí)現(xiàn)測(cè)試人員根據(jù)自己的需求來對(duì)gradle文件進(jìn)行簡(jiǎn)單apk打包;服務(wù)器基于腳本文件即可實(shí)現(xiàn)自動(dòng)化打包。還通過jenkins平臺(tái)的安裝包加固工具對(duì)apk安裝包進(jìn)行加固,增強(qiáng)apk安裝包的安全性。
通過本發(fā)明方法及系統(tǒng)將測(cè)試代碼通過jenkins平臺(tái)自動(dòng)部署到管理工具中進(jìn)行分布式處理,可實(shí)現(xiàn)多個(gè)執(zhí)行任務(wù)同時(shí)進(jìn)行自動(dòng)化打包及加固工作,極大簡(jiǎn)化了測(cè)試代碼的在打包和加固過程中的重復(fù)性工作,大幅縮短測(cè)試周期,并確保良好的軟件質(zhì)量。
再者,在本發(fā)明的git服務(wù)器為jenkins平臺(tái)提供測(cè)試代碼集的同時(shí),特定git庫針對(duì)性配置目標(biāo)用戶的打包權(quán)限及打包項(xiàng)目信息,使管理服務(wù)器在初步獲取測(cè)試代碼時(shí)實(shí)現(xiàn)隨意性,且不影響后續(xù)打包的準(zhǔn)確性,避免jenkins平臺(tái)獲取非目標(biāo)測(cè)試代碼集以及對(duì)獲取測(cè)試代碼集的驗(yàn)證工作,從準(zhǔn)確提供目標(biāo)用戶的目標(biāo)測(cè)試代碼集著手,進(jìn)一步提高目標(biāo)測(cè)試代碼集的打包apk安裝包及其加固工作的效率。
此外,在分布式處理的jenkins平臺(tái)上,由于不同執(zhí)行節(jié)點(diǎn)的處理能力不同,對(duì)執(zhí)行節(jié)點(diǎn)實(shí)時(shí)監(jiān)測(cè),在設(shè)定狀態(tài)下獲得處理能力弱的執(zhí)行節(jié)點(diǎn),并將其離線,重新分配執(zhí)行任務(wù),從而優(yōu)化執(zhí)行節(jié)點(diǎn)的分配,且保證打包及加固工作的有效進(jìn)行。
附圖說明
圖1為本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的方法中打包apk安裝包的一種實(shí)施方式的示意圖;
圖2為本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的方法中加固安裝包的一種實(shí)施方式的示意圖;
圖3為本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的方法中特定git庫配置及生成任務(wù)的一種實(shí)施方式的示意圖;
圖4為本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的方法中多執(zhí)行節(jié)點(diǎn)執(zhí)行原理的結(jié)構(gòu)圖;
圖5為本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的方法中分布式執(zhí)行的一種實(shí)施方式的示意圖;
圖6為本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的系統(tǒng)的一種實(shí)施方式的工作結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
下面參考附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行描述。參見圖1,為一種在服務(wù)器上自動(dòng)打包apk安裝包的方法,所述方法包括下述步驟:
s10、預(yù)先在管理服務(wù)器上搭建jenkins平臺(tái),在其平臺(tái)建立gradle命令任務(wù);
搭建所述在jenkins平臺(tái)建立gradle命令任務(wù)具體方法主要為:一是在jenkins平臺(tái)中配置特定git庫和gradle工具包在所述管理服務(wù)器中的存儲(chǔ)路徑,以及測(cè)試代碼集在打包前和打包后的存儲(chǔ)路徑;二是在build命令中設(shè)置自動(dòng)構(gòu)建打包任務(wù)的執(zhí)行時(shí)間,并完成build.gradle配置文件。
在搭建的jenkins平臺(tái)添加管理插件工具--git插件以及gradle插件,添加后重啟,進(jìn)行系統(tǒng)配置(主要配置jdk、git、gradle和email),例如將jenkins系統(tǒng)配置為可調(diào)用多個(gè)測(cè)試代碼集在打包前和打包后在服務(wù)器中的存儲(chǔ)路徑,并且可調(diào)用用于打包apk安裝包的工具包在管理服務(wù)器中的存儲(chǔ)路徑。以及添加特定git賬戶和密碼;在buildtriggers中添加定時(shí)任務(wù),以便在設(shè)定時(shí)間系統(tǒng)執(zhí)行自動(dòng)構(gòu)建打包等等。由此,由于在該jenkins平臺(tái)的插件的存在,可實(shí)現(xiàn)多個(gè)測(cè)試代碼集在該服務(wù)器端的自動(dòng)打包apk安裝包過程。
s11、管理服務(wù)器獲取目標(biāo)項(xiàng)目代碼的測(cè)試代碼,生成測(cè)試項(xiàng)目集并保存至特定git庫中;
s12、jenkins執(zhí)行節(jié)點(diǎn)定時(shí)自動(dòng)從git庫中獲取目標(biāo)測(cè)試項(xiàng)目集,采用gradle工具對(duì)獲取的目標(biāo)測(cè)試項(xiàng)目集文件進(jìn)行編譯打包,生成apk文件:
jenkins基于多個(gè)執(zhí)行節(jié)點(diǎn)的分布式處理,從特定git庫中獲取多個(gè)目標(biāo)測(cè)試項(xiàng)目集,同時(shí)使用執(zhí)行節(jié)點(diǎn)指定gradle.build構(gòu)建android項(xiàng)目,并打包成apk。
s13、通過接口腳本文件將生成的apk文件移動(dòng)到指定的目錄下。
本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的方法的另一個(gè)實(shí)施方式如圖2所示;在圖1所示實(shí)施方式的基礎(chǔ)上,本發(fā)明方法還包括對(duì)打包后的apk文件進(jìn)行加固,具體加固步驟如下。
s20、在jenkins平臺(tái)上添加用于加固的工具包插件,并配置加固工具包在所述管理服務(wù)器中的存儲(chǔ)路徑;
s21、生成apk文件后,通過所述加固工具包先對(duì)apk文件進(jìn)行簽名,再對(duì)已簽名的apk文件進(jìn)行加固;
其中,所述加固工具包對(duì)具有用于在加固過程中對(duì)apk文件進(jìn)行簽名的工具和文件;所述加固是對(duì)指定的特征信息進(jìn)行雙重加密,所述指定的特征信息為androidmainfest.xml以及dex文件。該方法實(shí)現(xiàn)apk文件的打包簽名,以及apk安裝包的自動(dòng)化加固;在后續(xù)工作中,只有通過簽名驗(yàn)證apk程序文件才允許安裝到終端設(shè)備上,可防止應(yīng)用程序被非法破解的情況發(fā)生。
圖3示出了一種設(shè)置特定git庫,以及對(duì)特定git庫中設(shè)置打包權(quán)限角色和相應(yīng)任務(wù)的方法的一種實(shí)施方式,包括下述步驟。
s30、git服務(wù)器通過界面輸入apk打包項(xiàng)目信息,并創(chuàng)建apk打包項(xiàng)目;其中,所述項(xiàng)目信息包括apk打包項(xiàng)目編碼、項(xiàng)目的唯一標(biāo)識(shí)碼以及項(xiàng)目引用的配置服務(wù)器信息;
s31、錄入需要使用apk打包項(xiàng)目的參與人員,對(duì)其配置apk打包權(quán)限,生成apk打包項(xiàng)目的參與人員列表,隨后引入至所述apk打包項(xiàng)目,創(chuàng)建打包模塊信息;
s32、git倉(cāng)庫生成一個(gè).git目錄,即特定git庫,并將打包模塊信息設(shè)為所述特定git庫的匹配閾值;
git服務(wù)器使用gitinit命令來初始化一個(gè)git倉(cāng)庫,在執(zhí)行完成gitinit命令后,git倉(cāng)庫根目錄下生成一個(gè).git目錄,該.git目錄即為初始狀態(tài)的特定git庫。
在本發(fā)明中,打包模塊信息設(shè)為所述特定git庫的匹配閾值的同時(shí),將項(xiàng)目編碼作為組名,將項(xiàng)目編碼加唯一標(biāo)識(shí)碼作為特定git庫的庫名,通過項(xiàng)目編碼和唯一標(biāo)識(shí)碼保證特定git庫ssh的唯一性。
s33、管理服務(wù)器將獲取的用戶及其測(cè)試項(xiàng)目集上傳至特定git庫,與匹配閾值比對(duì),判斷是否為apk打包對(duì)象;如是,則加入特定git庫。
該步驟中,所述判斷是否為apk打包對(duì)象的方法為:
s330、將管理服務(wù)器獲取的用戶與apk打包項(xiàng)目的參與人員列表匹配,如匹配成功,則滿足apk打包項(xiàng)目的參與人員條件;
s331、判斷為滿足apk打包項(xiàng)目的參與人員條件后,獲取該用戶的測(cè)試項(xiàng)目集的上下文信息;用gitadd命令告訴特定git庫開始對(duì)測(cè)試項(xiàng)目集文件進(jìn)行跟蹤,并提交至特定git庫。
圖4示出了本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的方法中多執(zhí)行節(jié)點(diǎn)執(zhí)行原理的結(jié)構(gòu)圖,所述在jenkins平臺(tái)上建立有一個(gè)打包任務(wù)分配節(jié)點(diǎn)和n個(gè)打包任務(wù)執(zhí)行節(jié)點(diǎn),其中n為自然數(shù);所述打包任務(wù)分配節(jié)點(diǎn)與git庫中的特定git庫連接,獲取待執(zhí)行的任務(wù)。
圖5則示出了本發(fā)明jenkins平臺(tái)中多執(zhí)行節(jié)點(diǎn)執(zhí)行方法的示意圖。所述方法體現(xiàn)在搭建jenkins平臺(tái)時(shí),具體包括下述內(nèi)容:
s40、在jenkins平臺(tái)上建立一個(gè)打包任務(wù)分配節(jié)點(diǎn)和n個(gè)打包任務(wù)執(zhí)行節(jié)點(diǎn),其中n為自然數(shù);
s41、在jenkins執(zhí)行任務(wù)過程中,到達(dá)執(zhí)行時(shí)間,則查詢特定git庫的任務(wù),此時(shí)任務(wù)狀態(tài)為待執(zhí)行,特定git庫分配任務(wù)給jenkins平臺(tái)的打包任務(wù)分配節(jié)點(diǎn),再經(jīng)由打包任務(wù)分配節(jié)點(diǎn)將任務(wù)平均分配給所有的任務(wù)執(zhí)行節(jié)點(diǎn),并更新狀態(tài)為執(zhí)行中;
s42、在執(zhí)行apk打包和加固時(shí),監(jiān)測(cè)任務(wù)執(zhí)行節(jié)點(diǎn)的狀態(tài),并根據(jù)n個(gè)任務(wù)執(zhí)行節(jié)點(diǎn)的狀態(tài)反饋至git服務(wù)器,并采取相應(yīng)操作;
該步驟的相應(yīng)操作具體包括下述情況:
情況一、當(dāng)加固狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)為零,且空閑狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)大于打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)的2倍時(shí),則打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)強(qiáng)制離線,并更新狀態(tài)為待執(zhí)行,到達(dá)預(yù)設(shè)時(shí)間后,特定git庫重新分配待執(zhí)行狀態(tài)的任務(wù)給jenkins平臺(tái)的打包任務(wù)分配節(jié)點(diǎn)。例如,任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)為10,空閑狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)為7,打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)則為3,屬于情況一的范圍,則將3個(gè)任務(wù)執(zhí)行節(jié)點(diǎn)關(guān)閉。
情況二、當(dāng)加固狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)為零,且空閑狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)不大于打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)的2倍時(shí),記錄該情況出現(xiàn)的初始時(shí)間點(diǎn),且各任務(wù)執(zhí)行節(jié)點(diǎn)正常工作。
經(jīng)過預(yù)設(shè)的評(píng)估時(shí)間后,如加固狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)仍然為零,且空閑狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)仍然不大于打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)的2倍,則打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)強(qiáng)制離線,并更新狀態(tài)為待執(zhí)行;否則,各任務(wù)執(zhí)行節(jié)點(diǎn)正常工作。在一個(gè)具體的舉例中,例如,任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)為10,空閑狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)為5,打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)則為5,屬于上述情況的范圍,則各任務(wù)執(zhí)行節(jié)點(diǎn)正常工作,且記錄該檢測(cè)時(shí)間點(diǎn),即初始時(shí)間點(diǎn),例如為06:10;預(yù)設(shè)的評(píng)估時(shí)間為20分鐘,則經(jīng)過20分鐘后,即時(shí)間點(diǎn)為06:30時(shí),檢測(cè)所有任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)的情況,空閑狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)仍然為5,打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)數(shù)仍然為5,則將打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)關(guān)閉。
情況一和情況二發(fā)生強(qiáng)制離線事件后,在到達(dá)預(yù)設(shè)時(shí)間時(shí),特定git庫重新分配待執(zhí)行狀態(tài)的任務(wù)給jenkins平臺(tái)的打包任務(wù)分配節(jié)點(diǎn)。
上述中,所述預(yù)設(shè)時(shí)間為自n個(gè)任務(wù)執(zhí)行節(jié)點(diǎn)全部離線起算的時(shí)間段;所述空閑狀態(tài)是指當(dāng)前執(zhí)行節(jié)點(diǎn)數(shù)為零的狀況。
情況三、在除情況一和情況二的狀態(tài)外,任務(wù)執(zhí)行節(jié)點(diǎn)按照正常程序工作,直至完成打包及加固工作。
本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的系統(tǒng)在管理服務(wù)器上搭建jenkins環(huán)境和git環(huán)境,管理服務(wù)器實(shí)時(shí)獲取目標(biāo)測(cè)試代碼集,并存放至git倉(cāng)庫,jenkins從git倉(cāng)庫中直接獲得目標(biāo)測(cè)試代碼集,進(jìn)行apk安裝包打包。
圖6示出了本發(fā)明在服務(wù)器上自動(dòng)打包apk安裝包的系統(tǒng)的具體結(jié)構(gòu)圖。所述系統(tǒng)包括下述模塊。
打包環(huán)境搭建模塊100,用于在管理服務(wù)器上搭建jenkins平臺(tái),在其平臺(tái)配置各工具插件的路徑及信息,建立gradle命令任務(wù)。
信息實(shí)時(shí)獲取模塊110,用于實(shí)時(shí)獲取目標(biāo)項(xiàng)目代碼的測(cè)試代碼,生成測(cè)試項(xiàng)目集,并存放置特定git庫。
打包對(duì)象選取模塊120,包括錄入單元121、apk打包項(xiàng)目創(chuàng)建單元122、權(quán)限指定單元123、特定git庫生成單元124以及閾值匹配單元125。
所述錄入單元121用于通過界面輸入apk打包項(xiàng)目信息和需要使用apk打包項(xiàng)目的參與人員信息。所述apk打包項(xiàng)目創(chuàng)建單元122基于錄入信息進(jìn)行項(xiàng)目信息配置,創(chuàng)建apk打包項(xiàng)目。所述權(quán)限指定單元123用于對(duì)錄入的需要使用apk打包項(xiàng)目的參與人員配置apk打包權(quán)限。所述特定git庫生成單元124用于生成一個(gè).git目錄,即特定git庫,并將打包模塊信息設(shè)為所述特定git庫的匹配閾值。所述閾值匹配單元125用于將管理服務(wù)器獲取的用戶及其測(cè)試項(xiàng)目集上傳至特定git庫,與匹配閾值比對(duì),判斷是否為apk打包對(duì)象。
編碼打包模塊130,基于jenkins平臺(tái)自動(dòng)從特定git庫中獲取目標(biāo)測(cè)試項(xiàng)目集,采用gradle工具對(duì)獲取的測(cè)試項(xiàng)目集文件進(jìn)行編譯打包,生成apk文件。
傳輸腳本模塊140,用于通過接口腳本文件將生成的apk文件移動(dòng)到指定的目錄下。
apk文件加固模塊150,用于通過jenkins平臺(tái)的加固工具包先對(duì)apk文件進(jìn)行簽名,再對(duì)已簽名的apk文件進(jìn)行加固;所述加固是對(duì)指定的特征信息進(jìn)行雙重加密,所述指定的特征信息為androidmainfest.xml以及dex文件。
在具體的實(shí)施例中,所述編碼打包模塊130還包括節(jié)點(diǎn)配置單元131、執(zhí)行節(jié)點(diǎn)監(jiān)測(cè)單元132以及執(zhí)行節(jié)點(diǎn)重新分配單元133。
所述節(jié)點(diǎn)配置單元131用于在jenkins平臺(tái)上建立一個(gè)打包任務(wù)分配節(jié)點(diǎn)和n個(gè)打包任務(wù)執(zhí)行節(jié)點(diǎn),其中n為自然數(shù)。
所述執(zhí)行節(jié)點(diǎn)監(jiān)測(cè)單元132用于在執(zhí)行apk打包和加固時(shí),監(jiān)測(cè)任務(wù)執(zhí)行節(jié)點(diǎn)的狀態(tài),并根據(jù)n個(gè)任務(wù)執(zhí)行節(jié)點(diǎn)的狀態(tài)反饋至git服務(wù)器。
所述執(zhí)行節(jié)點(diǎn)重新分配單元133依據(jù)監(jiān)測(cè)點(diǎn)的n個(gè)任務(wù)執(zhí)行節(jié)點(diǎn)的狀態(tài)符合設(shè)定強(qiáng)制離線條件時(shí),使打包狀態(tài)的任務(wù)執(zhí)行節(jié)點(diǎn)離線,更新狀態(tài)為待執(zhí)行;并在到達(dá)預(yù)設(shè)時(shí)間時(shí),特定git庫重新分配待執(zhí)行狀態(tài)的任務(wù)給jenkins平臺(tái)的打包任務(wù)分配節(jié)點(diǎn)。其中你所述的強(qiáng)制離線條件在上面實(shí)施例中有相關(guān)描述,在此不做重復(fù)。
以上所描述的系統(tǒng)實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動(dòng)的情況下,即可以理解并實(shí)施。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
以上所述的實(shí)施方式,并不構(gòu)成對(duì)該技術(shù)方案保護(hù)范圍的限定。任何在上述實(shí)施方式的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在該技術(shù)方案的保護(hù)范圍之內(nèi)。