【文献】
川口耕介,“やっぱりJavaがスキ![第3回]Hudsonで分散ビルド”,WEB+DB PRESS,日本,株式会社技術評論社,2009年 9月25日,Vol.52,初版,pp.150−157,ISBN978-4-7741-3930-2
【文献】
有村雄二、伊藤雅子,“ソフトウェア開発環境のクラウド化 −沼津ソフトウェア開発クラウドセンターの実践−”,FUJITSU,日本,富士通株式会社,2011年 1月11日,Vol.62,No.1(通巻362号),pp.65−72
【文献】
えびはら,“第1特集 俺のサーバー、白か玄[Part4]小型サーバーを生かす分散コンパイル”,UNIX USER,日本,ソフトバンクパブリッシング株式会社,2005年 9月 1日,第14巻,第9号(通巻158号),pp.52−57
(58)【調査した分野】(Int.Cl.,DB名)
コンピューター実行可能命令が具体化される1つ以上のコンピューター記憶媒体であって、前記コンピューター実行可能命令を実行すると、スケーラブルなビルド・サービスを分散する方法を計算デバイスに実行させ、前記方法が、
構築するブランチを決定するステップと、
前記ブランチの少なくとも一部を構築する仮想機械を特定するステップと、
前記ブランチのために転送される複数のソース・ファイルを特定するステップであって、前記仮想機械が、対応するバイナリー・ファイルを生成するために、前記複数のソース・ファイルから少なくとも1つのソース・ファイルを処理する、ステップと、
前記複数のソース・ファイルの内前記ソース・ファイルを前記仮想機械に転送するステップと、
前記仮想機械上にビルド環境を展開するステップと、
バイナリー・ファイルを生成するように、前記仮想機械に、前記複数のソース・ファイルの内少なくとも前記ソース・ファイルを処理させるステップと、
前記バイナリー・ファイルのディジタル署名を生成させるステップと、
前記ディジタル署名を第2仮想機械に転送するステップと、
少なくとも前記第2仮想機械に、少なくとも前記バイナリー・ファイルおよび前記ディジタル署名からバイナリー・パッケージを生成させるステップと、
を含む、1つ以上のコンピューター記憶媒体。
スケーラブルな分散型ビルド・サービス・システムを実現するためにプロセッサーおよびメモリーを利用する分散型計算環境における使用に適したコンピューター実装方法であって、
構築するブランチを決定するステップと、
前記ブランチの少なくとも一部を構築する仮想機械を特定するステップと、
前記ブランチのために転送される複数のソース・ファイルを特定するステップであって、前記仮想機械が、対応するバイナリー・ファイルを生成するために、前記複数のソース・ファイルから少なくとも1つのソース・ファイルを処理する、ステップと、
前記複数のソース・ファイルの内前記ソース・ファイルを前記仮想機械に転送するステップと、
前記仮想機械上にビルド環境を展開するステップと、
バイナリー・ファイルを生成するように、前記仮想機械に、前記複数のソース・ファイルの内少なくとも前記ソース・ファイルを処理させるステップと、
前記バイナリー・ファイルのディジタル署名を生成させるステップと、
前記ディジタル署名を第2仮想機械に転送するステップと、
少なくとも前記第2仮想機械に、少なくとも前記バイナリー・ファイルおよび前記ディジタル署名からバイナリー・パッケージを生成させるステップと、
を含む、コンピューター実装方法。
【発明を実施するための形態】
【0006】
[0013] 本発明の主題について、法的要件を満たすように、特定性を持って説明する。しかしながら、説明自体は、請求項の範囲を限定することは意図していない。むしろ、本発明者は、特許請求する主題は、本文書において記載するステップとは異なるステップまたは同様のステップの組み合わせを含むように、他の現在または今後の技術と関連付けて、別の方法で具体化してもよいことを想定している。更に、「ステップ」という用語は、本明細書においては、採用される方法の異なるエレメントを言外に意味するために用いることもできるが、個々のステップの順序が明示的に記載されている場合を除いて(unless and except)、この用語は、本明細書において開示される種々のステップ間において、いかなる特定の順序をも暗示するように解釈してはならない。更に、添付図面を参照しながら本発明について以下で詳しく説明するが、図面は、ここで言及したことにより、その全体が本明細書に含まれるものとする。
【0007】
[0014] 本発明の実施形態は、非常に可用性が高く、スケーラブルな分散型サービスのための方法およびアーキテクチャーに関する。したがって、一態様では、本発明は、コンピューター実行可能命令が具体化される1つ以上のコンピューター記憶媒体を含み、このコンピューター実行可能命令を実行すると、スケーラブルなビルド・サービスを分散する方法を計算デバイスに実行させる。この方法は、構築するブランチを決定するステップと、前記ブランチの少なくとも一部を構築する仮想機械を特定するステップと、前記ブランチのために転送される複数のソース・ファイルを特定するステップであって、前記仮想機械が、対応するバイナリー・ファイルを生成するために、前記複数のソース・ファイルから少なくとも1つのソース・ファイルを処理する、ステップとを含む。更に、この方法は、前記複数のソース・ファイルの内前記ソース・ファイルを前記仮想機械に転送するステップと、前記仮想機械上にビルド環境を展開するステップと、バイナリー・ファイルを生成するように、前記仮想機械に、前記複数のソース・ファイルの内少なくとも前記ソース・ファイルを処理させるステップとを含む。加えて、この方法は、前記バイナリー・ファイルのディジタル署名を生成させるステップと、前記ディジタル署名を第2仮想機械に転送するステップと、少なくとも前記第2仮想機械に、少なくとも前記バイナリー・ファイルおよび前記ディジタル署名からバイナリー・パッケージを生成させるステップとを含む。
【0008】
[0015] 他の態様では、本発明は、スケーラブルな分散型ビルド・サービス・システムを含む。この分散型ビルド・サービス・システムは、複数の仮想機械を含み、その各々が、ソース・ファイルを受け取り、バイナリー・ファイルを生成するように少なくともソース・ファイルを処理し、バイナリー・ファイルに対応するディジタル署名を受け取り、および少なくともバイナリー・ファイルおよびディジタル署名からバイナリー・パッケージを生成する。また、このビルド・システムは、ソース・ファイルを格納し、ソース・ファイルをビルド・サービス・コントローラーに送る、第1ソース・レポジトリーも含む。更に、このビルド・システムは、バイナリー・ファイルにディジタル署名を生成するのに十分なバイナリー・ファイルの表現を受け取り、バイナリー・ファイルの表現に対応するディジタル署名を生成する署名サーバーを含む。また、このビルド・システムが含むビルド・サービス・コントローラーは、複数の仮想機械、第1ソース・レポジトリー、および署名サーバーに機能的に接続され、構築するブランチを決定し、ブランチのために転送される複数のソース・ファイルを特定し、少なくとも第1ソース・レポジトリーから複数のソース・ファイルを引き出し、複数のソース・ファイルの内第1ソース・ファイルを、複数の仮想機械の内第1仮想機械に送り、バイナリー・ファイルにディジタル署名を生成するのに十分なバイナリー・ファイルの表現を受け取り、表現を署名サーバーに転送し、ディジタル署名を受け取り、複数の仮想機械の内第2仮想機械にディジタル署名を転送する。
【0009】
[0016] 更に他の態様では、本発明は、スケーラブルな分散型ビルド・サービス・システムを実現するためにプロセッサーおよびメモリーを利用する分散型計算環境における使用に適したコンピューター実装方法を含む。この方法は、1つの物理機械において、生成される複数のバイナリー・ファイルに対応する複数のソース・ファイルを受け取るステップと、1つの物理機械上において複数の仮想機械をインスタンス化するステップとを含み、複数の仮想機械の各々の仮想機械にはビルド環境が構成される。複数の仮想機械は、1つの仮想機械において生成されるバイナリー・ファイルの数に等しい数の仮想機械である。更に、この方法は、複数の仮想機械の各仮想機械に、複数のバイナリー・ファイルの内それぞれのバイナリー・ファイルに対応するソース・ファイルを送るステップと、複数の仮想機械の各仮想機械に、ソース・ファイルからそれぞれのバイナリー・ファイルを生成させるステップと、複数の生成されたバイナリー・ファイルの少なくとも1つのバイナリー・ファイルに対してディジタル署名を生成させるステップと、バイナリー・パッケージを生成させるステップとを含む。バイナリー・パッケージは、バイナリー・ファイルと対応するディジタル署名とを含む。
【0010】
[0017] 以上、本発明の実施形態の全体像について端的に説明したので、その実施形態を実現するのに適した動作環境例について以下に説明する。
[0018] 図面全体を参照し、特に最初に
図1を参照すると、本発明の実施形態を実現するのに適した動作環境例が図示されており、全体的に計算デバイス100として示されている。計算デバイス100は、適した計算環境の一例に過ぎず、本発明の使用範囲や機能に関して何ら限定を示唆する意図はない。また、デバイス100を含む計算環境が、図示されるモジュール/コンポーネントのいずれか1つに関しても、またはその組み合わせに関しても、何らかの依存性または要件を有するというように解釈してはならない。
【0011】
[0019] 実施形態は、コンピューター・コードまたは機械使用可能命令という一般的なコンテキストで説明することができ、コンピューター、あるいはパーソナル・データー・アシスタントまたは他のハンドヘルド・デバイスというような他の機械によって実行されるプログラム・モジュールのような、コンピューター実行可能命令を含む。一般に、プログラム・モジュールは、ルーチン、プログラム、オブジェクト、モジュール、データー構造等を含み、特定のタスクを実行するコード、または特定の抽象データー型を実装するコードを指す。実施形態は、ハンドヘルド・デバイス、消費者用電子機器、汎用コンピューター、特殊計算デバイス等を含む、種々のシステム構成で実施することができる。また、実施形態は、分散型計算環境において実施することもでき、この場合、タスクは、通信ネットワークを通じてリンクされるリモート処理デバイスによって実行される。
【0012】
[0020] 引き続き
図1を参照すると、計算デバイス100は、以下のデバイスを直接または間接的に結合するバス100を含む。メモリー112、1つ以上のプロセッサー114、1つ以上のプレゼンテーション・モジュール116、入力/出力(I/O)ポート118、I/Oモジュール120、および例示の電源122。バス110は、1つ以上のバス(アドレス・バス、データー・バス、またはその組み合わせ)であってもよいものを代表する。
図1の種々のブロックは、明確さのために線で示されるが、実際には、種々のモジュールの境界分けはそれ程明確ではなく、例えて言えば、線は、更に正確にするならば、灰色および曖昧になるであろう。例えば、ディスプレイ・デバイスのようなプレゼンテーション・コンポーネントをI/Oコンポーネントであると見なす者もいると考えられる。また、プロセッサーはメモリーを有する。本発明者は、このようなことは技術の本質であると認識しており、
図1の図は、本発明の1つ以上の実施形態と共に用いることができる計算デバイス例を例示するに過ぎないことを繰り返しておく。「ワークステーション」、「サーバー」、「ラップトップ」、「ハンドヘルド・デバイス」などの間に区別は行わない。何故なら、これらは全て
図1に範囲に入ると考えられ、「コンピューター」または「計算デバイス」を指すからである。
【0013】
[0021] 計算デバイス100は、通例、種々のコンピューター読み取り可能媒体を含む。一例として、そして限定ではなく、コンピューター読み取り可能媒体は、以下の非一時的媒体例を含むことができる。ランダム・アクセス・メモリー(RAM)、リード・オンリー・メモリー(ROM)、電子的消去可能プログラマブル・リード・オンリー・メモリー(EEPROM)、フラッシュ・メモリーまたは他のメモリー技術、CDROM、ディジタル・バーサタイル・ディスク(DVD)、あるいは他の光またはホログラフ媒体、磁気カセット、磁気テープ、磁気ディスク・ストレージ、または他の時期記憶デバイス、あるいは所望の情報をエンコードするために使用することができ、計算デバイス100によってアクセスすることができる他のあらゆる媒体。
【0014】
[0022] メモリー112は、揮発性および/または不揮発性メモリーの形態としたコンピューター記憶媒体を含む。メモリーは、リムーバブル、非リムーバブル、またはその組み合わせであってもよい。ハードウェア・デバイスの例には、ソリッド・ステート・メモリー、ハード・ドライブ、光ディスク・ドライブ等が含まれる。計算デバイス100は、1つ以上のプロセッサーを含む。このプロセッサーは、メモリー112またはI/Oモジュール120のような種々のエンティティからデーターを読み出す。プレゼンテーション・モジュール(1つまたは複数)116は、データー指示をユーザーまたは他のデバイスに提示する。プレゼンテーション・モジュールの例には、ディスプレイ・デバイス、スピーカー、印刷モジュール、振動モジュール等が含まれる。I/Oポート118は、計算デバイス100を、I/Oモジュール120を含む他のデバイスに論理的に結合することを可能にする。I/Oモジュール120の一部は内蔵されていてもよい。モジュールの例には、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星ディッシュ、スキャナー、プリンター、ワイヤレス・デバイス等が含まれる。
【0015】
[0023] これより
図2に移ると、本発明の一態様によるフローチャート図が提示されており、全体的に参照番号200で示されている。ある種の実施形態では、この方法は、ビルド・システム・コントローラーによる実行に適している。最初にステップ202において、構築する1つ以上のブランチのリストを決定する。当技術分野では言うまでもないが、「ブランチ」とは、共通コード・レポジトリーからソフトウェア生産物の特定バージョンを作成するための、ビルド設定値およびソース・コード・ファイル(またはソース・コード・ファイルの一部)の既定構成である。例えば、コード・ベースであれば、「開発」および「発表」(Release)ブランチを有することができる。他の例として、異なるオペレーティング・システムまたはハードウェア・プラットフォームに対して、コード・ベースが異なるブランチを有することができる。更に他の例では、コード・ベースが、「基本」、「自宅」、「仕事」、および「会社」バージョンというように、異なる特徴集合毎にブランチを有することもできる。一般に、異なるブランチはソース・コードの大部分を共有し、ある観点において異なるだけに過ぎない。一実施形態では、どのブランチを構築するかという決定は、ユーザー入力に基づいて行われる。他の実施形態では、どのブランチを構築するか決定するために、構成ファイルが参照される。更に他の実施形態では、このブランチを構築するか決定するために、現行のビルド環境が使用される。
【0016】
[0024] 次に、ステップ203において、ビルドの仮想機械を特定する。一実施形態では、ビルド・サービスは最初に、1つ以上の仮想機械サーバー上でインスタンス化されアイドルになっている仮想機械のプール(pool)を有する。仮想機械は、最初にこのプールから選択され、追加の容量が必要になると、必要に応じて、追加の仮想機械がインスタンス化される。この実施形態の変形では、予めインスタンス化された仮想機械のプールのサイズが、過去の要求にしたがって増減される。他の実施形態では、仮想機械は、単に要求に応じてインスタンス化される。
【0017】
[0025] ビルドの仮想機械が特定された後、これらのブランチを構築するために作業仮想機械(worker virtual machine)に転送すべきファイルのリストを、ステップ204において決定する。一実施形態では、ステップ204は、サブステップ204(a)から204(f)で示すように遂行される。ステップ204(a)では、選択されたブランチの全てを構築するために使用される全てのファイルのリストを編集する。ある種の実施形態では、この情報は、ビルド構成ファイルから得られる。次に、ステップ204(b)において、このように特定されたファイル毎に、続くステップ204(c)から204(e)を繰り返す。ステップ204(c)において、ブランチを構築するためにそのファイルを必要とする1つ以上の仮想機械(VM)を特定する。ステップ204(d)において、このように特定された各VMが既にそのファイルのコピーを有するか否か判定を行う。VMは、例えば、ファイルを使用した他のブランチを構築したことから、またはそのファイルが現在のブランチにおいて不変のまま残っている場合、現在のブランチの以前のバージョンを構築したことから、そのファイルのコピーを既に有する場合もある。ある種の実施形態では、後にファイルを使用するかもしれないVMに、そのファイルを先制してロードして、そうしなければ使用されない転送帯域幅および/または記憶空間を利用する。VMがファイルを既に有しているのではないと判定された場合、ステップ204(e)において、そのVMに転送すべきファイルのリストに、そのファイルを追加する。それ以外の場合、処理はステップ204(b)に戻り、次のファイルを考慮する。一旦各ファイルがステップ204(c)から204(e)によって処理されたなら、ステップ204(f)において各VMに転送すべきファイルのリストを完成させる。
【0018】
[0026] 一旦転送すべきファイルがステップ204において特定されたなら、ステップ206において1つ以上のソース・レポジトリーからこれらを引き出す。先に説明したように、実施形態の中には、これらのファイルの内あるものが、種々の理由の内の1つのために、ローカル・ストレージに既に存在し、これらのファイルを引き出す必要がない場合もある。次に、ステップ208において、以前に特定されたファイルを、しかるべき仮想機械に転送する。尚、ある種のファイルが多数の仮想機械に使用されることもあり、その場合、ファイルはこれらの機械の各々に転送されることを注記しておく。一実施形態では、ファイル転送のネットワーク・オーバーヘッドを極力抑えるために必要なファイルの共通度(degree of commonality)にしたがって、仮想機械を仮想機械サーバー上で集合化する。他の実施形態では、必要とするファイルと、仮想機械サーバーにおいて既にキャッシュされたファイルとの間における共通度にしたがって、仮想機械を仮想機械サーバーに割り当てる。
【0019】
[0027] 次に、ステップ209において、必要に応じて、ビルド環境を仮想機械に分散する。ある種の実施形態では、ビルド環境は、ソース・ファイルが仮想機械に転送される前に、代わりに、仮想機械に分散される。ビルド環境の1つの役割は、ビルド・プロセスを駆動する(drive)ことである。実施形態の中には、ビルド環境がエージェントを含み、このエージェントがビルド・サービス・コントローラーに応答し、アクティビティのステータスを規定し、コマンドを実行する場合がある。他の実施形態では、ビルド環境が、アクティビティを実行するために、ユーザー入力に直接応答する場合もある。更に、ビルド環境はツールを備えることができ、コンパイラー、アセンブラー、リンカー、およびその他のツールというようなコンポーネント、ならびにバイナリー・ファイルを生成するためにソース・ファイルを処理するときに使用されるワークフローを構築することができる。
【0020】
[0028] この時点において、仮想機械は、ソース・ファイルを処理してバイナリー・ファイルを生成することによって、ビルド・プロセスを開始することができる。本発明の一実施形態では、各仮想機械は、所与のブランチと関連付けられたバイナリー・ファイルの全てを生成する役割がある。他の実施形態では、各仮想機械は1つのバイナリーを生成する役割がある(即ち、仮想機械の数が、バイナリーの数と同じである)。更に他の実施形態では、生成すべき全てのバイナリー・ファイルを1組にして、利用可能な仮想機械全体に割り当て、各仮想機械によって実行される処理が等しくなるようにする。更に他の実施形態では、1つよりも多いブランチに対して、異なるブランチに対応する複数のバイナリー・ファイルが、1つの仮想機械に割り当てられる。利用可能な仮想機械間で構築すべきバイナリーを割り当てる他の方法も考えられる。バイナリーの仮想機械への割り当てによって、ステップ204および208において、それぞれ、ファイルの特定および転送が知らされる。ステップ210において、仮想機械は、バイナリー・ファイルを生成するために、しかるべきソース・ファイルを処理する。実施形態の中には、
図3のビルド・サービス・コントローラー302のような他のコンポーネントが、仮想機械にこの処理を開始させる場合がある。ここで、ファイルを「処理する」とは、とりわけ、前処理、コンパイル、アセンブリー、およびリンキングを含み、「バイナリー・ファイル」は、とりわけ、ネーティブな実行可能ファイル、中間表現ファイル、バイトコード表現ファイル、オブジェクト・ファイル、およびライブラリー・ファイルを含むことができる。同様に、「させる」(causing)とは、直接コード実行、プロセス間通信、クライアント−サーバーまたはピア−ツー−ピア・メッセージング、リモート・コマンド実行、ウェブ・サービス、またはリモート・スクリプト呼び出しを含む種々の技法を含むことができる。当業者には明白であるような、仮想機械にファイルを処理させる他の技法も、想起される。
【0021】
[0029] ユーザー入力、ビルド構成ファイル、または他の一般的な方針にしたがって、生成されたバイナリー・ファイルのあるものについて、その出所、改ざんされていない状態を認証するために、または他の理由のために、ディジタル署名してもよい。採用されるディジタル署名アルゴリズムは、RSA、DSA、Elliptic Curve DSA、ElGamalというようなアルゴリズム、または他の確実なディジタル署名アルゴリズムを含むことができる。多くの環境において、署名プロセスに必要なディジタル鍵は、セキュリティの目的上少数の場所にしか格納されず、したがって仮想機械には分散されない。したがって、実施形態の中には、バイナリーが生成された後、ステップ212において、署名のためにこれらを専用署名サーバーに転送するものがある。次に、ステップ214において、対応するディジタル署名を生成する。実施形態の中には、
図3に関して論じられる、ビルド・サービス・コントローラー302のような他のコンポーネントが、以上で述べたような種々の方法の内いずれかによって、これを行わせる。この実施形態の変形では、バイナリーを転送する代わりに、しかるべき仮想機械が、署名を生成するのに十分なバイナリーの表現を生成する。例えば、多くのディジタル署名アルゴリズムは、実際には、ファイル全体ではなく、ファイルの安全なハッシュ(secure hash)に署名する。この例では、このハッシュを生成するために署名鍵が必要でないので、仮想機械はそれ自体でハッシュを生成し、それだけを署名サーバーに送ることができる。この方式には、署名サーバーの作業負荷を軽減し、バイナリー・ファイルを送信することに伴うネットワーク負荷を軽減するという二重の利点がある。バイナリー・ファイル(潜在的に非常に大きい可能性がある)を送信する代わりに、ハッシュだけ(通例1kB未満)が送られる。ここで、そして明細書全体を通じて、「送る」(send)とは、直接送ること、および何かを送らせることによって間接的に送ることの双方を含む。ステップ216において、生成された署名を仮想機械に返送する。実施形態の中には、ディジタル署名の追加によって変更されたバイナリーが、切り離された署名の代わりに、仮想機械に返送される場合もある。「署名」という用語は、ここでは、切り離された署名、およびこのように変更されたバイナリーの双方を含む。
【0022】
[0030] 一旦バイナリー・ファイルおよび署名が収集されたなら、ステップ218においてこれらをバイナリー・パッケージに組み立てる。実施形態の中には、
図3のビルド・サービス・コントローラー302のような他のコンポーネントが、先に説明したような、種々の方法の内いずれかによってこれを行わせる場合もある。実施形態の中には、これらのバイナリー・パッケージが、ビルド・プロセスによる影響を受けないデーター・ファイルを収容する場合もある。実施形態の中には、そのパッケージに対するこれらのバイナリー・ファイルおよび署名が収集され終えたら直ぐに、バイナリー・パッケージの組み立てが開始する場合がある。他の実施形態では、ビルドおよび署名生成プロセスが完全に終了するまでは、パッケージ生成プロセスが開始しない場合もある。一旦パッケージが生成されたなら、これらを仮想機械から転送する。一実施形態では、ステップ220においてこれらをストレージ・サービス(storage service)に公開することによって、これが行われる。他の実施形態では、仮想機械の内1つ以上が、レポジトリーとして機能し、仮想機械に直接サービスを提供する(serve)。最後に、実施形態の中には、ステップ222においてユーザー通知を生成する場合がある。このユーザー通知は、電子メール、インスタント・メッセージ、通話、アプリケーションにおけるポップアップ・アラート、または他のアラートというような、種々の形態をなすことができる。
【0023】
[0031] これより
図3に移ると、本発明の実施形態を実現するのに適した環境が提示され、全体的に参照番号300で示されている。実施形態の中には、ビルド・サービス・コントローラー302が、システムに対して中央コントローラーとして役割を果たし、機能的に他のコンポーネントに接続される場合がある。実施形態の中には、この接続がLAN、WAN、またはインターネット接続を経由する場合がある。これらの接続は直接的または間接的でもよい。他の実施形態では、システム300のコンポーネントが概念的であり、いくつかのコンポーネントを組み合わせて1つの物理サーバーにしてもよい。これらの場合、接続は、共有ストレージおよび/またはプロセス間通信の形態となる。実施形態の中には、ビルド・サービス・コントローラーが、作業VMのコード・ブランチに対するマッピングを追跡するために、メタデーターを維持する場合がある。実施形態の中には、ビルド・サービスが、ユーザー入力を受け、ジョブ・ステータスを表示し、ビルド・メトリックへのアクセスを付与するためにフロント・エンドを設ける場合がある。実施形態の中には、ビルド・コントローラーが、今後の実行に対してビルド・プロセスのスケジューリングを行うことを役割とするとよい場合がある。これは、システム負荷が低下するまでビルドを遅らせる形態を取ることができ、または予期される要求が低くなる期間にビルドのスケジューリングを行う形態を取ることができる。他のスケジューリング経験則も考えられる。実施形態の中には、ビルド・コントローラーが動的仮想機械スケジューリングを役割とする場合もある。これは、ビルド・プロセス専用に設けられる仮想機会の数を増減する形態を取ることができる。また、これは、忙しい仮想機械サーバーから他の忙しくない仮想機械サーバーに仮想機械を移動させる形態を取ることもできる。更に、これは、作業負荷が重い仮想機械に、作業負荷が軽い仮想機械よりも多くのリソースを割り当てるために、1つの仮想機械内部において仮想機械のスケジューリングを操作する形態を取ることもできる。また、動的仮想機械スケジューリングの他の形態も考えられる。ソース・レポジトリー304およびソース・レポジトリー306のような1つ以上のソース・レポジトリーが、ビルド・サービス・コントローラーに接続される。このようなソース・レポジトリーの各々は、付随するストレージ、それぞれ、ストレージ308およびストレージ310を有する。ソース・レポジトリーに付随するストレージは、ローカル・ストレージ、ネットワーク取り付けストレージ、クラウド・ベース・ストレージ、またはソース・レポジトリーによってアクセス可能な他のストレージであってもよい。実施形態の中には、1つのソース・レポジトリーだけが存在すればよい場合もあり、他の実施形態では、多くのソース・レポジトリーが存在する場合もある。
【0024】
[0032] 同様に、ビルド・サービス・コントローラー302にはストレージ・サービス312が接続される。ストレージ・サービス312は、ユーザーに利用可能なバイナリー・パッケージを作る(そして、実施形態によっては、他のファイルも作る)。実施形態の中には、ストレージ・サービス312が、地理複製型(geo−replicated)クラウド・ベース・ストレージ・サービスのような、耐久性があり可用性が非常に高いストレージ・サービスである場合もある。実施形態の中には、ストレージ・サービス312およびソース・レポジトリー304のようなソース・レポジトリーの機能が、1つの物理サーバーに組み合わされる場合もある。他の実施形態では、ストレージ・サービス312およびソース・レポジトリー304が別個の物理サーバーであるが、ストレージ308のような共通バック・エンド・ストレージを共有する場合もある。実施形態の中には、ストレージ・サービス312が、作成された仮想機械上に展開されるビルド環境を格納する場合もある。他の実施形態では、ビルド環境が、ソース・レポジトリー304のようなソース・レポジトリー上に格納される場合もある。更に他の実施形態では、ビルド環境がビルド・サービス・コントローラー302上に格納され、ここからビルド環境が展開される。また、ストレージ・ソリューションの任意の組み合わせも考えられる。また、ビルド・サービス・コントローラー302には署名サーバー314も接続される。署名サーバー314は、
図2のステップ212、214、および216を参照して先に論じたように、生成されたバイナリー・ファイルにディジタル署名を生成するサービスを実行する。署名サーバー314は、署名鍵316を格納する。署名鍵316は、ディジタル署名を生成するために使用される。
【0025】
[0033] 最後に、ビルド・サービス・コントローラー302は、仮想機械サーバー318および320のような、1つ以上の仮想機械サーバーに接続される。各仮想機械サーバーは、仮想機械322および324のような複数の仮想機械を潜在的に実行することができる物理コンピューターを表す。実施形態の中には、仮想機械の一部または全部が、いずれの所与の時点においてもビルド・サービスとは関係ない他のタスク専用に割り当てられてもよい場合がある。実施形態の中には、仮想機械サーバー318および320が私有または公開計算クラウドの一部である場合もある。実施形態の中には、仮想機械が必要に応じてインスタンス化され、これらが不要になるとまたは使用されなくなると、削除される場合もあり、あるいはガベージ・コレクションが行われる場合もある。実施形態の中には、ビルド・サービス・コントローラー302が、ビルド・サービスの必要性にしたがって使用される作業VMの数を増減する(scale)場合もある。仮想機械322のような各仮想機械には、何らかの1組のソースおよびデーター・ファイル326がロードされ、これらのソースおよびデーター・ファイル326は、仮想機械にロードされるビルド環境から分かる(informed)ように、バイナリー・パッケージを生成するために使用される。尚、仮想機械324によって格納されるファイル328は、仮想機械322によって格納されるファイル326と完全に重複する、部分的に重複する、または重複しない場合があり、これらのファイルは、仮想機械によって仮想機械サーバー320上に格納される。
図3に示すビルド・システムのコンポーネントはいずれも、本明細書において説明する機能を実行するために、1つ以上のプロセッサーおよび/またはメモリーを利用することができる。
【0026】
[0034] これより
図4に移ると、本発明の他の態様によるフローチャート図が提示されている。
図4は、仮想機械322のような仮想機械による実行に適した方法を示し、全体的に参照番号400が付けられている。最初に、ステップ402において、0個以上のソース・ファイルを受け取る。これらの受け取られるファイルは、0個以上の既にローカルに格納されているファイルと組み合わせて、1つ以上のバイナリー・ファイルを生成するのに十分である。纏めて、これらのファイルは
図3のファイル326に対応することができる。次に、ステップ404において、これらのファイルを処理して1つ以上のバイナリー・ファイルを生成する。ステップ406において、生成したバイナリー・ファイルの表現を署名サーバーに送る。実施形態の中には、これらの表現が直接署名サーバーに送られる場合がある。他の実施形態では、これらはビルド・サービス・コントローラーまたは他の仲介ホストに送られ、次いでこれらを署名サーバーに転送する。実施形態の中には、「表現」が証明されるバイナリー・ファイル全体を含む場合があり、他の実施形態では、表現は、署名すべきバイナリーの耐衝突(collision−resistant)暗号ハッシュのような、署名生成に十分な、もっと少量の情報を含む場合もある。私有または検査ビルドの場合というような、更に他の実施形態では、バイナリーに署名するステップを省略することができる。
【0027】
[0035] 次に、ステップ408において、署名されるバイナリー・ファイルに対応するディジタル署名を受け取る。この場合も、これらのディジタル署名を署名サーバーから直接受けても、またはビルド・サービス・コントローラーまたは他の仲介ホストを介して間接的に受け取ってもよい。これらのディジタル署名は、1つ以上の対応するまたは未署名のバイナリー・ファイルと共に、ステップ410においてバイナリー・パッケージを生成するために使用される。最後に、ステップ412において、バイナリー・パッケージを他のホストに送信する。実施形態の中には、これらを公開するために、ストレージ・サービス312のようなストレージ・サービスに送信することができる場合もある。他の実施形態では、バイナリー・パッケージをビルド・サービス・コントローラー302に送ることもできる。更に他の実施形態では、ビルド・プロセスを開始したユーザーのコンピューターにこれらを送る。
【0028】
[0036]
図5は、本発明の実施形態による、ソース・レポジトリー304のようなソース・レポジトリーによる実行に適した方法を示し、全体的に参照番号500が付けられている。最初にステップ502において、1つ以上のソース・ファイルを求める要求を受ける。一実施形態では、
図3のビルド・サービス・コントローラー302から要求を受ける。他の実施形態では、仮想機械サーバー318上で実行する仮想機械322のような、仮想機械から要求を受ける。318および322は双方共
図3にある。次にステップ504において、要求されたファイルをストレージから引き出して送信する。一実施形態では、これらを要求元に送信する。他の実施形態では、これらをキャッシュして要求元に転送するために、ビルド・サービス・コントローラー302または仮想機械サーバー318のような他のホストにこれらを送信する。
【0029】
[0037]
図6は、本発明の実施形態による、署名サーバー314のような署名サーバーによる実行に適した方法を示し、全体的に参照番号600が付けられている。最初に、ステップ602において、バイナリー・ファイルの1つ以上の表現を受け取る。一実施形態では、要求は、
図3の仮想機械322のような、仮想機械から直接受け取る。他の実施形態では、ビルド・サービス・コントローラーまたは他の仲介ホストを経由して要求を受ける。先に論じたように、実施形態の中には表現が署名するバイナリー・ファイル全体であることがあり、一方他の実施形態では、表現が署名生成に十分なだけのもっと少量の情報であることもある。実施形態の中には、署名サーバーが、ウィルス・スキャニング、正しい形式の検証、およびビルド位置の確認というような追加のステップを、署名を生成する前に実行する場合もある。次に、ステップ604において、1つ以上の表現に対応する1つ以上のディジタル署名を生成する。これは、多数の周知のディジタル署名アルゴリズムの内いずれで行うこともでき、
図3のディジタル署名鍵316を使用する。最後に、ステップ606において、1つ以上の生成した署名を要求元に返送する。
【0030】
[0038]
図7は、本発明の実施形態による、
図3のビルド・ソース・コントローラー302のようなビルド・ソース・コントローラーによる実行に適した方法を示し、全体的に参照番号700が付けられている。最初に、ステップ702において、構築する1つ以上のブランチのリストを決定する。一実施形態では、構築するブランチの決定は、ユーザー入力に基づく。他の実施形態では、構築するブランチを決定するために、構成ファイルを参照する。更に他の実施形態では、構築するブランチを決定するために、現在のビルド環境を使用する。次に、ステップ704において、これらのブランチを構築するために作業仮想機械に転送すべきファイルのリストを決定する。一実施形態では、これは、
図2のステップ204(a)から204(f)およびこれらに付随する論述において説明するように遂行することができる。一旦ファイルが特定されたなら、ステップ706において、
図3のソース・レポジトリー304およびソース・レポジトリー306のような1つ以上のソース・レポジトリーからこれらを引き出し、ステップ708においてしかるべき仮想機械に転送する。この場合も、ある種のファイルが多数の仮想機械によって使用される場合があり、したがってこれらの機械の各々にファイルを転送する。一実施形態では、ファイル転送のネットワーク・オーバーヘッドを極力抑えるために、これらが使用するファイルの共通度にしたがって、仮想機械を仮想機械サーバーに集合化する。他の実施形態では、転送されたファイルが今後再度必要になった場合に、ソース・レポジトリーからこれらを再度読み取らなくても済むように、これらのコピーを維持する。
【0031】
[0039] 次に、ステップ710において、署名すべきバイナリー・ファイルの表現をコンピューター実行方法700において受け取る。ある種の実施形態では、これは
図3のビルド・サービス・コントローラー302である。一実施形態では、これらは、バイナリー・ファイルを生成した仮想機械から受け取られる。一実施形態では、バイナリー・ファイル全体が受け取られ、更にコンパクトな表現が、今後の送信のために生成される。次いで、ステップ712において、これらの表現を、署名サーバー314のような署名サーバーに転送する(例えば、送る)。その後、ステップ714において、これらの表現に対応するディジタル署名を、逆に署名サーバーから受け取り、ステップ716において、これらをしかるべき仮想機械に転送する。実施形態の中には、しかるべき仮想機械が、対応するバイナリー・ファイルを作成した仮想機械である場合があり、他の実施形態では、バイナリー・パッケージ作成を役割とする他の仮想機械である場合もある。ステップ718において、ソース・ファイルおよびディジタル署名に対応するバイナリー・ファイルを構成するバイナリー・パッケージを受け取る。一実施形態では、これらのバイナリー・パッケージを作成した仮想機械からこれらを受け取る。他の実施形態では、これらは、更に、ビルド・プロセスによって変化を受けなかったデーターも含む。次に、ステップ720において、これらのパッケージを今後の引き出しのために利用可能にする。一実施形態では、これは、これらのパッケージをストレージ・サービスに公開することによって行われる。他の実施形態では、これは、これらのパッケージを所定の場所に転送することによって行われる。更に他の実施形態では、これは、これらのパッケージがユーザーによって引き出されるまでこれらをローカルに格納することによって行われる。最後に、ステップ722において、パッケージが利用可能であることをユーザーに知らせるために、通知を生成する。この通知は、
図2のステップ222を参照して論じた形態の内いずれを取ることもできる。
【0032】
[0040] これより
図8に移ると、
図3の仮想機械サーバー318のような仮想機械サーバーによる実行に適した、本発明の更に他の態様によるフローチャート図が示されており、全体的に参照番号800が付けられている。実施形態の中には、
図3の仮想機械サーバー318が、ラップトップ、デスクトップ、またはサーバー・クラス・コンピューターというような1つの物理機械である場合がある。他の実施形態では、仮想機械サーバー318自体が、サーバー・ファームのような分散型計算環境であることもできる。
【0033】
[0041] 最初に、ステップ802において、1つ以上のブランチおよびソース・ファイルのリストを受け取る。一実施形態では、ソース・ファイルのリストのみを受け取り、ソース・レポジトリー304のようなソース・レポジトリーから ソース・ファイルを引き出す。他の実施形態では、ソース・ファイルを1つ以上のブランチのリストと共に受け取る。次に、ステップ804において、1つ以上の仮想機械をインスタンス化する。バイナリーを仮想機械に割り当てる論述において先に論じたように、多数の割り当て方策(strategy)が考えられ、使用される正確な割り当て方策から、インスタンス化される仮想機械の数が分かる。更に、ステップ804は、ビルド・サービスに関与するために仮想機械を準備することも含む。この準備は、ビルド環境の展開を含む。ビルド環境は、インスタンス化の間に作業VM上にロードすることができ、またはインスタンス化の後にビルド・システム・コントローラー302によって作業VMにプッシュすることができる。仮想機械がインスタンス化された後、ステップ806において、しかるべきソース・ファイルを各仮想機械に転送する。
【0034】
[0042] 次に、ステップ808において、これらのソース・ファイルから生成されたバイナリー・ファイルを、仮想機械から収集する。一実施形態では、これらに署名する目的上、バイナリー・ファイルのコンパクトな表現を生成する。次に、ステップ810において、バイナリーのディジタル署名を取得する。一実施形態では、これは、
図3の署名サーバー314と直接通信することによって行われ、他の実施形態では、
図3のビルド・サービス・コントローラー302を通じて署名サーバー314と通信することによって行われる。ステップ812において、バイナリー・ファイル、ディジタル署名、および実施形態によっては、他のデーター・ファイルから、バイナリー・パッケージを生成する。次に、ステップ814において、バイナリー・パッケージを、引き出しのために利用可能にする。一実施形態では、これは、これらが引き出される場所にこれらを送信することを含む。他の実施形態では、これは、ソフトウェア・エージェントまたは人がこれらを引き出すことができるVM上の周知のローカル位置に、これらを置くことを含む。最後に、ステップ816において、通知を生成する。一実施形態では、これはユーザー通知であり、他の実施形態では、これはソフトウェア・エージェントに通知することを含む。
【0035】
[0043] 本発明の代替実施形態および実施態様(implementation)は、図面を含む本明細書を検討すれば、本発明が関係する技術分野の当業者には明白になるであろう。したがって、本発明の範囲は、以上の説明ではなく、本文書の「特許請求の範囲」の章に出てくる請求項によって定められるものとする。