一種實現安卓編譯隔離的方法和系統的制作方法
【專利摘要】本發明公開了一種實現安卓編譯隔離的方法和系統。其中所述方法包括:通過前端頁面接收用戶提交的編譯任務;所述編譯任務為安卓編譯任務,且每個編譯任務中包括:待編譯文件在代碼服務器上的存儲路徑信息;將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上,由相應編譯機根據編譯任務從代碼服務器獲取對應的待編譯文件、對待編譯文件啟動一個Docker執行編譯容器,在該Docker執行編譯容器中對待編譯文件進行編譯得到編譯結果文件,將編譯結果文件輸出到公共數據庫,刪除所述Docker執行編譯容器。采用Docker執行編譯容器可以快速、獨立地配置編譯環境,同時占用資源少,編譯效率高。
【專利說明】
_種實現安卓編譯隔禹的方法和系統
技術領域
[0001]本發明涉及編譯領域,具體涉及一種實現安卓編譯隔離的方法和系統。
【背景技術】
[0002]代碼編譯是將程序員編寫的程序源碼通過編譯程序編譯為機器可執行文件的過程。在軟件開發公司中,往往不是由個人而是多人負責開發某個軟件,因此在開發過程中會產生多個版本的代碼,而最終軟件只能由某個最終確定的版本編譯生成,因此許多公司內都搭建了代碼服務器進行代碼的管理。然而現有技術中對于代碼編譯并沒有較為合理的管理方法,由于任一臺開發機上都有可能安裝編譯程序,對代碼執行編譯,導致最終生成的軟件產品質量難以控制。
[0003]特別地,其中針對安卓系統進行的項目,開發者根據效率等多方面的考量往往采用在Linux系統的環境下進行代碼的編譯。由于Linux為開源系統,發行的版本有很多,例如centos、redhat、ubuntu等,如何更有效率地實現編譯環境的配置是亟待解決的問題。
【發明內容】
[0004]鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的實現安卓編譯隔離的方法和系統。
[0005]依據本發明的一個方面,提供了一種實現安卓編譯隔離的方法,包括:
[0006]通過前端頁面接收用戶提交的編譯任務;所述編譯任務為安卓編譯任務,且每個編譯任務中包括:待編譯文件在代碼服務器上的存儲路徑信息;
[0007]將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上,由相應編譯機根據編譯任務從代碼服務器獲取對應的待編譯文件、對待編譯文件啟動一個Docker執行編譯容器,在該Docker執行編譯容器中對待編譯文件進行編譯得到編譯結果文件,將編譯結果文件輸出到公共數據庫,刪除所述Docker執行編譯容器。
[0008]可選地,該方法進一步包括:
[0009]接收各編譯機反饋的編譯信息,將編譯任務以及與編譯任務相關的用戶信息和編譯信息保存到回溯數據庫中。
[0010]可選地,該方法進一步包括:
[0011]將編譯結果文件發送到簽名服務器,由簽名服務器對編譯結果文件進行簽名操作后輸出簽名后的文件,以及將簽名后的文件發送到回溯數據庫中保存一份。
[0012]可選地,所述在該Docker編譯容器中對待編譯文件進行編譯得到編譯結果文件包括:
[0013]在該Docker編譯容器中啟動SSHD進程,并對外映射一個端口,通過SSH方式登錄到該Docker編譯容器中加工編譯環境。
[0014]可選地,該方法進一步包括:
[0015]為該Docker編譯容器掛載指定目錄;所述指定目錄中保存了編譯依賴的資源。
[0016]可選地,每個編譯任務中還包括:編譯環境要求信息;
[0017]所述將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上包括:根據預先搜集的各編譯機的編譯環境信息,將所接收到的編譯任務分配給符合該編譯任務的編譯環境要求的空閑的編譯機。
[0018]可選地,所述根據預先搜集的各編譯機的編譯環境信息,將所接收到的編譯任務分配給符合該編譯任務的編譯環境要求的空閑的編譯機包括:
[0019]將所接收到編譯任務放入編譯任務池中;
[0020]每接收到一個編譯機的任務查詢信息,根據預先搜集的各編譯機的編譯環境信息確定該編譯機的編譯環境信息,從編譯任務池中找出編譯環境要求信息與該編譯機的編譯環境信息匹配的編譯任務分配給該編譯機;
[0021]其中,空閑的編譯機每隔預設時間發送一次任務查詢信息。
[0022]可選地,每個編譯任務中還包括:用戶代碼權限信息;
[0023]該方法在將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上之前,進一步包括:將編譯任務中的用戶代碼權限信息發送給代碼服務器進行校驗,在校驗通過后,在編譯任務中的用戶代碼權限信息中打上校驗通過標志,然后再將編譯任務調度到分布式的編譯機集群中的相應的編譯機上;
[0024]所述由相應編譯機根據編譯任務從代碼服務器獲取對應的待編譯文件包括:相應編譯機根據編譯任務中的打上校驗通過標志的用戶代碼權限信息,從代碼服務器獲取對應的待編譯文件。
[0025]可選地,該方法進一步包括:
[0026]生成對公共數據庫的訪問賬戶信息;
[0027]接收各編譯機在每次啟動時發送的獲取/更新公共數據庫的訪問賬戶信息的請求,將所生成的相應訪問賬戶信息發送給發送請求的編譯機。
[0028]可選地,該方法進一步包括:
[0029]將編譯機反饋的編譯信息,通過前端頁面展示給用戶。
[0030]可選地,該方法進一步包括:
[0031 ]通過前端頁面接收用戶提交的查詢信息;
[0032]根據查詢信息從回溯數據庫和/或公共數據庫中獲取相應的內容,并通過前端頁面展示給用戶。
[0033]可選地,所述編譯信息包括如下中的一種或多種:
[0034]編譯機在執行編譯任務時的編譯環境信息;
[0035]編譯機在執行編譯任務時記錄的編譯日志信息;
[0036]編譯進度信息。
[0037]依據本發明的另一方面,提供了一種實現安卓編譯隔離的系統,包括:中心控制器、分布式的編譯機集群、代碼服務器、公共數據庫;
[0038]中心控制器,適于通過前端頁面接收用戶提交的編譯任務,將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上;其中,所述編譯任務為安卓編譯任務,且每個編譯任務中包括:待編譯文件在代碼服務器上的存儲路徑信息;
[0039]編譯機,適于根據所分配的編譯任務從代碼服務器獲取對應的待編譯文件,對待編譯文件啟動一個Docker執行編譯容器,在該Docker執行編譯容器中對待編譯文件進行編譯得帶編譯結果文件,將編譯結果文件輸出到公共數據庫,刪除所述Docker執行編譯容器。
[0040]可選地,中心控制器,還適于接收各編譯機反饋的編譯信息,將編譯任務以及與編譯任務相關的用戶信息和編譯信息保存到回溯數據庫中。
[0041]可選地,編譯機還將編譯結果文件發送到簽名服務器,由簽名服務器對編譯結果文件進行簽名操作后輸出簽名后的文件,以及將簽名后的文件發送到回溯數據庫中保存一份。
[0042]可選地,編譯機還適于在該Docker編譯容器中啟動SSHD進程,并對外映射一個端口,通過SSH方式登錄到該Docker編譯容器中加工編譯環境。
[0043]可選地,編譯機為該Docker編譯容器掛載指定目錄;所述指定目錄中保存了編譯依賴的資源。
[0044]可選地,每個編譯任務中還包括:編譯環境要求信息;
[0045]所述中心控制器,適于根據預先搜集的各編譯機的編譯環境信息,將所接收到的編譯任務分配給符合該編譯任務的編譯環境要求的空閑的編譯機。
[0046]可選地,所述中心控制器,適于將所接收到編譯任務放入編譯任務池中;每接收到一個編譯機的任務查詢信息,根據預先搜集的各編譯機的編譯環境信息確定該編譯機的編譯環境信息,從編譯任務池中找出編譯環境要求信息與該編譯機的編譯環境信息匹配的編譯任務分配給該編譯機;
[0047]其中,空閑的編譯機每隔預設時間向中心控制器發送一次任務查詢信息。
[0048]可選地,每個編譯任務中還包括:用戶代碼權限信息;
[0049]所述中心控制器,在將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上之前,進一步適于將編譯任務中的用戶代碼權限信息發送給代碼服務器進行校驗,在校驗通過后,在編譯任務中的用戶代碼權限信息中打上校驗通過標志,然后再將編譯任務調度到相應的編譯機上;
[0050]編譯機適于根據編譯任務中的打上校驗通過標志的用戶代碼權限信息,從代碼服務器獲取對應的待編譯文件。
[0051]可選地,所述中心控制器,進一步適于生成對公共數據庫的訪問賬戶信息;接收各編譯機在每次啟動時發送的獲取/更新公共數據庫的訪問賬戶信息的請求,將所生成的相應訪問賬戶信息發送給發送請求的編譯機。
[0052]可選地,所述中心控制器,進一步適于將編譯機反饋的編譯信息,通過前端頁面展示給用戶。
[0053]可選地,所述中心控制器,進一步適于通過前端頁面接收用戶提交的查詢信息;
[0054]根據查詢信息從回溯數據庫和/或公共數據庫中獲取相應的內容,并通過前端頁面展示給用戶。
[0055]可選地,所述編譯信息包括如下中的一種或多種:
[0056]編譯機在執行編譯任務時的編譯環境信息;
[0057]編譯機在執行編譯任務時記錄的編譯日志信息;
[0058]編譯進度信息。
[0059]由上述可知,本發明的技術方案,在多臺編譯機上執行文件的編譯,這些編譯機構成了分布式的編譯機集群,在通過前端頁面接收到用戶提交的編譯任務后,從編譯任務中提取待編譯代碼在代碼服務器中的存儲路徑信息,將編譯任務調度到合適的編譯機后便可以根據存儲路徑信息獲取待編譯文件進行編譯,具體地,采用為每個待編譯文件臨時生成的Docker執行編譯容器來實現該過程。生成的編譯結果文件被輸出到公共數據庫中進行保存。該技術方案實現了針對安卓系統開發的待編譯文件的分布式編譯,提供了獨立、統一管理的編譯環境,控制了成品質量;同時編譯的結果文件保存在公共數據庫中方便提取和調用;采用Docker執行編譯容器可以快速、獨立地配置編譯環境,同時占用資源少,編譯效率尚O
[0060]上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,而可依照說明書的內容予以實施,并且為了讓本發明的上述和其它目的、特征和優點能夠更明顯易懂,以下特舉本發明的【具體實施方式】。
【附圖說明】
[0061]通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0062]圖1示出了根據本發明一個實施例的一種實現安卓編譯隔離的方法的流程圖;
[0063]圖2示出了根據本發明一個實施例的一種實現安卓編譯隔離的系統的結果示意圖。
【具體實施方式】
[0064]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
[0065]圖1示出了根據本發明一個實施例的一種實現安卓編譯隔離的方法的流程圖,如圖1所示,該方法包括:
[0066]步驟S110,通過前端頁面接收用戶提交的編譯任務;編譯任務為安卓編譯任務,且每個編譯任務中包括:待編譯文件在代碼服務器上的存儲路徑信息。
[0067]步驟S120,將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上,由相應編譯機根據編譯任務從代碼服務器獲取對應的待編譯文件、對待編譯文件啟動一個Docker執行編譯容器,在該Docker執行編譯容器中對待編譯文件進行編譯得到編譯結果文件,將編譯結果文件輸出到公共數據庫,刪除Docker執行編譯容器。
[0068]Docker是使用沙箱機制實現的一種應用容器引擎,開發者可以打包他們的應用和依賴包到一個可移植的容器(Docker執行編譯容器)中。由于Docker基于LXC(LinuxContainer)的輕量級虛擬化的特點,其相比KVM虛擬機等具有啟動快,資源占用小等顯著優勢,因此十分適合代碼編譯這種需要快速啟停的任務,以及便于實現自動化控制和編譯環境的配置。
[0069]可見,圖1所示的方法,在多臺編譯機上執行文件的編譯,這些編譯機構成了分布式的編譯機集群,在通過前端頁面接收到用戶提交的編譯任務后,從編譯任務中提取待編譯代碼在代碼服務器中的存儲路徑信息,將編譯任務調度到合適的編譯機后便可以根據存儲路徑信息獲取待編譯文件進行編譯,具體地,采用為每個待編譯文件臨時生成的Docker執行編譯容器來實現該過程。生成的編譯結果文件被輸出到公共數據庫中進行保存。該技術方案實現了針對安卓系統開發的待編譯文件的分布式編譯,提供了獨立、統一管理的編譯環境,控制了成品質量;同時編譯的結果文件保存在公共數據庫中方便提取和調用;采用Docker執行編譯容器可以快速、獨立地配置編譯環境,同時占用資源少,編譯效率高。
[0070]在本發明的一個實施例中,圖1所示的方法進一步包括:接收各編譯機反饋的編譯信息,將編譯任務以及與編譯任務相關的用戶信息和編譯信息保存到回溯數據庫中。
[0071]回溯數據庫中的相關信息便于日后問題的回溯和復查,并且本實施例中的步驟與前述各步驟進行結合,為安卓編譯隔離實現了整體的可控、可溯的編譯框架。
[0072]在本發明的一個實施例中,上述方法進一步包括:將編譯結果文件發送到簽名服務器,由簽名服務器對編譯結果文件進行簽名操作后輸出簽名后的文件,以及將簽名后的文件發送到回溯數據庫中保存一份。
[0073]編譯結果文件進行簽名后就擁有了軟件開發者的認證,而軟件開發公司中可能包括多個開發項目組,各項目組所使用的簽名證書可能是不同的,因此優選地,在本實施例中為不同的開發項目組組配置不同的簽名證書。進一步地,簽名操作是對編譯結果文件進行的操作,因此結合以上因素,可以將簽名操作以獨立的簽名服務器的方式進行實現,這樣就可以從公共數據庫中獲取到編譯結果文件進行簽名操作,使得簽名操作與編譯操作相互獨立,更有效率。簽名后的文件既可以發送到回溯數據庫中保存一份,同樣也可以推送至公共數據庫便于其他編譯任務調用。
[0074]在本發明的一個實施例中,圖1所示的方法中,在該Docker編譯容器中對待編譯文件進行編譯得到編譯結果文件包括:在該Docker編譯容器中啟動SSHD進程,并對外映射一個端口,通過SSH方式登錄到該Docker編譯容器中加工編譯環境。
[0075]Docker執行編譯容器可以基于鏡像文件通過命令行的方式啟動,其中,鏡像可以看作是包含有某些軟件的容器系統,例如Ubuntu就是一個官方的基礎鏡像,很多鏡像都是基于這個鏡像“衍生”,這些鏡像包含基本的ubuntu系統。又例如,hipache是一個官方的鏡像容器,運行后可以支持http和websocket的代理服務,這個鏡像本身也是基于ubuntu的。每個Docker執行編譯容器都可以使用Docker PulI的方式從Docker官方源下載鏡像文件。除此之外,開發者還可以根據需要自行編譯或者從github獲取DockerFi Ie文件。Dockerf i Ie可以被看成是一個腳本,這個腳本會在容器每次啟動時執行,在Dockerf i Ie中包含編寫好的基礎軟件的安裝腳本和配置腳本。在啟動Docker執行編譯容器后,在該Docker編譯容器中啟動SSHD進程,并對外映射一個端口,用戶可以通過SSH方式登錄到該Docker編譯容器中加工編譯環境。
[0076]具體地,以鏡像方式為例,基于每個鏡像生成Docker編譯執行容器和SSHD進程容器,上述容器是隨編譯任務創建自動創建啟動的。兩個容器共享同一個目錄,以此目錄保留公共數據,例如JDK( Java Development Kit,Java開發工具包)、Android SDK(SoftwareDevelopment Kit,軟件開發工具包)、Android NDK(Native Development Kit,原生開發工具包)、gradle等公用數據資源,也即是說,各種編譯依賴的開發包、數據、工具等都可以存放到該目錄下。因此在本發明的一個實施例中,圖1所示的方法進一步包括:為該Docker編譯容器掛載指定目錄;指定目錄中保存了編譯依賴的資源。
[0077]下面給出了Docker編譯執行容器和SSHD容器的啟動代碼示例:
[0078]//SSHD 容器
[0079]docker run-d-1t—name testsssh-p 21000:22~v/data01/docker_build/test:/android/build ssh
[0080]//執行編譯容器
[0081]docker run_d-1t-name buiIdnameOOl_v/data01/docker_build/test_id:/android/build/android/build/run.sh
[0082]具體地,執行編譯容器啟動前會創建編譯腳本run.sh。(下例是一個gradle編譯android工程的腳本示例)
[0083]#in workpath
[0084]cd$QBUILD_PATH
[0085]#set local.properties
[0086]echo’ sdk.dir = $ANDROID_SDK_H0ME’ >>local.properties[0087 ] echo’ ndk.dir = $ANDROID_NDK_H0ME,>>local.properties
[0088]#build to$QBUILD_L0G
[0089]cd novel
[0090]gradle—debug—stacktrace clean assemblehaosoureader>>$QBUILD_L0G2>&l
[0091]#backup buildout
[0092]cp $ QBUILD_PATH/nove1/reader/build/outputs/apk/*.apk$QBUILD_0UT
[0093]其中,docker-d參數實現了每次run.sh執行完成后,容器自動刪除。
[0094]每次SSHD容器修改的數據目錄會作為原始數據保留,Docker編譯執行容器創建之前會將次目錄重新拷貝一份作為實際執行目錄。例如SSHD容器掛載目錄/data01/docker_build/test執行編譯時,將次目錄拷貝成/data01/docker_build/test_id id作為編譯任務標記唯一標識,由此每次編譯使用的環境繼承于初始環境,可以單獨使用而互不影響。
[0095]在本發明的一個實施例中,圖1所示的方法中,每個編譯任務中還包括:編譯環境要求信息;將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上包括:根據預先搜集的各編譯機的編譯環境信息,將所接收到的編譯任務分配給符合該編譯任務的編譯環境要求的空閑的編譯機。
[0096]例如,根據開發項目的需求不同,編譯過程中可以根據設置參數的不同生成不同的編譯結果文件,例如要求生成的編譯結果文件包含某特定類型的調試用文件。如果某個開發項目強制要求編譯輸出該文件,則可以在后臺將該選項設置為無法在前端頁面進行操作的默認設置項。
[0097]在本發明的一個實施例中,上述方法中,根據預先搜集的各編譯機的編譯環境信息,將所接收到的編譯任務分配給符合該編譯任務的編譯環境要求的空閑的編譯機包括:將所接收到編譯任務放入編譯任務池中;每接收到一個編譯機的任務查詢信息,根據預先搜集的各編譯機的編譯環境信息確定該編譯機的編譯環境信息,從編譯任務池中找出編譯環境要求信息與該編譯機的編譯環境信息匹配的編譯任務分配給該編譯機;其中,空閑的編譯機每隔預設時間發送一次任務查詢信息。
[0098]例如,空閑的編譯機A每隔5分鐘發送一次任務查詢信息,當接收到該信息后,從編譯環境信息列表中確定該編譯機A安裝有JDK,可以執行該編譯任務,因此從編譯任務池中確定了相應任務并分配給編譯機A。
[0099]在本發明的一個實施例中,圖1所示的方法中,每個編譯任務中還包括:用戶代碼權限信息;該方法在將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上之前,進一步包括:將編譯任務中的用戶代碼權限信息發送給代碼服務器進行校驗,在校驗通過后,在編譯任務中的用戶代碼權限信息中打上校驗通過標志,然后再將編譯任務調度到分布式的編譯機集群中的相應的編譯機上;由相應編譯機根據編譯任務從代碼服務器獲取對應的待編譯文件包括:相應編譯機根據編譯任務中的打上校驗通過標志的用戶代碼權限信息,從代碼服務器獲取對應的待編譯文件。
[0100]—個開發項目在代碼服務器中可能存在多個版本的待編譯文件,同時在代碼服務器中存在多個開發項目的待編譯文件,為了安全控制,可以要求每個項目只有權限較高的用戶可以訪問并提取其中的待編譯文件進行編譯。在本實施例中,用戶A通過前端頁面提交編譯任務時,需要在頁面的相應位置輸入用戶代碼權限信息,例如代碼服務器的登錄名和密碼,則通過該用戶代碼權限信息先去代碼服務器進行檢驗,通過后在編譯任務中的用戶代碼權限信息中打上校驗通過標志,再將編譯任務調度至相應的編譯機上,編譯機編譯時通過打上校驗通過標志的用戶代碼權限信息,從代碼服務器獲取對應的待編譯文件進行編譯。
[0101]在本發明的一個實施例中,圖1所示的方法進一步包括:生成對公共數據庫的訪問賬戶信息;接收各編譯機在每次啟動時發送的獲取/更新公共數據庫的訪問賬戶信息的請求,將所生成的相應訪問賬戶信息發送給發送請求的編譯機。
[0102]由于公共數據庫中包含大量的從代碼服務器獲取的內容,因此如果不對公共數據庫的訪問權限加以限制,很容易引起安全問題,因此在本實施例中,需要生成對公共數據庫的訪問賬戶信息,使得編譯機根據獲取.更新的訪問賬戶信息來訪問公共數據庫。
[0103]在本發明的一個實施例中,圖1所示的方法進一步包括:將編譯機反饋的編譯信息,通過前端頁面展示給用戶。具體地,編譯信息包括如下中的一種或多種:編譯機在執行編譯任務時的編譯環境信息;編譯機在執行編譯任務時記錄的編譯日志信息;編譯進度信息。用戶可以根據這些信息了解到編譯執行的狀況,方便進行中斷、回滾等操作。
[0104]在本發明的一個實施例中,上述方法進一步包括:通過前端頁面接收用戶提交的查詢信息;根據查詢信息從回溯數據庫和/或公共數據庫中獲取相應的內容,并通過前端頁面展示給用戶。
[0105]其中,提交查詢信息的過程與編譯過程可以是相互獨立的,例如在提交編譯任務前,查看公共數據庫中是否包含所需的頭文件,又例如,在編譯結果文件出現問題需要排查時,訪問回溯數據庫調取之前執行過的編譯任務等信息。
[0106]圖2示出了根據本發明一個實施例的一種實現安卓編譯隔離的系統的結果示意圖,如圖2所示,實現安卓編譯隔離的系統200包括:中心控制器210、分布式的編譯機220集群、代碼服務器230、公共數據庫240。
[0107]中心控制器210,適于通過前端頁面接收用戶提交的編譯任務,將所接收到的編譯任務調度到分布式的編譯機220集群中的相應編譯機220上;其中,編譯任務為安卓編譯任務,且每個編譯任務中包括:待編譯文件在代碼服務器230上的存儲路徑信息。
[0108]編譯機220,適于根據所分配的編譯任務從代碼服務器230獲取對應的待編譯文件,對待編譯文件啟動一個Docker執行編譯容器,在該Docker執行編譯容器中對待編譯文件進行編譯得帶編譯結果文件,將編譯結果文件輸出到公共數據庫240,刪除Docker執行編譯容器。
[0109]可見,圖2所示的系統,在多臺編譯機上執行文件的編譯,這些編譯機構成了分布式的編譯機集群,在通過前端頁面接收到用戶提交的編譯任務后,從編譯任務中提取待編譯代碼在代碼服務器中的存儲路徑信息,將編譯任務調度到合適的編譯機后便可以根據存儲路徑信息獲取待編譯文件進行編譯,具體地,采用為每個待編譯文件臨時生成的Docker執行編譯容器來實現該過程。生成的編譯結果文件被輸出到公共數據庫中進行保存。該技術方案實現了針對安卓系統開發的待編譯文件的分布式編譯,提供了獨立、統一管理的編譯環境,控制了成品質量;同時編譯的結果文件保存在公共數據庫中方便提取和調用;采用Docker執行編譯容器可以快速、獨立地配置編譯環境,同時占用資源少,編譯效率高。
[0110]在本發明的一個實施例中,上述系統中,中心控制器210,還適于接收各編譯機220反饋的編譯信息,將編譯任務以及與編譯任務相關的用戶信息和編譯信息保存到回溯數據庫中。
[0111]在本發明的一個實施例中,上述系統中,編譯機220還將編譯結果文件發送到簽名服務器,由簽名服務器對編譯結果文件進行簽名操作后輸出簽名后的文件,以及將簽名后的文件發送到回溯數據庫中保存一份。
[0112]在本發明的一個實施例中,上述系統中,編譯機220還適于在該Docker編譯容器中啟動SSHD進程,并對外映射一個端口,通過SSH方式登錄到該Docker編譯容器中加工編譯環境。
[0113]在本發明的一個實施例中,上述系統中,編譯機220為該Docker編譯容器掛載指定目錄;指定目錄中保存了編譯依賴的資源。
[0114]在本發明的一個實施例中,上述系統中,每個編譯任務中還包括:編譯環境要求信息;中心控制器210,適于根據預先搜集的各編譯機220的編譯環境信息,將所接收到的編譯任務分配給符合該編譯任務的編譯環境要求的空閑的編譯機220。
[0115]在本發明的一個實施例中,上述系統中,中心控制器210,適于將所接收到編譯任務放入編譯任務池中;每接收到一個編譯機220的任務查詢信息,根據預先搜集的各編譯機220的編譯環境信息確定該編譯機220的編譯環境信息,從編譯任務池中找出編譯環境要求信息與該編譯機220的編譯環境信息匹配的編譯任務分配給該編譯機220;其中,空閑的編譯機220每隔預設時間向中心控制器210發送一次任務查詢信息。
[0116]在本發明的一個實施例中,上述系統中,每個編譯任務中還包括:用戶代碼權限信息;中心控制器210,在將所接收到的編譯任務調度到分布式的編譯機220集群中的相應編譯機220上之前,進一步適于將編譯任務中的用戶代碼權限信息發送給代碼服務器230進行校驗,在校驗通過后,在編譯任務中的用戶代碼權限信息中打上校驗通過標志,然后再將編譯任務調度到相應的編譯機220上;編譯機220適于根據編譯任務中的打上校驗通過標志的用戶代碼權限信息,從代碼服務器230獲取對應的待編譯文件。
[0117]在本發明的一個實施例中,上述系統中,中心控制器210,進一步適于生成對公共數據庫240的訪問賬戶信息;接收各編譯機220在每次啟動時發送的獲取/更新公共數據庫240的訪問賬戶信息的請求,將所生成的相應訪問賬戶信息發送給發送請求的編譯機220。
[0118]在本發明的一個實施例中,上述系統中,中心控制器210,進一步適于將編譯機220反饋的編譯信息,通過前端頁面展示給用戶。
[0119]在本發明的一個實施例中,上述系統中,中心控制器210,進一步適于通過前端頁面接收用戶提交的查詢信息;
[0120]根據查詢信息從回溯數據庫和/或公共數據庫240中獲取相應的內容,并通過前端頁面展示給用戶。
[0121]在本發明的一個實施例中,上述系統中,編譯信息包括如下中的一種或多種:編譯機220在執行編譯任務時的編譯環境信息;編譯機220在執行編譯任務時記錄的編譯日志信息;編譯進度信息。
[0122]需要說明的是,上述各系統實施例的具體實現方式與前述對應方法實施例的【具體實施方式】相同,在此不再贅述。
[0123]綜上所述,本發明的技術方案,在多臺編譯機上執行文件的編譯,這些編譯機構成了分布式的編譯機集群,在通過前端頁面接收到用戶提交的編譯任務后,從編譯任務中提取待編譯代碼在代碼服務器中的存儲路徑信息,將編譯任務調度到合適的編譯機后便可以根據存儲路徑信息獲取待編譯文件進行編譯,具體地,采用為每個待編譯文件臨時生成的Docker執行編譯容器來實現該過程。生成的編譯結果文件被輸出到公共數據庫中進行保存。該技術方案實現了針對安卓系統開發的待編譯文件的分布式編譯,提供了獨立、統一管理的編譯環境,控制了成品質量;同時編譯的結果文件保存在公共數據庫中方便提取和調用;采用Docker執行編譯容器可以快速、獨立地配置編譯環境,同時占用資源少,編譯效率尚O
[0124]需要說明的是:
[0125]在此提供的算法和顯示不與任何特定計算機、虛擬裝置或者其它設備固有相關。各種通用裝置也可以與基于在此的示教一起使用。根據上面的描述,構造這類裝置所要求的結構是顯而易見的。此外,本發明也不針對任何特定編程語言。應當明白,可以利用各種編程語言實現在此描述的本發明的內容,并且上面對特定語言所做的描述是為了披露本發明的最佳實施方式。
[0126]在此處所提供的說明書中,說明了大量具體細節。然而,能夠理解,本發明的實施例可以在沒有這些具體細節的情況下實踐。在一些實例中,并未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。
[0127]類似地,應當理解,為了精簡本公開并幫助理解各個發明方面中的一個或多個,在上面對本發明的示例性實施例的描述中,本發明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發明要求比在每個權利要求中所明確記載的特征更多的特征。更確切地說,如下面的權利要求書所反映的那樣,發明方面在于少于前面公開的單個實施例的所有特征。因此,遵循【具體實施方式】的權利要求書由此明確地并入該【具體實施方式】,其中每個權利要求本身都作為本發明的單獨實施例。
[0128]本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變并且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
[0129]此外,本領域的技術人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發明的范圍之內并且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
[0130]本發明的各個部件實施例可以以硬件實現,或者以在一個或者多個處理器上運行的軟件模塊實現,或者以它們的組合實現。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數字信號處理器(DSP)來實現根據本發明實施例的實現安卓編譯隔離的系統中的一些或者全部部件的一些或者全部功能。本發明還可以實現為用于執行這里所描述的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產品)。這樣的實現本發明的程序可以存儲在計算機可讀介質上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網網站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
[0131]應該注意的是上述實施例對本發明進行說明而不是對本發明進行限制,并且本領域技術人員在不脫離所附權利要求的范圍的情況下可設計出替換實施例。在權利要求中,不應將位于括號之間的任何參考符號構造成對權利要求的限制。單詞“包含”不排除存在未列在權利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
[0132]本發明的實施例公開了Al、一種實現安卓編譯隔離的方法,其中,該方法包括:
[0133]通過前端頁面接收用戶提交的編譯任務;所述編譯任務為安卓編譯任務,且每個編譯任務中包括:待編譯文件在代碼服務器上的存儲路徑信息;
[0134]將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上,由相應編譯機根據編譯任務從代碼服務器獲取對應的待編譯文件、對待編譯文件啟動一個Docker執行編譯容器,在該Docker執行編譯容器中對待編譯文件進行編譯得到編譯結果文件,將編譯結果文件輸出到公共數據庫,刪除所述Docker執行編譯容器。
[0135]A2、如Al所述的方法,其中,該方法進一步包括:
[0136]接收各編譯機反饋的編譯信息,將編譯任務以及與編譯任務相關的用戶信息和編譯信息保存到回溯數據庫中。
[0137]A3、如A2所述的方法,其中,該方法進一步包括:
[0138]將編譯結果文件發送到簽名服務器,由簽名服務器對編譯結果文件進行簽名操作后輸出簽名后的文件,以及將簽名后的文件發送到回溯數據庫中保存一份。
[0139]A4、如Al所述的方法,其中,所述在該Docker編譯容器中對待編譯文件進行編譯得到編譯結果文件包括:
[0140]在該Docker編譯容器中啟動SSHD進程,并對外映射一個端口,通過SSH方式登錄到該Docker編譯容器中加工編譯環境。
[0141 ] A5、如Al所述的方法,其中,該方法進一步包括:
[0142]為該Docker編譯容器掛載指定目錄;所述指定目錄中保存了編譯依賴的資源。
[0143]A6、如Al所述的方法,其中,
[0144]每個編譯任務中還包括:編譯環境要求信息;
[0145]所述將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上包括:根據預先搜集的各編譯機的編譯環境信息,將所接收到的編譯任務分配給符合該編譯任務的編譯環境要求的空閑的編譯機。
[0146]A7、如A6所述的方法,其中,所述根據預先搜集的各編譯機的編譯環境信息,將所接收到的編譯任務分配給符合該編譯任務的編譯環境要求的空閑的編譯機包括:
[0147]將所接收到編譯任務放入編譯任務池中;
[0148]每接收到一個編譯機的任務查詢信息,根據預先搜集的各編譯機的編譯環境信息確定該編譯機的編譯環境信息,從編譯任務池中找出編譯環境要求信息與該編譯機的編譯環境信息匹配的編譯任務分配給該編譯機;
[0149]其中,空閑的編譯機每隔預設時間發送一次任務查詢信息。
[0150]A8、如Al所述的方法,其中,
[0151 ]每個編譯任務中還包括:用戶代碼權限信息;
[0152]該方法在將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上之前,進一步包括:將編譯任務中的用戶代碼權限信息發送給代碼服務器進行校驗,在校驗通過后,在編譯任務中的用戶代碼權限信息中打上校驗通過標志,然后再將編譯任務調度到分布式的編譯機集群中的相應的編譯機上;
[0153]所述由相應編譯機根據編譯任務從代碼服務器獲取對應的待編譯文件包括:相應編譯機根據編譯任務中的打上校驗通過標志的用戶代碼權限信息,從代碼服務器獲取對應的待編譯文件。
[0154]A9、如Al所述的方法,其中,該方法進一步包括:
[0155]生成對公共數據庫的訪問賬戶信息;
[0156]接收各編譯機在每次啟動時發送的獲取/更新公共數據庫的訪問賬戶信息的請求,將所生成的相應訪問賬戶信息發送給發送請求的編譯機。
[0157]A10、如Al所述的方法,其中,該方法進一步包括:
[0158]將編譯機反饋的編譯信息,通過前端頁面展示給用戶。
[0159]All、如A2所述的方法,其中,該方法進一步包括:
[0160]通過前端頁面接收用戶提交的查詢信息;
[0161]根據查詢信息從回溯數據庫和/或公共數據庫中獲取相應的內容,并通過前端頁面展示給用戶。
[0162]A12、如Al所述的方法,其中,所述編譯信息包括如下中的一種或多種:
[0163]編譯機在執行編譯任務時的編譯環境信息;
[0164]編譯機在執行編譯任務時記錄的編譯日志信息;
[0165]編譯進度信息。
[0166]本發明的實施例還公開了B13、一種實現安卓編譯隔離的系統,其中,該編譯系統包括:中心控制器、分布式的編譯機集群、代碼服務器、公共數據庫;
[0167]中心控制器,適于通過前端頁面接收用戶提交的編譯任務,將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上;其中,所述編譯任務為安卓編譯任務,且每個編譯任務中包括:待編譯文件在代碼服務器上的存儲路徑信息;
[0168]編譯機,適于根據所分配的編譯任務從代碼服務器獲取對應的待編譯文件,對待編譯文件啟動一個Docker執行編譯容器,在該Docker執行編譯容器中對待編譯文件進行編譯得帶編譯結果文件,將編譯結果文件輸出到公共數據庫,刪除所述Docker執行編譯容器。
[0169]B14、如B13所述的系統,其中,
[0170]中心控制器,還適于接收各編譯機反饋的編譯信息,將編譯任務以及與編譯任務相關的用戶信息和編譯信息保存到回溯數據庫中。
[0171]B15、如B14所述的系統,其中,
[0172]編譯機還將編譯結果文件發送到簽名服務器,由簽名服務器對編譯結果文件進行簽名操作后輸出簽名后的文件,以及將簽名后的文件發送到回溯數據庫中保存一份。
[0173]B16、如B13所述的系統,其中,
[0174]編譯機還適于在該Docker編譯容器中啟動SSHD進程,并對外映射一個端口,通過SSH方式登錄到該Docker編譯容器中加工編譯環境。
[0175]B17、如B13所述的系統,其中,
[0176]編譯機為該Docker編譯容器掛載指定目錄;所述指定目錄中保存了編譯依賴的資源。
[0177]B18、如B13所述的系統,其中,
[0178]每個編譯任務中還包括:編譯環境要求信息;
[0179]所述中心控制器,適于根據預先搜集的各編譯機的編譯環境信息,將所接收到的編譯任務分配給符合該編譯任務的編譯環境要求的空閑的編譯機。
[0180]B19、如B18所述的系統,其中,
[0181]所述中心控制器,適于將所接收到編譯任務放入編譯任務池中;每接收到一個編譯機的任務查詢信息,根據預先搜集的各編譯機的編譯環境信息確定該編譯機的編譯環境信息,從編譯任務池中找出編譯環境要求信息與該編譯機的編譯環境信息匹配的編譯任務分配給該編譯機;
[0182]其中,空閑的編譯機每隔預設時間向中心控制器發送一次任務查詢信息。
[0183]B20、如B13所述的系統,其中,
[0184]每個編譯任務中還包括:用戶代碼權限信息;
[0185]所述中心控制器,在將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上之前,進一步適于將編譯任務中的用戶代碼權限信息發送給代碼服務器進行校驗,在校驗通過后,在編譯任務中的用戶代碼權限信息中打上校驗通過標志,然后再將編譯任務調度到相應的編譯機上;
[0186]編譯機適于根據編譯任務中的打上校驗通過標志的用戶代碼權限信息,從代碼服務器獲取對應的待編譯文件。
[0187]B21、如B13所述的系統,其中,
[0188]所述中心控制器,進一步適于生成對公共數據庫的訪問賬戶信息;接收各編譯機在每次啟動時發送的獲取/更新公共數據庫的訪問賬戶信息的請求,將所生成的相應訪問賬戶信息發送給發送請求的編譯機。
[0189]B22、如B13所述的系統,其中,
[0190]所述中心控制器,進一步適于將編譯機反饋的編譯信息,通過前端頁面展示給用戶。
[0191]B23、如B14所述的系統,其中,
[0192]所述中心控制器,進一步適于通過前端頁面接收用戶提交的查詢信息;根據查詢信息從回溯數據庫和/或公共數據庫中獲取相應的內容,并通過前端頁面展示給用戶。
[0193]B24、如B13所述的系統,其中,所述編譯信息包括如下中的一種或多種:
[0194]編譯機在執行編譯任務時的編譯環境信息;
[0195]編譯機在執行編譯任務時記錄的編譯日志信息;
[0196]編譯進度信息。
【主權項】
1.一種實現安卓編譯隔離的方法,其中,該方法包括: 通過前端頁面接收用戶提交的編譯任務;所述編譯任務為安卓編譯任務,且每個編譯任務中包括:待編譯文件在代碼服務器上的存儲路徑信息; 將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上,由相應編譯機根據編譯任務從代碼服務器獲取對應的待編譯文件、對待編譯文件啟動一個Docker執行編譯容器,在該Docker執行編譯容器中對待編譯文件進行編譯得到編譯結果文件,將編譯結果文件輸出到公共數據庫,刪除所述Docker執行編譯容器。2.如權利要求1所述的方法,其中,該方法進一步包括: 接收各編譯機反饋的編譯信息,將編譯任務以及與編譯任務相關的用戶信息和編譯信息保存到回溯數據庫中。3.如權利要求2所述的方法,其中,該方法進一步包括: 將編譯結果文件發送到簽名服務器,由簽名服務器對編譯結果文件進行簽名操作后輸出簽名后的文件,以及將簽名后的文件發送到回溯數據庫中保存一份。4.如權利要求1所述的方法,其中,所述在該Docker編譯容器中對待編譯文件進行編譯得到編譯結果文件包括: 在該Docker編譯容器中啟動SSHD進程,并對外映射一個端口,通過SSH方式登錄到該Docker編譯容器中加工編譯環境。5.如權利要求1所述的方法,其中,該方法進一步包括: 為該Docker編譯容器掛載指定目錄;所述指定目錄中保存了編譯依賴的資源。6.—種實現安卓編譯隔離的系統,其中,該編譯系統包括:中心控制器、分布式的編譯機集群、代碼服務器、公共數據庫; 中心控制器,適于通過前端頁面接收用戶提交的編譯任務,將所接收到的編譯任務調度到分布式的編譯機集群中的相應編譯機上;其中,所述編譯任務為安卓編譯任務,且每個編譯任務中包括:待編譯文件在代碼服務器上的存儲路徑信息; 編譯機,適于根據所分配的編譯任務從代碼服務器獲取對應的待編譯文件,對待編譯文件啟動一個Docker執行編譯容器,在該Docker執行編譯容器中對待編譯文件進行編譯得帶編譯結果文件,將編譯結果文件輸出到公共數據庫,刪除所述Docker執行編譯容器。7.如權利要求6所述的系統,其中, 中心控制器,還適于接收各編譯機反饋的編譯信息,將編譯任務以及與編譯任務相關的用戶信息和編譯信息保存到回溯數據庫中。8.如權利要求7所述的系統,其中, 編譯機還將編譯結果文件發送到簽名服務器,由簽名服務器對編譯結果文件進行簽名操作后輸出簽名后的文件,以及將簽名后的文件發送到回溯數據庫中保存一份。9.如權利要求6所述的系統,其中, 編譯機還適于在該Docker編譯容器中啟動SSHD進程,并對外映射一個端口,通過SSH方式登錄到該Docker編譯容器中加工編譯環境。10.如權利要求6所述的系統,其中, 編譯機為該Docker編譯容器掛載指定目錄;所述指定目錄中保存了編譯依賴的資源。
【文檔編號】G06F9/45GK106095523SQ201610391290
【公開日】2016年11月9日
【申請日】2016年6月3日 公開號201610391290.6, CN 106095523 A, CN 106095523A, CN 201610391290, CN-A-106095523, CN106095523 A, CN106095523A, CN201610391290, CN201610391290.6
【發明人】張 杰, 王玉琨, 高大鵬
【申請人】北京奇虎科技有限公司, 奇智軟件(北京)有限公司