基于云的構(gòu)建服務(wù)的制作方法
【專利摘要】構(gòu)建軟件產(chǎn)品,特別是大規(guī)模軟件產(chǎn)品的二進(jìn)制代碼包,是高度計(jì)算密集型過(guò)程。因此,希望將工作負(fù)載分發(fā)到大量計(jì)算節(jié)點(diǎn),以便在最優(yōu)的時(shí)間段內(nèi)完成構(gòu)建過(guò)程。提供可被用于高度可用并可動(dòng)態(tài)縮放的分布式構(gòu)建過(guò)程的計(jì)算資源的一個(gè)環(huán)境是彈性計(jì)算云。在這樣的環(huán)境中,按構(gòu)建過(guò)程的資源需求規(guī)定,虛擬機(jī)可被實(shí)例化和被破壞。這具有的優(yōu)點(diǎn)是,專門的硬件是不需要的,并且該硬件上的用到的額外容量在構(gòu)建過(guò)程空閑時(shí)可被用于其它計(jì)算任務(wù)。在此呈現(xiàn)的是用于分發(fā)用于彈性計(jì)算環(huán)境或其它分布式環(huán)境中的高度可用且可縮放構(gòu)建服務(wù)的系統(tǒng)、方法和計(jì)算機(jī)存儲(chǔ)介質(zhì)。
【專利說(shuō)明】基于云的構(gòu)建服務(wù)
[0001]介紹
[0002]構(gòu)建軟件產(chǎn)品特別是大規(guī)模軟件產(chǎn)品的二進(jìn)制代碼包,是一個(gè)高度計(jì)算密集型過(guò)程;因此,希望將工作負(fù)載分發(fā)到大量計(jì)算節(jié)點(diǎn),以便在合理的時(shí)間段內(nèi)完成構(gòu)建過(guò)程。然而,對(duì)這樣的構(gòu)建服務(wù)的需求可能是高度間歇性的,因此不希望專用的構(gòu)建資源在低需求時(shí)段期間處于空閑。因此,在此提供用于利用云資源以便以高度可用的、可動(dòng)態(tài)縮放的且高效的方式分發(fā)構(gòu)建服務(wù)的方法和系統(tǒng)。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的各實(shí)施例涉及用于分發(fā)高度可用的、可動(dòng)態(tài)縮放的且高效的構(gòu)建服務(wù)的系統(tǒng)、方法和計(jì)算機(jī)存儲(chǔ)介質(zhì)。提供可被用于可縮放地分發(fā)的構(gòu)建過(guò)程的計(jì)算資源的一個(gè)環(huán)境是彈性計(jì)算云。在這樣的環(huán)境中,按構(gòu)建過(guò)程的資源需求規(guī)定,虛擬機(jī)可被實(shí)例化和被破壞。此方法的一個(gè)優(yōu)點(diǎn)是,專門的硬件是不需要的,并且該硬件上的額外容量在構(gòu)建過(guò)程空閑時(shí)可被用于其它計(jì)算任務(wù)。然而,對(duì)于特定組件而言保持不被虛擬化可能是有利的。在特定應(yīng)用中,例如,簽名密鑰緊緊地控制在專用服務(wù)器上而不被準(zhǔn)許存儲(chǔ)在共享硬件上。因此,在此揭示的體系結(jié)構(gòu)提供了高效、可縮放、高度可用且安全的系統(tǒng)。
[0004]提供本
【發(fā)明內(nèi)容】
是為了以簡(jiǎn)化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的選擇的概念。本
【發(fā)明內(nèi)容】
不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。
【專利附圖】
【附圖說(shuō)明】
[0005]下面將參考附圖詳細(xì)描述本發(fā)明的說(shuō)明性實(shí)施例,在附圖中:
[0006]圖1描繪了適于實(shí)現(xiàn)本發(fā)明各實(shí)施例的示例性計(jì)算設(shè)備;
[0007]圖2描繪了根據(jù)本發(fā)明的一個(gè)方面的流程圖圖示;
[0008]圖3描繪了適于實(shí)現(xiàn)本發(fā)明的各實(shí)施例的環(huán)境;
[0009]圖4描繪了適于由虛擬機(jī)執(zhí)行的,根據(jù)本發(fā)明的另一方面的用于處理源文件以產(chǎn)生二進(jìn)制代碼包的方法的流程圖圖示;
[0010]圖5描繪了適于由源儲(chǔ)存庫(kù)執(zhí)行的,根據(jù)本發(fā)明的另一方面的用于按需求提供源文件的方法的流程圖圖示;
[0011]圖6描繪了適于由簽名服務(wù)器執(zhí)行的,根據(jù)本發(fā)明的另一方面的用于生成二進(jìn)制代碼文件的數(shù)字簽名的方法的流程圖圖示;
[0012]圖7描繪了適于由構(gòu)建服務(wù)控制器執(zhí)行的,根據(jù)本發(fā)明的另一方面的控制構(gòu)建服務(wù)的方法的流程圖圖示;以及
[0013]圖8描繪了根據(jù)本發(fā)明的又一方面的用于操作虛擬機(jī)服務(wù)器以從源文件中產(chǎn)生二進(jìn)制代碼包的流程圖圖示。
【具體實(shí)施方式】[0014]本發(fā)明的主題用細(xì)節(jié)來(lái)描述,以滿足法定的要求。然而,該描述本身并非旨在限定各權(quán)利要求的范圍。相反,發(fā)明人已設(shè)想所要求保護(hù)的主題還可結(jié)合其它當(dāng)前或未來(lái)技術(shù)以其它方式來(lái)實(shí)施,以包括不同的步驟或類似于本文中所描述的步驟的步驟組合。此外,雖然術(shù)語(yǔ)“步驟”在這里可用于意味著所采用的方法的不同元素,然而該術(shù)語(yǔ)不應(yīng)被解釋為在這里揭示的各步驟之間隱含特定的次序,除非明確地描述了各個(gè)步驟的次序。此外,以下參考附圖詳細(xì)描述了本發(fā)明,各附圖整體通過(guò)引用結(jié)合于此。
[0015]本發(fā)明的各實(shí)施例涉及高度可用的、可縮放、分布式服務(wù)的方法和體系結(jié)構(gòu)。因此,在一個(gè)方面,本發(fā)明包括一種或多種其上包含計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)存儲(chǔ)介質(zhì),該指令在被執(zhí)行時(shí)使得計(jì)算設(shè)備執(zhí)行一種分發(fā)高度可用的、可縮放的構(gòu)建服務(wù)的方法,該方法包括確定要構(gòu)建的分支,標(biāo)識(shí)用于構(gòu)建該分支的至少一部分的虛擬機(jī),并標(biāo)識(shí)要為該分支而傳輸?shù)亩鄠€(gè)源文件,其中該虛擬機(jī)處理多個(gè)源文件的至少一個(gè)源文件以生成對(duì)應(yīng)二進(jìn)制代碼文件。該方法進(jìn)一步包括,將多個(gè)源文件的該源文件傳輸?shù)教摂M機(jī),在該虛擬機(jī)上部署構(gòu)建環(huán)境,并使得該虛擬機(jī)處理多個(gè)源文件的至少該源文件以生成二進(jìn)制代碼文件。該方法還包括,生成二進(jìn)制代碼文件的數(shù)字簽名,將該數(shù)字簽名傳輸?shù)降诙摂M機(jī),并使得至少該第二虛擬機(jī)從至少該二進(jìn)制代碼文件和該數(shù)字簽名中生成二進(jìn)制代碼包。
[0016]在另一方面,本發(fā)明包括一個(gè)高度可用、可縮放、分布式構(gòu)建服務(wù)系統(tǒng),該系統(tǒng)包括多個(gè)虛擬機(jī),每個(gè)虛擬機(jī)接收一個(gè)源文件,處理至少該源文件以生成二進(jìn)制代碼文件,接收對(duì)應(yīng)于該二進(jìn)制代碼文件的數(shù)字簽名,并從至少該二進(jìn)制代碼文件和該數(shù)字簽名中生成二進(jìn)制代碼包。該構(gòu)建系統(tǒng)還包括存儲(chǔ)該源文件并將該源文件發(fā)送到構(gòu)建服務(wù)控制器的第一源儲(chǔ)存庫(kù)。構(gòu)建系統(tǒng)還包括簽名服務(wù)器,它接收二進(jìn)制代碼文件的足以生成二進(jìn)制代碼文件的數(shù)字簽名的表示,并生成對(duì)應(yīng)于該二進(jìn)制代碼文件的表示的數(shù)字簽名。該構(gòu)建系統(tǒng)還包括構(gòu)建服務(wù)控制器,其功能性地連接到多個(gè)虛擬機(jī)、第一源儲(chǔ)存庫(kù)和簽名服務(wù)器,以及確定要構(gòu)建的分支、標(biāo)識(shí)要被傳輸?shù)姆种У亩鄠€(gè)源文件、從至少第一源儲(chǔ)存庫(kù)中檢索所述多個(gè)源文件、將多個(gè)源文件的第一源文件發(fā)送到多個(gè)虛擬機(jī)的第一虛擬機(jī)、接收足以生成二進(jìn)制代碼文件的數(shù)字簽名的二進(jìn)制代碼文件的表示并將該表示轉(zhuǎn)發(fā)到簽名服務(wù)器,并接收數(shù)字簽名并將數(shù)字簽名轉(zhuǎn)發(fā)到多個(gè)虛擬機(jī)的第二虛擬機(jī)。
[0017]在又一個(gè)方面,本發(fā)明包括一種適于用于分布式計(jì)算環(huán)境中的計(jì)算機(jī)實(shí)現(xiàn)方法,該分布式計(jì)算環(huán)境利用處理器和存儲(chǔ)器來(lái)實(shí)現(xiàn)高度可用的、可縮放的分布式構(gòu)建服務(wù),該方法包括,在單個(gè)物理機(jī)器處接收對(duì)應(yīng)于要被生成的多個(gè)二進(jìn)制代碼文件的多個(gè)源文件,并在單個(gè)物理機(jī)器上實(shí)例化多個(gè)虛擬機(jī),多個(gè)虛擬機(jī)的每個(gè)虛擬機(jī)用構(gòu)建環(huán)境來(lái)配置。多個(gè)虛擬機(jī)是與要在單個(gè)物理機(jī)器上生成的二進(jìn)制代碼文件數(shù)量相等數(shù)量的虛擬機(jī)。該方法還包括向多個(gè)虛擬機(jī)的每個(gè)虛擬機(jī)發(fā)送對(duì)應(yīng)于多個(gè)二進(jìn)制代碼文件的各單個(gè)二進(jìn)制代碼文件的那些源文件,使得多個(gè)虛擬機(jī)的每個(gè)虛擬機(jī)從這些源文件中生成各二進(jìn)制代碼文件,使得為多個(gè)所生成的二進(jìn)制代碼文件的至少一個(gè)二進(jìn)制代碼文件生成數(shù)字簽名,并使得二進(jìn)制代碼包被生成。二進(jìn)制代碼包包括二進(jìn)制代碼文件和對(duì)應(yīng)的數(shù)字簽名。
[0018]在簡(jiǎn)要描述了本發(fā)明的各實(shí)施例的概覽后,以下描述適于實(shí)現(xiàn)本發(fā)明的各實(shí)施例的示例性操作環(huán)境。
[0019]大體上參考附圖,并且首先具體參考圖1,示出了適用于實(shí)現(xiàn)本發(fā)明的各實(shí)施例的示例性操作環(huán)境,并將其概括指定為計(jì)算設(shè)備100。計(jì)算設(shè)備100只是合適的計(jì)算環(huán)境的一個(gè)示例,并且不旨在對(duì)本發(fā)明的使用范圍或功能提出任何限制。也不應(yīng)將包括設(shè)備100的計(jì)算環(huán)境解釋為對(duì)所示出的任一模塊/組件或其組合有任何依賴性或要求。
[0020]各實(shí)施例可以在計(jì)算機(jī)代碼或機(jī)器可使用指令的一般上下文中描述,包括由計(jì)算機(jī)或諸如個(gè)人數(shù)據(jù)助理或其他手持式設(shè)備等其他機(jī)器執(zhí)行的諸如程序模塊等的計(jì)算機(jī)可執(zhí)行指令。一般而言,包括例程、程序、對(duì)象、模塊、數(shù)據(jù)結(jié)構(gòu)等的程序模塊指的是執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的代碼。各實(shí)施例可以在各種系統(tǒng)配置中實(shí)施,這些系統(tǒng)配置包括手持式設(shè)備、消費(fèi)電子產(chǎn)品、通用計(jì)算機(jī)、專用計(jì)算設(shè)備等等。各實(shí)施例也可以在其中任務(wù)由通過(guò)通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行的分布式計(jì)算環(huán)境中實(shí)施。
[0021]繼續(xù)參考圖1,計(jì)算設(shè)備100包括直接或間接耦合以下設(shè)備的總線110:存儲(chǔ)器112、一個(gè)或多個(gè)處理器114、一個(gè)或多個(gè)呈現(xiàn)模塊116、輸入/輸出(I/O)端口 118、I/O模塊120、和說(shuō)明性電源122??偩€110表示可以是一條或多條總線(諸如地址總線、數(shù)據(jù)總線、或其組合)。盡管為了清楚起見(jiàn)圖1的各框用線條示出,但是在實(shí)際上,各模塊的描繪并不是那樣清楚,并且比喻性地來(lái)說(shuō),線條更精確地將是灰色的和模糊的。例如,可以將諸如顯示設(shè)備等的呈現(xiàn)模塊認(rèn)為是I/O模塊。而且,處理器也具有存儲(chǔ)器。本發(fā)明人認(rèn)識(shí)到,這是本領(lǐng)域的特性,并且重申,圖1的圖示只是例示可結(jié)合一個(gè)或多個(gè)實(shí)施例來(lái)使用的示例性計(jì)算設(shè)備。諸如“工作站”、“服務(wù)器”、“膝上型計(jì)算機(jī)”、“手持式設(shè)備”等分類之間沒(méi)有區(qū)另IJ,因?yàn)樗鼈內(nèi)慷急徽J(rèn)為是在圖1的范圍之內(nèi)的并且被稱為“計(jì)算機(jī)”或“計(jì)算設(shè)備”。
[0022]計(jì)算設(shè)備100通常包括各種計(jì)算機(jī)可讀介質(zhì)。作為示例,而非限制,計(jì)算機(jī)可讀介質(zhì)可以包括以下示例性非瞬態(tài)介質(zhì):隨機(jī)存取存儲(chǔ)器(RAM);只讀存儲(chǔ)器(ROM);電可擦可編程只讀存儲(chǔ)器(EEPROM);閃存或其他存儲(chǔ)技術(shù);CDR0M、數(shù)字多功能盤(DVD)或其他光學(xué)或全息介質(zhì);磁帶盒、磁帶、磁盤存儲(chǔ)或其他磁存儲(chǔ)設(shè)備或可以用來(lái)編碼所需要的信息并可以被計(jì)算設(shè)備100訪問(wèn)的任何其他介質(zhì)。
[0023]存儲(chǔ)器112包括易失性和/或非易失性存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì)。存儲(chǔ)器可以是可移動(dòng)的,不可移動(dòng)的,或兩者的組合。示例性硬件設(shè)備包括固態(tài)存儲(chǔ)器、硬盤驅(qū)動(dòng)器、光盤驅(qū)動(dòng)器等。計(jì)算設(shè)備100包括從諸如存儲(chǔ)器112或I/O模塊120等各種實(shí)體讀取數(shù)據(jù)的一個(gè)或多個(gè)處理器。呈現(xiàn)模塊116向用戶或其他設(shè)備呈現(xiàn)數(shù)據(jù)指示。示例性呈現(xiàn)模塊包括顯示設(shè)備、揚(yáng)聲器、打印模塊、振動(dòng)模塊等等。I/O端口 118允許計(jì)算設(shè)備100在邏輯上耦合至包括I/O模塊120的其他設(shè)備,其中某些設(shè)備可以是內(nèi)置的。說(shuō)明性模塊包括話筒、操縱桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀、打印機(jī)、無(wú)線設(shè)備等等。
[0024]現(xiàn)在轉(zhuǎn)到圖2,呈現(xiàn)了根據(jù)本發(fā)明的一個(gè)方面的流程圖,并且該流程圖被概括地指代為附圖標(biāo)記200。在某些實(shí)施例中,該方法適合由構(gòu)建系統(tǒng)控制器來(lái)執(zhí)行。最初,在步驟202,確定要構(gòu)建的一個(gè)或多個(gè)分支的列表。如本領(lǐng)域所理解的,“分支”是構(gòu)建設(shè)置和源代碼文件(或源代碼文件的各部分)的預(yù)先定義的配置,以從公共代碼儲(chǔ)存庫(kù)中創(chuàng)建特定版本的軟件產(chǎn)品。例如,代碼庫(kù)可具有“開(kāi)發(fā)”和“發(fā)布”分支。作為另一個(gè)示例,代碼庫(kù)對(duì)不同的操作系統(tǒng)或硬件平臺(tái)可具有不同分支。在又一個(gè)示例中,代碼庫(kù)可具有針對(duì)不同特征集的分支,諸如“基本”、“家庭”、“專業(yè)”和“企業(yè)”版。通常,不同分支將共享源代碼的大部分,而僅在特定方面不同。在一個(gè)實(shí)施例中,基于用戶輸入作出構(gòu)建哪些分支的決定。在另一個(gè)實(shí)施例中,咨詢配置文件以確定構(gòu)建哪些分支。在又一個(gè)實(shí)施例中,當(dāng)前構(gòu)建環(huán)境被用于確定構(gòu)建哪些分支。[0025]接著,在步驟203,用于構(gòu)建的虛擬機(jī)被標(biāo)識(shí)。在一個(gè)實(shí)施例中,構(gòu)建服務(wù)最初具有實(shí)例化在一個(gè)或多個(gè)虛擬機(jī)服務(wù)器上并保持空閑的虛擬機(jī)池;虛擬機(jī)首先從該池中選擇,如果需要附加容量,按需實(shí)例化附加的虛擬機(jī)。在該實(shí)施例的變體中,預(yù)先實(shí)例化的虛擬機(jī)池的大小根據(jù)歷史要求增加或減少。在另一個(gè)實(shí)施例中,虛擬機(jī)簡(jiǎn)單地按要求實(shí)例化。
[0026]在用于構(gòu)建的虛擬機(jī)被標(biāo)識(shí)后,在步驟204確定應(yīng)被傳輸?shù)焦ぷ髡咛摂M機(jī)以構(gòu)建那些分支的文件列表。在一個(gè)實(shí)施例中,步驟204如子步驟204(a) — 204(f)所示那樣完成。在步驟204(a),用于構(gòu)建全部所選分支的全部文件的列表被編譯。在某些實(shí)施例中,此信息從構(gòu)建配置文件中獲得。接著,在步驟204(b),對(duì)如此標(biāo)識(shí)的每個(gè)文件重復(fù)后續(xù)步驟204 (c) - 204(e)。在步驟204 (c),將需要那個(gè)文件來(lái)構(gòu)建分支的一個(gè)或多個(gè)虛擬機(jī)(VM)被標(biāo)識(shí)。在步驟204(d),確定被如此標(biāo)識(shí)的每個(gè)VM是否已經(jīng)具有該文件的副本。VM可能已經(jīng)從例如構(gòu)建使用該文件的另一個(gè)分支或從構(gòu)建當(dāng)前分支的先前版本(如果該文件在當(dāng)前分支中保持不變)而擁有該文件的副本。在某些實(shí)施例中,文件被優(yōu)先加載到VM上,這些VM可能稍后使用它們來(lái)利用原本未被使用的傳輸帶寬和/或存儲(chǔ)空間。如果確定該VM還沒(méi)有該文件,則在步驟204 (e),將該文件添加到要被傳輸?shù)侥莻€(gè)VM的文件列表。否則,處理返回到步驟204(b)來(lái)考慮下一個(gè)文件。一旦每個(gè)文件已經(jīng)被步驟204(c) - 204(e)處理了,那么要被傳輸?shù)矫總€(gè)VM的文件列表在步驟204(f)終結(jié)。
[0027]一旦要被傳輸?shù)奈募诓襟E204被標(biāo)識(shí),則在步驟206,從一個(gè)或多個(gè)源儲(chǔ)存庫(kù)檢索它們。如上面所描述的,在一些實(shí)施例中,某些文件可能已經(jīng)因多個(gè)原因之一而存在于本地存儲(chǔ)中,那么這些文件不需要被檢索。接著,在步驟208,先前標(biāo)識(shí)的文件被傳輸?shù)胶线m的虛擬機(jī)。注意某些文件可能被多個(gè)虛擬機(jī)使用,且因此被傳輸?shù)侥切C(jī)器中的每一個(gè)。在一個(gè)實(shí)施例中,為了最小化文件傳輸?shù)木W(wǎng)絡(luò)開(kāi)銷,根據(jù)虛擬機(jī)將需要的文件的共性程度來(lái)將虛擬機(jī)分組到虛擬機(jī)服務(wù)器上。在另一個(gè)實(shí)施例中,根據(jù)虛擬機(jī)將需要的文件和先前高速緩存在該虛擬機(jī)服務(wù)器上的文件之間的共性程度來(lái)將虛擬機(jī)分配到虛擬機(jī)服務(wù)器。
[0028]接著,在步驟209,構(gòu)建環(huán)境被按需分發(fā)到虛擬機(jī)。在某些實(shí)施例中,構(gòu)建環(huán)境則在源文件被傳輸?shù)教摂M機(jī)之前被分發(fā)到虛擬機(jī)。構(gòu)建環(huán)境的一個(gè)角色是驅(qū)動(dòng)構(gòu)建過(guò)程。在一些實(shí)施例中,構(gòu)建環(huán)境包含響應(yīng)于構(gòu)建服務(wù)控制器、提供活動(dòng)狀態(tài)并執(zhí)行命令的代理。在另一些實(shí)施例中,構(gòu)建環(huán)境直接響應(yīng)用戶輸入以執(zhí)行活動(dòng)。該構(gòu)建環(huán)境還可包括工具和構(gòu)建組件,諸如編譯器、匯編器、鏈接器和其它工具,以及用于處理源文件以生成二進(jìn)制代碼文件的工作流。
[0029]在這一點(diǎn)上,虛擬機(jī)可通過(guò)處理源文件以生成二進(jìn)制代碼文件來(lái)開(kāi)始構(gòu)建過(guò)程。在本發(fā)明的一個(gè)實(shí)施例中,每個(gè)虛擬機(jī)負(fù)責(zé)生成與給定分支相關(guān)聯(lián)的全部二進(jìn)制代碼文件。在另一個(gè)實(shí)施例中,每個(gè)虛擬機(jī)負(fù)責(zé)生成單個(gè)二進(jìn)制代碼(即,虛擬機(jī)的數(shù)量與二進(jìn)制代碼的數(shù)量相同)。在又一個(gè)實(shí)施例中,要生成的全部二進(jìn)制代碼文件集以這樣的方式跨可用虛擬機(jī)進(jìn)行分派,以便均衡每個(gè)虛擬機(jī)執(zhí)行的處理。在又一個(gè)實(shí)施例中,對(duì)應(yīng)于一個(gè)以上分支的不同分支的多個(gè)二進(jìn)制代碼文件被分派到單個(gè)虛擬機(jī)。也構(gòu)想了在可用虛擬機(jī)之間分派要構(gòu)建的二進(jìn)制代碼的其它方式。將二進(jìn)制代碼分派到虛擬機(jī)將分別通知在步驟204和208的文件的標(biāo)識(shí)和傳輸。在步驟210,虛擬機(jī)處理合適的源文件以生成二進(jìn)制代碼文件。在一些實(shí)施例中,另一個(gè)組件,諸如圖3的構(gòu)建服務(wù)控制器302使得虛擬機(jī)開(kāi)始該處理。在此,“處理”文件可包括預(yù)處理、編譯、匯編和鏈接等等步驟,而“二進(jìn)制代碼文件”可包括本機(jī)可執(zhí)行文件、中間表示文件、字節(jié)代碼表示文件、對(duì)象文件和庫(kù)文件等等。類似地,“使得”可涵蓋各種技術(shù),包括直接代碼執(zhí)行、進(jìn)程間通信、客戶機(jī)一服務(wù)器或?qū)Φ认⑹瞻l(fā)、遠(yuǎn)程命令執(zhí)行、web服務(wù)、或遠(yuǎn)程腳本調(diào)用。如本領(lǐng)域的技術(shù)人員可以清楚,也可預(yù)想用于使得虛擬機(jī)處理文件的其它技術(shù)。
[0030]按照用戶輸入、構(gòu)建配置文件、或其它一般策略,某些所生成的二進(jìn)制代碼文件可被數(shù)字簽名以便認(rèn)證它們的源、未經(jīng)篡改狀態(tài),或出于其它原因。所采用的數(shù)字簽名算法可包括諸如RSA、DSA、橢圓曲線DSA、ElGamal或其它安全數(shù)字簽名算法的算法。在許多環(huán)境中,出于安全目的,簽名過(guò)程所需的數(shù)字鍵僅存儲(chǔ)在少量位置,且因此不被分發(fā)到各虛擬機(jī)。因此,在一些實(shí)施例中,在二進(jìn)制代碼被生成之后,在步驟212,它們被傳輸?shù)綄iT的簽名服務(wù)器用于簽名。接著,在步驟214,生成相應(yīng)的數(shù)字簽名。在一些實(shí)施例中,另一組件,諸如要結(jié)合圖3討論的構(gòu)建服務(wù)控制器302,使其以各種方式的任何一種來(lái)發(fā)生,如上所述。在該實(shí)施例的一種變體中,代替?zhèn)鬏敹M(jìn)制代碼,合適的虛擬機(jī)生成足以生成簽名的二進(jìn)制代碼的表示。例如,許多數(shù)字簽名算法實(shí)際上簽署文件的安全散列而不是整個(gè)文件;因?yàn)樵诖耸纠猩稍撋⒘胁恍枰灻荑€,虛擬機(jī)自身可生成該散列并僅將那個(gè)發(fā)送到簽名服務(wù)器。該方案具有減少簽名服務(wù)器的工作負(fù)荷以及與傳送二進(jìn)制代碼文件相關(guān)聯(lián)的網(wǎng)絡(luò)負(fù)荷的雙重優(yōu)勢(shì):代替?zhèn)魉?可能很大的)二進(jìn)制代碼文件,僅發(fā)送(通常小于IkB的)散列。在此和貫穿本文“發(fā)送”包括直接發(fā)送和通過(guò)使某物被發(fā)送而間接發(fā)送兩者。在步驟216,所生成的簽名被傳輸回虛擬機(jī)。在一些實(shí)施例中,由數(shù)字簽名的附加而修改了的二進(jìn)制代碼而不是分離的簽名被傳輸回到虛擬機(jī)。術(shù)語(yǔ)“簽名”在此,包括分離的簽名和以此方式修改的二進(jìn)制代碼兩者。一旦該二進(jìn)制代碼文件和簽名已被收集,它們?cè)诓襟E218被匯編成二進(jìn)制代碼包。在一些實(shí)施例中,另一組件,諸如圖3的構(gòu)建服務(wù)控制器302,使其以各種方式的任何一種來(lái)發(fā)生,如上所述。在一些實(shí)施例中,這些二進(jìn)制代碼包還包含不受構(gòu)建過(guò)程影響的數(shù)據(jù)文件。在一些實(shí)施例中,二進(jìn)制代碼包的匯編在那些二進(jìn)制代碼文件和該包的數(shù)字簽名已被收集后就立刻開(kāi)始;在其它實(shí)施例中,直到構(gòu)建和簽名生成過(guò)程已經(jīng)完全結(jié)束后,包生成過(guò)程才開(kāi)始。一旦包已經(jīng)被生成,它們被傳輸離開(kāi)虛擬機(jī)。在一個(gè)實(shí)施例中,這通過(guò)在步驟220將它們發(fā)布到存儲(chǔ)服務(wù)來(lái)完成。在另一個(gè)實(shí)施例中,一個(gè)或多個(gè)虛擬機(jī)用作儲(chǔ)存庫(kù)并直接服務(wù)于虛擬機(jī)。最后,在一些實(shí)施例中,在步驟222生成用戶通知。這個(gè)用戶通知可以采取各種形式,諸如電子郵件、即時(shí)消息、電話呼叫、應(yīng)用中的彈出警告,或其它警告。
[0031]現(xiàn)在轉(zhuǎn)到圖3,呈現(xiàn)了適合于實(shí)現(xiàn)本發(fā)明的各實(shí)施例的環(huán)境,并且該環(huán)境被概括地指代為附圖標(biāo)記300。在一些實(shí)施例中,構(gòu)建服務(wù)控制器302用作系統(tǒng)的中央控制器,并功能性地連接到其它組件。在一些實(shí)施例中,連接通過(guò)LAN、WAN或因特網(wǎng)連接。這些連接可以是直接或間接的。在其它實(shí)施例中,系統(tǒng)300的組件是概念性的且?guī)讉€(gè)組件可被組合成單個(gè)物理服務(wù)器;在那些情況下,連接采用共享存儲(chǔ)和/或進(jìn)程間通信形式。在一些實(shí)施例中,構(gòu)建服務(wù)控制器維持元數(shù)據(jù)以跟蹤工作者VM到代碼分支的映射。在一些實(shí)施例中,構(gòu)建服務(wù)提供了前端以接收用戶輸入、顯示作業(yè)狀態(tài)并提供對(duì)構(gòu)建度量的訪問(wèn)。在一些實(shí)施例中,構(gòu)建控制器可負(fù)責(zé)調(diào)度用于將來(lái)執(zhí)行的構(gòu)建過(guò)程。這可采取推遲構(gòu)建直到系統(tǒng)負(fù)載更低,或在預(yù)期的要求低的時(shí)段調(diào)度構(gòu)建的形式。也構(gòu)想了其它調(diào)度試探。在一些實(shí)施例中,構(gòu)建控制器負(fù)責(zé)動(dòng)態(tài)虛擬機(jī)調(diào)度。這可以采取增加或減少專用于構(gòu)建過(guò)程的虛擬機(jī)數(shù)量的形式。這也可以采用將虛擬機(jī)從忙碌的虛擬機(jī)服務(wù)器遷移到另一個(gè)較不忙碌的虛擬機(jī)服務(wù)器的形式。這還可以采取在單個(gè)虛擬機(jī)內(nèi)操縱虛擬機(jī)的調(diào)度以,例如,相比于向輕工作負(fù)荷的虛擬機(jī)而言向重工作負(fù)荷的虛擬機(jī)分派更多的資源的形式。還構(gòu)想了其它形式的動(dòng)態(tài)虛擬機(jī)調(diào)度。連接到構(gòu)建服務(wù)控制器的是一個(gè)或多個(gè)源儲(chǔ)存庫(kù),諸如源儲(chǔ)存庫(kù)304和源儲(chǔ)存庫(kù)306。每個(gè)這樣的源儲(chǔ)存庫(kù)具有相關(guān)聯(lián)的存儲(chǔ),分別是存儲(chǔ)308和存儲(chǔ)310。與源儲(chǔ)存庫(kù)相關(guān)聯(lián)的存儲(chǔ)可以是本地存儲(chǔ)、網(wǎng)絡(luò)附連存儲(chǔ)、基于云的存儲(chǔ),或源儲(chǔ)存庫(kù)可訪問(wèn)的其它存儲(chǔ)。在一些實(shí)施例中,可能僅僅存在單個(gè)源儲(chǔ)存庫(kù);在其它實(shí)施例中,存在許多源儲(chǔ)存庫(kù)。
[0032]類似地連接到構(gòu)建服務(wù)控制器302的是存儲(chǔ)服務(wù)312,它使得二進(jìn)制代碼包(在某些實(shí)施例中,也可以其它文件)對(duì)用戶可用。在一些實(shí)施例中,存儲(chǔ)服務(wù)312是耐久的且高度可用的存儲(chǔ)服務(wù),諸如地理復(fù)制的基于云的存儲(chǔ)服務(wù)。在一些實(shí)施例中,存儲(chǔ)服務(wù)312以及諸如源儲(chǔ)存庫(kù)304的源儲(chǔ)存庫(kù)的功能被組合到單個(gè)物理服務(wù)器中。在其它實(shí)施例中,存儲(chǔ)服務(wù)312和源儲(chǔ)存庫(kù)304是分開(kāi)的物理服務(wù)器但是共享公共后端存儲(chǔ),諸如存儲(chǔ)308。在一些實(shí)施例中,存儲(chǔ)服務(wù)312存儲(chǔ)被部署在所創(chuàng)建的虛擬機(jī)上的構(gòu)建環(huán)境。在其它實(shí)施例中,構(gòu)建環(huán)境被存儲(chǔ)在諸如源儲(chǔ)存庫(kù)304的源儲(chǔ)存庫(kù)上。在又一些實(shí)施例中,構(gòu)建環(huán)境被存儲(chǔ)在構(gòu)建服務(wù)控制器302上,它們從中被部署。還構(gòu)想了任何存儲(chǔ)方案的組合。同樣連接到構(gòu)建服務(wù)控制器302的是簽名服務(wù)器314。簽名服務(wù)器314執(zhí)行為所生成的二進(jìn)制代碼文件生成數(shù)字簽名的服務(wù),如上面結(jié)合圖2的步驟212、214和216所討論的。簽名服務(wù)器314存儲(chǔ)用于生成數(shù)字簽名的簽名密鑰316。
[0033]最后,構(gòu)建服務(wù)控制器302被連接到一個(gè)或多個(gè)虛擬機(jī)服務(wù)器,諸如虛擬機(jī)服務(wù)器318和320。每個(gè)虛擬機(jī)服務(wù)器表示潛在地運(yùn)行諸如虛擬機(jī)322和324的多個(gè)虛擬機(jī)的一個(gè)物理計(jì)算機(jī)。在一些實(shí)施例中,在任何給定時(shí)間,虛擬機(jī)的一些或全部可被專用于不與構(gòu)建服務(wù)相關(guān)的其它任務(wù)。在一些實(shí)施例中,虛擬機(jī)服務(wù)器318和320是私有或公共計(jì)算云的一部分。在一些實(shí)施例中,虛擬機(jī)在需要時(shí)被實(shí)例化,而在它們變得不需要或不使用時(shí)被破壞或被垃圾收集。在一些實(shí)施例中,構(gòu)建服務(wù)控制器302根據(jù)構(gòu)建服務(wù)的需要來(lái)縮放所使用的工作者VM的數(shù)量。諸如虛擬機(jī)322的每個(gè)虛擬機(jī)被加載了用于產(chǎn)生二進(jìn)制代碼包的一些源和數(shù)據(jù)文件326的集合,如被加載到虛擬機(jī)上的構(gòu)建環(huán)境所通知的。注意到由虛擬機(jī)324存儲(chǔ)的文件328可能與虛擬機(jī)322所存儲(chǔ)的文件326或與虛擬機(jī)存儲(chǔ)在虛擬機(jī)服務(wù)器320上的文件完全重疊、部分重疊,或不重疊。圖3描繪的構(gòu)建系統(tǒng)的任何組件可利用一個(gè)或多個(gè)處理器和/或存儲(chǔ)器來(lái)執(zhí)行在此描述的功能。
[0034]現(xiàn)在轉(zhuǎn)到圖4,呈現(xiàn)了根據(jù)本發(fā)明的另一方面的流程圖圖示。圖4描繪了適于由諸如虛擬機(jī)322的虛擬機(jī)執(zhí)行的方法,并且該方法被概括地指代為附圖標(biāo)記400。最初,在步驟402,接收零個(gè)或更多個(gè)源文件。所接收到的文件,結(jié)合零個(gè)或多個(gè)已經(jīng)本地存儲(chǔ)的文件,足以產(chǎn)生一個(gè)或多個(gè)二進(jìn)制代碼文件。共同地,這些文件可對(duì)應(yīng)于圖3的文件326。接著,在步驟404,這些文件被處理以生成一個(gè)或多個(gè)二進(jìn)制代碼文件。在步驟406,所生成的二進(jìn)制代碼文件的表示被發(fā)送到簽名服務(wù)器。在一些實(shí)施例中,這些表示被直接發(fā)送到簽名服務(wù)器;在其它實(shí)施例中,它們被發(fā)送到將它們轉(zhuǎn)發(fā)到簽名服務(wù)器的構(gòu)建服務(wù)控制器或其它中間主機(jī)。在一些實(shí)施例中,“表示”包括要被簽名的整個(gè)二進(jìn)制代碼文件;在其它實(shí)施例中,表示包括足以用于簽名生成的更少量的信息,諸如要被簽名的二進(jìn)制代碼的抗沖突密碼散列。在又一些實(shí)施例中,諸如私有或測(cè)試構(gòu)建的情況,簽名二進(jìn)制代碼的步驟可忽略。
[0035]接著,在步驟408,接收對(duì)應(yīng)于要被簽名的二進(jìn)制代碼文件的數(shù)字簽名。同樣,這些數(shù)字簽名可直接從簽名服務(wù)器接收或間接通過(guò)構(gòu)建服務(wù)控制器或另一個(gè)中間主機(jī)來(lái)接收。在步驟410,這些數(shù)字簽名,連同一個(gè)或多個(gè)對(duì)應(yīng)的或未經(jīng)簽名的二進(jìn)制代碼文件被用來(lái)生成二進(jìn)制代碼包。最后,在步驟412,這些二進(jìn)制代碼包被傳輸?shù)搅硪粋€(gè)主機(jī)。在一些實(shí)施例中,它們可被傳輸?shù)街T如存儲(chǔ)服務(wù)312的存儲(chǔ)服務(wù)以便被發(fā)布。在其它實(shí)施例中,二進(jìn)制代碼包可被發(fā)送到構(gòu)建服務(wù)控制器302。在又一個(gè)實(shí)施例中,它們被發(fā)送到發(fā)起該構(gòu)建過(guò)程的用戶的計(jì)算機(jī)。
[0036]圖5描繪了根據(jù)本發(fā)明的各實(shí)施例適于由諸如源儲(chǔ)存庫(kù)304的源儲(chǔ)存庫(kù)執(zhí)行的方法,并且該方法被概括地指代為附圖標(biāo)記500。最初,在步驟502,接收對(duì)一個(gè)或多個(gè)源文件的請(qǐng)求。在一個(gè)實(shí)施例中,從圖3的構(gòu)建服務(wù)控制器302接收該請(qǐng)求。在另一個(gè)實(shí)施例中,從諸如圖3的虛擬機(jī)服務(wù)器318上運(yùn)行的虛擬機(jī)322的虛擬機(jī)接收該請(qǐng)求。接著,在步驟504,所請(qǐng)求的文件被從存儲(chǔ)檢索并被傳輸。在一個(gè)實(shí)施例中,它們被傳輸?shù)秸?qǐng)求者;在另一個(gè)實(shí)施例中,它們被傳輸?shù)街T如構(gòu)建服務(wù)控制器302或虛擬機(jī)服務(wù)器318的另一個(gè)主機(jī)用以高速緩存并轉(zhuǎn)發(fā)到請(qǐng)求者。
[0037]圖6描繪了根據(jù)本發(fā)明的各實(shí)施例適于由諸如簽名服務(wù)器314的簽名服務(wù)器執(zhí)行的方法,并且該方法被概括地指代為附圖標(biāo)記600。最初,在步驟602,接收一或多個(gè)二進(jìn)制代碼文件的表示。在一個(gè)實(shí)施例中,從諸如圖3的虛擬機(jī)322的虛擬機(jī)直接接收請(qǐng)求。在另一實(shí)施例中,通過(guò)構(gòu)建服務(wù)控制器或其它中間主機(jī)接收請(qǐng)求。如上面討論的,在一些實(shí)施例中,表示是要被簽名的整個(gè)二進(jìn)制代碼文件,而在其它實(shí)施例中,表示是足以用于簽名生成的更少量的信息。在一些實(shí)施例中,簽名服務(wù)器執(zhí)行附加步驟,諸如病毒掃描、正確形式的驗(yàn)證,以及在生成簽名前構(gòu)建位置的確認(rèn)。接著,在步驟604,對(duì)應(yīng)于一個(gè)或多個(gè)表示的一個(gè)或多個(gè)數(shù)字簽名被生成。這可以通過(guò)多個(gè)公知數(shù)字簽名算法的任何一個(gè),并采用圖3的數(shù)字簽名密鑰316來(lái)完成。最后,在步驟606,所生成的一個(gè)或多個(gè)簽名被發(fā)送回請(qǐng)求者。
[0038]圖7描繪了根據(jù)本發(fā)明的各實(shí)施例適于由諸如圖3的構(gòu)建源控制器302的構(gòu)建源控制器執(zhí)行的方法,并且該方法被概括地指代為附圖標(biāo)記700。最初,在步驟702,確定要構(gòu)建的一個(gè)或多個(gè)分支的列表。在一個(gè)實(shí)施例中,基于用戶輸入作出構(gòu)建哪些分支的決定。在另一個(gè)實(shí)施例中,咨詢配置文件以確定構(gòu)建哪些分支。在又一個(gè)實(shí)施例中,當(dāng)前構(gòu)建環(huán)境被用于確定構(gòu)建哪些分支。接著,在步驟704,應(yīng)該被傳輸?shù)焦ぷ髡咛摂M機(jī)以構(gòu)建那些分支的文件列表被確定。在一個(gè)實(shí)施例中,這可以如步驟204(a) - 204(f)中所描述的并伴隨圖2的討論來(lái)完成。一旦文件已被標(biāo)識(shí),在步驟706,它們被從諸如圖3的源儲(chǔ)存庫(kù)304和源儲(chǔ)存庫(kù)306的一個(gè)或多個(gè)源儲(chǔ)存庫(kù)中檢索,并在步驟708,被傳輸?shù)胶线m的虛擬機(jī)。同樣,某些文件可能被多個(gè)虛擬機(jī)使用,且因此被傳輸?shù)侥切C(jī)器的每一個(gè)。在一個(gè)實(shí)施例中,為了最小化文件傳輸?shù)木W(wǎng)絡(luò)開(kāi)銷,根據(jù)虛擬機(jī)將使用的文件的共性程度將虛擬機(jī)分組到虛擬機(jī)服務(wù)器上。在另一個(gè)實(shí)施例中,所傳輸?shù)奈募母北颈槐3?,使得如果將?lái)它們?cè)俅伪恍枰敲此鼈儾恍枰獜脑磧?chǔ)存庫(kù)重新被取回。
[0039]接著,在步驟710,要被簽名的二進(jìn)制代碼文件的表示在計(jì)算機(jī)執(zhí)行方法700被接收;在某些實(shí)施例中,這將是圖3的構(gòu)建服務(wù)控制器302。在一個(gè)實(shí)施例中,從生成二進(jìn)制代碼文件的虛擬機(jī)接收它們。在一個(gè)實(shí)施例中,接收整個(gè)二進(jìn)制代碼文件并生成更緊湊的表示用于后續(xù)重新傳輸。接著,在步驟712,表示被轉(zhuǎn)發(fā)(例如,發(fā)送)到諸如簽名服務(wù)器314的簽名服務(wù)器。接著,在步驟714,對(duì)應(yīng)于該表示的數(shù)字簽名從簽名服務(wù)器接收回,并在步驟716,它們被轉(zhuǎn)發(fā)到合適的虛擬機(jī)。在一些實(shí)施例中,合適的虛擬機(jī)是創(chuàng)建對(duì)應(yīng)二進(jìn)制代碼文件的虛擬機(jī);在其它實(shí)施例中,這是負(fù)責(zé)二進(jìn)制代碼包創(chuàng)建的另一個(gè)虛擬機(jī)。在步驟718,包括對(duì)應(yīng)于源文件的二進(jìn)制代碼文件以及數(shù)字簽名的二進(jìn)制代碼包被接收。在一個(gè)實(shí)施例中,從創(chuàng)建它們的虛擬機(jī)接收它們。在另一個(gè)實(shí)施例中,它們還包括未被構(gòu)建過(guò)程改變的數(shù)據(jù)文件。接著,在步驟720,這些包對(duì)后續(xù)檢索可用。在一個(gè)實(shí)施例中,這通過(guò)將它們發(fā)布到存儲(chǔ)服務(wù)來(lái)完成。在另一個(gè)實(shí)施例中,這通過(guò)將它們傳輸?shù)筋A(yù)先確定的位置來(lái)完成。在又一個(gè)實(shí)施例中,這通過(guò)將它們本地存儲(chǔ)直到它們被用戶檢索來(lái)完成。最后,在步驟722,生成通知來(lái)警告用戶包可用。該通知可以采取結(jié)合圖2的步驟222所討論的任何形式。
[0040]現(xiàn)在轉(zhuǎn)到圖8,描繪了根據(jù)本發(fā)明的又一個(gè)方面的流程圖圖示,其適于由諸如圖3的虛擬機(jī)服務(wù)器318的虛擬機(jī)服務(wù)器來(lái)執(zhí)行,并且該流程圖圖示被概括地指代為附圖標(biāo)記800。在一些實(shí)施例中,圖3的虛擬機(jī)服務(wù)器318是單個(gè)物理機(jī)器,諸如膝上型計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)或服務(wù)器級(jí)計(jì)算機(jī)。在其它實(shí)施例中,虛擬機(jī)服務(wù)器318本身可以是諸如服務(wù)器場(chǎng)的分布式計(jì)算環(huán)境。
[0041]最初,在步驟802,接收一個(gè)或多個(gè)分支的列表和源文件。在一個(gè)實(shí)施例中,僅接收源文件的一個(gè)列表,且源文件從諸如源儲(chǔ)存庫(kù)304的源儲(chǔ)存庫(kù)檢索。在另一個(gè)實(shí)施例中,源文件與一個(gè)或多個(gè)分支的列表一起接收。接著,在步驟804,一個(gè)或多個(gè)虛擬機(jī)被實(shí)例化。如上面對(duì)向虛擬機(jī)分派二進(jìn)制代碼的討論中所討論的,構(gòu)想了多個(gè)分派策略,且所使用的精確的分派策略將通知實(shí)例化的虛擬機(jī)數(shù)量。步驟804還包括準(zhǔn)備虛擬機(jī)來(lái)參與構(gòu)建服務(wù)。準(zhǔn)備包括構(gòu)建環(huán)境的部署。在實(shí)例化期間,構(gòu)建環(huán)境可被加載到工作者VM上,或在實(shí)例化后,構(gòu)建環(huán)境可被構(gòu)建系統(tǒng)控制器302推送到工作者VM上。在虛擬機(jī)已經(jīng)被實(shí)例化之后,在步驟806,合適的源文件被傳輸?shù)矫總€(gè)虛擬機(jī)。
[0042]接著,在步驟808,從那些源文件生成的二進(jìn)制代碼文件被從虛擬機(jī)收集。在一個(gè)實(shí)施例中,為了對(duì)它們進(jìn)行簽名的目的,二進(jìn)制代碼文件的緊湊表示被生成。接著,在步驟810,獲得二進(jìn)制代碼的數(shù)字簽名。在一個(gè)實(shí)施例中,這通過(guò)直接與圖3的簽名服務(wù)器314進(jìn)行通信來(lái)完成;在另一個(gè)實(shí)施例中,這通過(guò)經(jīng)由圖3的構(gòu)建服務(wù)控制器302來(lái)與簽名服務(wù)器314進(jìn)行通信來(lái)完成。在步驟812,從二進(jìn)制代碼文件、數(shù)字簽名和在一些實(shí)施例中的其它數(shù)據(jù)文件,來(lái)生成二進(jìn)制代碼包。接著,在步驟814,使得這些二進(jìn)制代碼包對(duì)檢索可用。在一個(gè)實(shí)施例中,這包括將它們傳輸?shù)剿鼈円獜哪莾罕粰z索的位置。在另一個(gè)實(shí)施例中,它包括將它們置于VM上的公知本地位置,軟件代理或人可從那兒檢索它們。最后,在步驟816,生成通知。在一個(gè)實(shí)施例中,這是用戶通知;在另一個(gè)實(shí)施例中,它包括通知軟件代理。
[0043]本發(fā)明的替換實(shí)施例和實(shí)現(xiàn)在本領(lǐng)域的技術(shù)人員仔細(xì)閱讀了本說(shuō)明書包括附圖之后將變得顯而易見(jiàn)。因此,本發(fā)明的范圍由本文檔以下的“權(quán)利要求”部分中的權(quán)利要求,而非前面的描述,來(lái)限定。
【權(quán)利要求】
1.一種或多種其上包含有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令在執(zhí)行時(shí),使得計(jì)算設(shè)備執(zhí)行一種分發(fā)能縮放的構(gòu)建服務(wù)的方法,所述方法包括: 確定要構(gòu)建的分支; 標(biāo)識(shí)用于構(gòu)建所述分支的至少一部分的虛擬機(jī); 標(biāo)識(shí)要為所述分支傳輸?shù)亩鄠€(gè)源文件,其中所述虛擬機(jī)處理所述多個(gè)源文件中的至少一個(gè)源文件來(lái)生成對(duì)應(yīng)的二進(jìn)制代碼文件; 將所述多個(gè)源文件中的所述源文件傳輸?shù)剿鎏摂M機(jī), 在所述虛擬機(jī)上部署構(gòu)建環(huán)境; 使得所述虛擬機(jī)處理所述多個(gè)源文件中的至少所述源文件以便生成二進(jìn)制代碼文件; 使得所述二進(jìn)制代碼文件的數(shù)字簽名被生成; 將所述數(shù)字簽名傳輸?shù)降诙摂M機(jī);以及 使得至少所述第二虛擬機(jī)從至少所述二進(jìn)制代碼文件和所述數(shù)字簽名生成二進(jìn)制代碼包。
2.如權(quán)利要求1所述的計(jì)算機(jī)存儲(chǔ)介質(zhì),其特征在于,所述方法還包括: 生成所述二進(jìn)制代碼包能夠用于檢索的用戶通知。
3.如權(quán)利要求1所述的計(jì)算機(jī)存儲(chǔ)介質(zhì),其特征在于,標(biāo)識(shí)要被傳輸?shù)亩鄠€(gè)源文件包括: 獲得用于構(gòu)建所述分支的源文件的列表; 為用于構(gòu)建所述分支的所述源文件列表的所選的源文件確定: (1)所選源文件要被傳輸?shù)降哪康牡靥摂M機(jī); (2)所述目的地虛擬機(jī)當(dāng)前是否存儲(chǔ)著基本上與所選源文件相同的源文件;以及 a)如果所述目的地虛擬機(jī)當(dāng)前存儲(chǔ)著基本上與所選源文件相同的源文件,則將所選源文件標(biāo)識(shí)為不要被傳輸;以及 b)如果所述目的地虛擬機(jī)當(dāng)前未存儲(chǔ)基本上與所選源文件相同的源 文件,則將所選源文件標(biāo)識(shí)為要被傳輸。
4.如權(quán)利要求1所述的計(jì)算機(jī)存儲(chǔ)介質(zhì),其特征在于,標(biāo)識(shí)用于構(gòu)建所述分支的至少一部分的虛擬機(jī)包括: 確定第一虛擬機(jī)服務(wù)器是否具有空閑虛擬機(jī); 如果所述第一虛擬機(jī)服務(wù)器具有空閑虛擬機(jī),則將所述空閑虛擬機(jī)標(biāo)識(shí)為用于構(gòu)建所述分支的至少一部分的虛擬機(jī);以及 如果所述第一虛擬機(jī)服務(wù)器不具有空閑虛擬機(jī),則實(shí)例化新虛擬機(jī)并將所述新虛擬機(jī)標(biāo)識(shí)為用于構(gòu)建所述分支的至少一部分的虛擬機(jī)。
5.一種能縮放且分布式的構(gòu)建服務(wù)系統(tǒng),包括: 多個(gè)虛擬機(jī),其中的每個(gè)虛擬機(jī)被適配于執(zhí)行以下功能: (1)接收源文件; (2)處理至少所述源文件以生成二進(jìn)制代碼文件; (3)接收對(duì)應(yīng)于所述二進(jìn)制代碼文件的數(shù)字簽名;以及 (4)從至少所述二進(jìn)制代碼文件和所述數(shù)字簽名來(lái)生成二進(jìn)制代碼包;適配于執(zhí)行以下功能的第一源儲(chǔ)存庫(kù): (1)存儲(chǔ)所述源文件;以及 (2)將所述源文件發(fā)送到構(gòu)建服務(wù)控制器; 適配于執(zhí)行以下功能的簽名服務(wù)器: (1)接收足以為所述二進(jìn)制代碼文件生成數(shù)字簽名的所述二進(jìn)制代碼文件的表示;以及 (2)生成對(duì)應(yīng)于所述二進(jìn)制代碼文件的所述表示的數(shù)字簽名; 構(gòu)建服務(wù)控制器,功能性地連接到所述多個(gè)虛擬機(jī)、所述第一源儲(chǔ)存庫(kù)和所述簽名服務(wù)器,并使用處理器和存儲(chǔ)器來(lái)執(zhí)行以下功能: (1)確定要構(gòu)建的分支; (2)標(biāo)識(shí)要為所述分支傳輸?shù)亩鄠€(gè)源文件; (3)從至少所述第一源儲(chǔ)存庫(kù)檢索所述多個(gè)源文件; (4)將所述多個(gè)源文件中的第一源文件發(fā)送到所述多個(gè)虛擬機(jī)中的第一虛擬機(jī); (5)接收足以為所述二進(jìn)制代碼文件生成所述數(shù)字簽名的所述二進(jìn)制代碼文件的表示,并將所述表示轉(zhuǎn)發(fā)到所述簽名服務(wù)器;以及 (6)接收所述數(shù)字簽名并將所述數(shù)字簽名轉(zhuǎn)發(fā)到所述多個(gè)虛擬機(jī)中的第二虛擬機(jī)。
6.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述構(gòu)建系統(tǒng)控制器還執(zhí)行將所述多個(gè)二進(jìn)制代碼包發(fā)布到存儲(chǔ)服務(wù)的功能。
7.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述構(gòu)建系統(tǒng)控制器還執(zhí)行為將來(lái)的執(zhí)行調(diào)度構(gòu)建過(guò)程的功能。
8.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述構(gòu)建系統(tǒng)控制器還執(zhí)行生成所述多個(gè)二進(jìn)制代碼包是可用的的用戶通知的功能。
9.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述構(gòu)建系統(tǒng)控制器執(zhí)行為所述分支標(biāo)識(shí)要被傳輸?shù)亩鄠€(gè)源文件的功能的至少以下子功能: 獲得用于構(gòu)建所述分支的源文件的列表; 為用于構(gòu)建所述分支的所述源文件列表的所選源文件確定: (1)所選源文件要被傳輸?shù)降哪康牡靥摂M機(jī); (2)所述目的地虛擬機(jī)當(dāng)前是否存儲(chǔ)著基本上與所選源文件相同的源文件;以及 a)如果所述目的地虛擬機(jī)當(dāng)前存儲(chǔ)著基本上與所選源文件相同的源文件,則將所選源文件標(biāo)識(shí)為不要被傳輸;以及 b)如果所述目的地虛擬機(jī)當(dāng)前未存儲(chǔ)基本上與所選源文件相同的源文件,則將所選源文件標(biāo)識(shí)為要被傳輸。
10.一種適于用于分布式計(jì)算環(huán)境中的計(jì)算機(jī)實(shí)現(xiàn)方法,所述方法利用處理器和存儲(chǔ)器來(lái)實(shí)現(xiàn)能縮放的且分布式的構(gòu)建服務(wù),所述方法包括: 在單個(gè)物理機(jī)器處,接收對(duì)應(yīng)于要被生成的多個(gè)二進(jìn)制代碼文件的多個(gè)源文件; 在單個(gè)物理機(jī)器上實(shí)例化多個(gè)虛擬機(jī),所述多個(gè)虛擬機(jī)中的每個(gè)虛擬機(jī)用構(gòu)建環(huán)境來(lái)配置,其中所述多個(gè)虛擬機(jī)是與要在所述單個(gè)物理機(jī)器上生成的二進(jìn)制代碼文件數(shù)量相等數(shù)量的虛擬機(jī); 向所述多個(gè)虛擬機(jī)中的每個(gè)虛擬機(jī)發(fā)送對(duì)應(yīng)于所述多個(gè)二進(jìn)制代碼文件中的各單個(gè)二進(jìn)制代碼文件的那些源文件; 使得所述多個(gè)虛擬機(jī)中的每個(gè)虛擬機(jī)從所述源文件生成各二進(jìn)制文件; 使得為多個(gè)所生成的二進(jìn)制代碼文件中的至少一個(gè)二進(jìn)制代碼文件生成數(shù)字簽名;以及 使得包括二進(jìn) 制代碼文件和對(duì)應(yīng)的數(shù)字簽名的二進(jìn)制代碼包被生成。
【文檔編號(hào)】G06F9/44GK103765379SQ201280042013
【公開(kāi)日】2014年4月30日 申請(qǐng)日期:2012年7月27日 優(yōu)先權(quán)日:2011年8月30日
【發(fā)明者】M·E·朱伯蘭, V·齊布林克, A·格沙夫特, V·彼得連科 申請(qǐng)人:微軟公司