(57)【特許請求の範囲】
【請求項１】
コンピューター実行可能命令が具体化される１つ以上のコンピューター記憶媒体であって、前記コンピューター実行可能命令を実行すると、スケーラブルなビルド・サービスを分散する方法を計算デバイスに実行させ、前記方法が、
構築するブランチを決定するステップと、
前記ブランチの少なくとも一部を構築する仮想機械を特定するステップと、
前記ブランチのために転送される複数のソース・ファイルを特定するステップであって、前記仮想機械が、対応するバイナリー・ファイルを生成するために、前記複数のソース・ファイルから少なくとも１つのソース・ファイルを処理する、ステップと、
前記複数のソース・ファイルの内前記ソース・ファイルを前記仮想機械に転送するステップと、
前記仮想機械上にビルド環境を展開するステップと、
バイナリー・ファイルを生成するように、前記仮想機械に、前記複数のソース・ファイルの内少なくとも前記ソース・ファイルを処理させるステップと、
前記バイナリー・ファイルのディジタル署名を生成させるステップと、
前記ディジタル署名を第２仮想機械に転送するステップと、
少なくとも前記第２仮想機械に、少なくとも前記バイナリー・ファイルおよび前記ディジタル署名からバイナリー・パッケージを生成させるステップと、
を含む、１つ以上のコンピューター記憶媒体。
【請求項２】
請求項１記載のコンピューター記憶媒体において、前記方法が、更に、
前記バイナリー・パッケージが引き出しのために利用可能であるというユーザー通知を生成するステップを含む、コンピューター記憶媒体。
【請求項３】
請求項１記載のコンピューター記憶媒体において、転送される複数のソース・ファイルを特定するステップが、
前記ブランチを構築するために使用されるソース・ファイルのリストを得るステップと、
前記ソース・ファイルのリストから、前記ブランチを構築するために使用されるとして選択されたソース・ファイルに対して、
（１）前記選択されたソース・ファイルが転送される宛先仮想機械を決定し、
（２）前記宛先仮想機械が、前記選択されたソース・ファイルと実質的に同一であるソース・ファイルを現在格納しているか否か決定し、
ａ）前記宛先仮想機械が、前記選択されたソース・ファイルと実質的に同一であるソース・ファイルを現在格納している場合、前記選択されたソース・ファイルを、転送されないものとして特定し、
ｂ）前記宛先仮想機械が、前記選択されたソース・ファイルと実質的に同一であるソース・ファイルを現在格納していない場合、前記選択されたソース・ファイルを、転送されるものとして特定するステップを含む、コンピューター記憶媒体。
【請求項４】
請求項１記載のコンピューター記憶媒体において、前記ブランチの少なくとも一部を構築するために仮想機械を特定するステップが、
第１仮想機械サーバーがアイドルの仮想機械を有するか否か判定するステップと、
前記第１仮想機械サーバーがアイドルの仮想機械を有する場合、前記仮想機械を、前記ブランチの少なくとも一部を構築するための前記仮想機械として特定するステップと、
前記第１仮想機械サーバーがアイドルの仮想機械を有さない場合、新たな仮想機械をインスタンス化し、前記新たな仮想機械を、前記ブランチの少なくとも一部を構築するための前記仮想機械として特定するステップと、
を含む、コンピューター記憶媒体。
【請求項５】
スケーラブルな分散型ビルド・サービス・システムであって、
各々、以下の機能を実行するように構成される複数の仮想機械であって、
（１）ソース・ファイルを受け取り、
（２）バイナリー・ファイルを生成するように少なくとも前記ソース・ファイルを処理し、
（３）前記バイナリー・ファイルに対応するディジタル署名を受け取り、および
（４）少なくとも前記バイナリー・ファイルおよび前記ディジタル署名からバイナリー・パッケージを生成する、仮想機械と、
以下の機能を実行するように構成される第１ソース・レポジトリーであって、
（１）前記ソース・ファイルを格納し、
（２）前記ソース・ファイルをビルド・サービス・コントローラーに送る、第１ソース・レポジトリーと、
以下の機能を実行するように構成される署名サーバーであって、
（１）前記バイナリー・ファイルにディジタル署名を生成するのに十分な前記バイナリー・ファイルの表現を受け取り、
（２）前記バイナリー・ファイルの表現に対応する前記ディジタル署名を生成する、署名サーバーと、
を含み、
前記ビルド・サービス・コントローラーが、前記複数の仮想機械、前記第１ソース・レポジトリー、および前記署名サーバーに機能的に接続され、
（１）構築するブランチを決定する機能、
（２）前記ブランチのために転送される複数のソース・ファイルを特定する機能、
（３）少なくとも第１ソース・レポジトリーから前記複数のソース・ファイルを引き出す機能、
（４）前記複数のソース・ファイルの内第１ソース・ファイルを、前記複数の仮想機械の内第１仮想機械に送る機能、
（５）前記バイナリー・ファイルに前記ディジタル署名を生成するのに十分な前記バイナリー・ファイルの表現を受け取り、前記表現を前記署名サーバーに転送する機能、および
（６）前記ディジタル署名を受け取り、前記複数の仮想機械の内第２仮想機械に前記ディジタル署名を転送する機能、
を実行するためにプロセッサーおよびメモリーを利用する、システム。
【請求項６】
請求項５記載のシステムにおいて、前記ビルド・サービス・コントローラーが、更に、前記複数のバイナリー・パッケージをストレージ・サービスに公開する機能を実行する、システム。
【請求項７】
請求項５記載のシステムにおいて、前記ビルド・サービス・コントローラーが、更に、今後の実行のためにビルド・プロセスのスケジューリングを行う機能を実行する、システム。
【請求項８】
請求項５記載のシステムにおいて、前記ビルド・サービス・コントローラーが、更に、前記複数のバイナリー・パッケージが利用可能であるというユーザー通知を生成する機能を実行する、システム。
【請求項９】
請求項５記載のシステムにおいて、前記ビルド・サービス・コントローラーが、前記ブランチのために転送される複数のソース・ファイルを特定する機能の内、
前記ブランチを構築するために使用されるソース・ファイルのリストを得る下位機能と、
前記ソース・ファイルのリストから、前記ブランチを構築するために使用されるとして選択されたソース・ファイルに対して、
（１）前記選択されたソース・ファイルが転送される宛先仮想機械を決定し、
（２）前記宛先仮想機械が、前記選択されたソース・ファイルと実質的に同一であるソース・ファイルを現在格納しているか否か決定し、
ａ）前記宛先仮想機械が、前記選択されたソース・ファイルと実質的に同一であるソース・ファイルを現在格納している場合、前記選択されたソース・ファイルを、転送されないものとして特定し、
ｂ）前記宛先仮想機械が、前記選択されたソース・ファイルと実質的に同一であるソース・ファイルを現在格納していない場合、前記選択されたソース・ファイルを、転送されるものとして特定する下位機能と、
を実行する、システム。
【請求項１０】
スケーラブルな分散型ビルド・サービス・システムを実現するためにプロセッサーおよびメモリーを利用する分散型計算環境における使用に適したコンピューター実装方法であって、
構築するブランチを決定するステップと、
前記ブランチの少なくとも一部を構築する仮想機械を特定するステップと、
前記ブランチのために転送される複数のソース・ファイルを特定するステップであって、前記仮想機械が、対応するバイナリー・ファイルを生成するために、前記複数のソース・ファイルから少なくとも１つのソース・ファイルを処理する、ステップと、
前記複数のソース・ファイルの内前記ソース・ファイルを前記仮想機械に転送するステップと、
前記仮想機械上にビルド環境を展開するステップと、
バイナリー・ファイルを生成するように、前記仮想機械に、前記複数のソース・ファイルの内少なくとも前記ソース・ファイルを処理させるステップと、
前記バイナリー・ファイルのディジタル署名を生成させるステップと、
前記ディジタル署名を第２仮想機械に転送するステップと、
少なくとも前記第２仮想機械に、少なくとも前記バイナリー・ファイルおよび前記ディジタル署名からバイナリー・パッケージを生成させるステップと、
を含む、コンピューター実装方法。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  ソフトウェア生産物、特に大規模ソフトウェア生産物のためにバイナリー・パッケージを構築することは、非常に計算集約的なプロセスである。このため、ビルド・プロセスを正当な時間期間内に完了させるように、多数の計算ノードにわたって作業負荷を分散させることが望ましい。しかしながら、このようなビルド・サービスに対する要求は非常に間欠的(intermittent)である可能性があるので、専用のビルド・リソースを有し、要求が少ない期間中アイドルのままになってしまうのは望ましくない。したがって、本明細書では、非常に可用性高く、動的にスケーラブルで、効率的な仕方でビルド・サービスを分散するために、クラウド・リソースを利用する方法およびシステムを提供する。
【発明の概要】
【０００２】
[0002]  本発明の実施形態は、非常に可用性が高く、動的にスケーラブルで、効率的なビルド・サービスを分散するシステム、方法、およびコンピューター記憶媒体に関する。スケーラブルな分散型ビルド・プロセスに利用することができるコンピューター・リソースを提供する１つの環境は、柔軟な計算クラウドである。このような環境では、ビルド・プロセスのリソースの要件が指示されるに応じて、インスタンス化および削除(destroy)することができる。この手法の利点の１つは、専用のハードウェアが不要であり、ビルド・プロセスがアイドルであるときには、ハードウェアにおける余分な容量を、他の計算タスクのために使用できることである。しかしながら、ある種のコンポーネントにとっては、仮想化されないままになっていることが有利な場合もある。例えば、ある種の用途では、署名鍵(signing key)は、共有ハードウェア上に格納されることを許可されるのではなく、専用サーバー上で厳しく制御される。つまり、本明細書において開示されるアーキテクチャーは、効率的で、スケーラブルで、非常に可用性が高く、しかも安全であるシステムを提供する。
【０００３】
[0003]  この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を判断するときに補助として用いられることを意図するのでもない。
【０００４】
[0004]  本発明の例示的な実施形態について、添付図面を参照しながら以下で詳細に説明する。
【図面の簡単な説明】
【０００５】
【図１】図１は、本発明の実施形態を実現するのに適した計算デバイス例を示す。
【図２】図２は、本発明の一態様によるフローチャート図を示す。
【図３】図３は、本発明の実施形態を実現するのに適した環境を示す。
【図４】図４は、本発明の一態様にしたがってバイナリー・パッケージを生成するためにソース・ファイルを処理する、仮想機械による実行に適した方法のフローチャート図を示す。
【図５】図５は、本発明の他の態様にしたがってソース・ファイルを要求に応じて供給する、ソース・レポジトリーによる実行に適した方法のフローチャート図を示す。
【図６】図６は、署名サーバー(signing server)による実行に適した、本発明の他の態様によるバイナリー・ファイル用ディジタル署名生成方法のフローチャート図を示す。
【図７】図７は、ビルド・サービス・コントローラーによる実行に適した、本発明の他の態様によるビルド・サービス制御方法のフローチャート図を示す。
【図８】図８は、本発明の更に他の態様にしたがって、ソース・ファイルからバイナリー・パッケージを生成するために仮想機械サーバーを動作させるためのフローチャート図を示す。
【発明を実施するための形態】
【０００６】
[0013]  本発明の主題について、法的要件を満たすように、特定性を持って説明する。しかしながら、説明自体は、請求項の範囲を限定することは意図していない。むしろ、本発明者は、特許請求する主題は、本文書において記載するステップとは異なるステップまたは同様のステップの組み合わせを含むように、他の現在または今後の技術と関連付けて、別の方法で具体化してもよいことを想定している。更に、「ステップ」という用語は、本明細書においては、採用される方法の異なるエレメントを言外に意味するために用いることもできるが、個々のステップの順序が明示的に記載されている場合を除いて(unless and except)、この用語は、本明細書において開示される種々のステップ間において、いかなる特定の順序をも暗示するように解釈してはならない。更に、添付図面を参照しながら本発明について以下で詳しく説明するが、図面は、ここで言及したことにより、その全体が本明細書に含まれるものとする。
【０００７】
[0014]  本発明の実施形態は、非常に可用性が高く、スケーラブルな分散型サービスのための方法およびアーキテクチャーに関する。したがって、一態様では、本発明は、コンピューター実行可能命令が具体化される１つ以上のコンピューター記憶媒体を含み、このコンピューター実行可能命令を実行すると、スケーラブルなビルド・サービスを分散する方法を計算デバイスに実行させる。この方法は、構築するブランチを決定するステップと、前記ブランチの少なくとも一部を構築する仮想機械を特定するステップと、前記ブランチのために転送される複数のソース・ファイルを特定するステップであって、前記仮想機械が、対応するバイナリー・ファイルを生成するために、前記複数のソース・ファイルから少なくとも１つのソース・ファイルを処理する、ステップとを含む。更に、この方法は、前記複数のソース・ファイルの内前記ソース・ファイルを前記仮想機械に転送するステップと、前記仮想機械上にビルド環境を展開するステップと、バイナリー・ファイルを生成するように、前記仮想機械に、前記複数のソース・ファイルの内少なくとも前記ソース・ファイルを処理させるステップとを含む。加えて、この方法は、前記バイナリー・ファイルのディジタル署名を生成させるステップと、前記ディジタル署名を第２仮想機械に転送するステップと、少なくとも前記第２仮想機械に、少なくとも前記バイナリー・ファイルおよび前記ディジタル署名からバイナリー・パッケージを生成させるステップとを含む。
【０００８】
[0015]  他の態様では、本発明は、スケーラブルな分散型ビルド・サービス・システムを含む。この分散型ビルド・サービス・システムは、複数の仮想機械を含み、その各々が、ソース・ファイルを受け取り、バイナリー・ファイルを生成するように少なくともソース・ファイルを処理し、バイナリー・ファイルに対応するディジタル署名を受け取り、および少なくともバイナリー・ファイルおよびディジタル署名からバイナリー・パッケージを生成する。また、このビルド・システムは、ソース・ファイルを格納し、ソース・ファイルをビルド・サービス・コントローラーに送る、第１ソース・レポジトリーも含む。更に、このビルド・システムは、バイナリー・ファイルにディジタル署名を生成するのに十分なバイナリー・ファイルの表現を受け取り、バイナリー・ファイルの表現に対応するディジタル署名を生成する署名サーバーを含む。また、このビルド・システムが含むビルド・サービス・コントローラーは、複数の仮想機械、第１ソース・レポジトリー、および署名サーバーに機能的に接続され、構築するブランチを決定し、ブランチのために転送される複数のソース・ファイルを特定し、少なくとも第１ソース・レポジトリーから複数のソース・ファイルを引き出し、複数のソース・ファイルの内第１ソース・ファイルを、複数の仮想機械の内第１仮想機械に送り、バイナリー・ファイルにディジタル署名を生成するのに十分なバイナリー・ファイルの表現を受け取り、表現を署名サーバーに転送し、ディジタル署名を受け取り、複数の仮想機械の内第２仮想機械にディジタル署名を転送する。
【０００９】
[0016]  更に他の態様では、本発明は、スケーラブルな分散型ビルド・サービス・システムを実現するためにプロセッサーおよびメモリーを利用する分散型計算環境における使用に適したコンピューター実装方法を含む。この方法は、１つの物理機械において、生成される複数のバイナリー・ファイルに対応する複数のソース・ファイルを受け取るステップと、１つの物理機械上において複数の仮想機械をインスタンス化するステップとを含み、複数の仮想機械の各々の仮想機械にはビルド環境が構成される。複数の仮想機械は、１つの仮想機械において生成されるバイナリー・ファイルの数に等しい数の仮想機械である。更に、この方法は、複数の仮想機械の各仮想機械に、複数のバイナリー・ファイルの内それぞれのバイナリー・ファイルに対応するソース・ファイルを送るステップと、複数の仮想機械の各仮想機械に、ソース・ファイルからそれぞれのバイナリー・ファイルを生成させるステップと、複数の生成されたバイナリー・ファイルの少なくとも１つのバイナリー・ファイルに対してディジタル署名を生成させるステップと、バイナリー・パッケージを生成させるステップとを含む。バイナリー・パッケージは、バイナリー・ファイルと対応するディジタル署名とを含む。
【００１０】
[0017]  以上、本発明の実施形態の全体像について端的に説明したので、その実施形態を実現するのに適した動作環境例について以下に説明する。
[0018]  図面全体を参照し、特に最初に図１を参照すると、本発明の実施形態を実現するのに適した動作環境例が図示されており、全体的に計算デバイス１００として示されている。計算デバイス１００は、適した計算環境の一例に過ぎず、本発明の使用範囲や機能に関して何ら限定を示唆する意図はない。また、デバイス１００を含む計算環境が、図示されるモジュール／コンポーネントのいずれか１つに関しても、またはその組み合わせに関しても、何らかの依存性または要件を有するというように解釈してはならない。
【００１１】
[0019]  実施形態は、コンピューター・コードまたは機械使用可能命令という一般的なコンテキストで説明することができ、コンピューター、あるいはパーソナル・データー・アシスタントまたは他のハンドヘルド・デバイスというような他の機械によって実行されるプログラム・モジュールのような、コンピューター実行可能命令を含む。一般に、プログラム・モジュールは、ルーチン、プログラム、オブジェクト、モジュール、データー構造等を含み、特定のタスクを実行するコード、または特定の抽象データー型を実装するコードを指す。実施形態は、ハンドヘルド・デバイス、消費者用電子機器、汎用コンピューター、特殊計算デバイス等を含む、種々のシステム構成で実施することができる。また、実施形態は、分散型計算環境において実施することもでき、この場合、タスクは、通信ネットワークを通じてリンクされるリモート処理デバイスによって実行される。
【００１２】
[0020]  引き続き図１を参照すると、計算デバイス１００は、以下のデバイスを直接または間接的に結合するバス１００を含む。メモリー１１２、１つ以上のプロセッサー１１４、１つ以上のプレゼンテーション・モジュール１１６、入力／出力（Ｉ／Ｏ）ポート１１８、Ｉ／Ｏモジュール１２０、および例示の電源１２２。バス１１０は、１つ以上のバス（アドレス・バス、データー・バス、またはその組み合わせ）であってもよいものを代表する。図１の種々のブロックは、明確さのために線で示されるが、実際には、種々のモジュールの境界分けはそれ程明確ではなく、例えて言えば、線は、更に正確にするならば、灰色および曖昧になるであろう。例えば、ディスプレイ・デバイスのようなプレゼンテーション・コンポーネントをＩ／Ｏコンポーネントであると見なす者もいると考えられる。また、プロセッサーはメモリーを有する。本発明者は、このようなことは技術の本質であると認識しており、図１の図は、本発明の１つ以上の実施形態と共に用いることができる計算デバイス例を例示するに過ぎないことを繰り返しておく。「ワークステーション」、「サーバー」、「ラップトップ」、「ハンドヘルド・デバイス」などの間に区別は行わない。何故なら、これらは全て図１に範囲に入ると考えられ、「コンピューター」または「計算デバイス」を指すからである。
【００１３】
[0021]  計算デバイス１００は、通例、種々のコンピューター読み取り可能媒体を含む。一例として、そして限定ではなく、コンピューター読み取り可能媒体は、以下の非一時的媒体例を含むことができる。ランダム・アクセス・メモリー（ＲＡＭ）、リード・オンリー・メモリー（ＲＯＭ）、電子的消去可能プログラマブル・リード・オンリー・メモリー（ＥＥＰＲＯＭ）、フラッシュ・メモリーまたは他のメモリー技術、ＣＤＲＯＭ、ディジタル・バーサタイル・ディスク（ＤＶＤ）、あるいは他の光またはホログラフ媒体、磁気カセット、磁気テープ、磁気ディスク・ストレージ、または他の時期記憶デバイス、あるいは所望の情報をエンコードするために使用することができ、計算デバイス１００によってアクセスすることができる他のあらゆる媒体。
【００１４】
[0022]  メモリー１１２は、揮発性および／または不揮発性メモリーの形態としたコンピューター記憶媒体を含む。メモリーは、リムーバブル、非リムーバブル、またはその組み合わせであってもよい。ハードウェア・デバイスの例には、ソリッド・ステート・メモリー、ハード・ドライブ、光ディスク・ドライブ等が含まれる。計算デバイス１００は、１つ以上のプロセッサーを含む。このプロセッサーは、メモリー１１２またはＩ／Ｏモジュール１２０のような種々のエンティティからデーターを読み出す。プレゼンテーション・モジュール（１つまたは複数）１１６は、データー指示をユーザーまたは他のデバイスに提示する。プレゼンテーション・モジュールの例には、ディスプレイ・デバイス、スピーカー、印刷モジュール、振動モジュール等が含まれる。Ｉ／Ｏポート１１８は、計算デバイス１００を、Ｉ／Ｏモジュール１２０を含む他のデバイスに論理的に結合することを可能にする。Ｉ／Ｏモジュール１２０の一部は内蔵されていてもよい。モジュールの例には、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星ディッシュ、スキャナー、プリンター、ワイヤレス・デバイス等が含まれる。
【００１５】
[0023]  これより図２に移ると、本発明の一態様によるフローチャート図が提示されており、全体的に参照番号２００で示されている。ある種の実施形態では、この方法は、ビルド・システム・コントローラーによる実行に適している。最初にステップ２０２において、構築する１つ以上のブランチのリストを決定する。当技術分野では言うまでもないが、「ブランチ」とは、共通コード・レポジトリーからソフトウェア生産物の特定バージョンを作成するための、ビルド設定値およびソース・コード・ファイル（またはソース・コード・ファイルの一部）の既定構成である。例えば、コード・ベースであれば、「開発」および「発表」(Release)ブランチを有することができる。他の例として、異なるオペレーティング・システムまたはハードウェア・プラットフォームに対して、コード・ベースが異なるブランチを有することができる。更に他の例では、コード・ベースが、「基本」、「自宅」、「仕事」、および「会社」バージョンというように、異なる特徴集合毎にブランチを有することもできる。一般に、異なるブランチはソース・コードの大部分を共有し、ある観点において異なるだけに過ぎない。一実施形態では、どのブランチを構築するかという決定は、ユーザー入力に基づいて行われる。他の実施形態では、どのブランチを構築するか決定するために、構成ファイルが参照される。更に他の実施形態では、このブランチを構築するか決定するために、現行のビルド環境が使用される。
【００１６】
[0024]  次に、ステップ２０３において、ビルドの仮想機械を特定する。一実施形態では、ビルド・サービスは最初に、１つ以上の仮想機械サーバー上でインスタンス化されアイドルになっている仮想機械のプール(pool)を有する。仮想機械は、最初にこのプールから選択され、追加の容量が必要になると、必要に応じて、追加の仮想機械がインスタンス化される。この実施形態の変形では、予めインスタンス化された仮想機械のプールのサイズが、過去の要求にしたがって増減される。他の実施形態では、仮想機械は、単に要求に応じてインスタンス化される。
【００１７】
[0025]  ビルドの仮想機械が特定された後、これらのブランチを構築するために作業仮想機械(worker virtual machine)に転送すべきファイルのリストを、ステップ２０４において決定する。一実施形態では、ステップ２０４は、サブステップ２０４（ａ）から２０４（ｆ）で示すように遂行される。ステップ２０４（ａ）では、選択されたブランチの全てを構築するために使用される全てのファイルのリストを編集する。ある種の実施形態では、この情報は、ビルド構成ファイルから得られる。次に、ステップ２０４（ｂ）において、このように特定されたファイル毎に、続くステップ２０４（ｃ）から２０４（ｅ）を繰り返す。ステップ２０４（ｃ）において、ブランチを構築するためにそのファイルを必要とする１つ以上の仮想機械（ＶＭ）を特定する。ステップ２０４（ｄ）において、このように特定された各ＶＭが既にそのファイルのコピーを有するか否か判定を行う。ＶＭは、例えば、ファイルを使用した他のブランチを構築したことから、またはそのファイルが現在のブランチにおいて不変のまま残っている場合、現在のブランチの以前のバージョンを構築したことから、そのファイルのコピーを既に有する場合もある。ある種の実施形態では、後にファイルを使用するかもしれないＶＭに、そのファイルを先制してロードして、そうしなければ使用されない転送帯域幅および／または記憶空間を利用する。ＶＭがファイルを既に有しているのではないと判定された場合、ステップ２０４（ｅ）において、そのＶＭに転送すべきファイルのリストに、そのファイルを追加する。それ以外の場合、処理はステップ２０４（ｂ）に戻り、次のファイルを考慮する。一旦各ファイルがステップ２０４（ｃ）から２０４（ｅ）によって処理されたなら、ステップ２０４（ｆ）において各ＶＭに転送すべきファイルのリストを完成させる。
【００１８】
[0026]  一旦転送すべきファイルがステップ２０４において特定されたなら、ステップ２０６において１つ以上のソース・レポジトリーからこれらを引き出す。先に説明したように、実施形態の中には、これらのファイルの内あるものが、種々の理由の内の１つのために、ローカル・ストレージに既に存在し、これらのファイルを引き出す必要がない場合もある。次に、ステップ２０８において、以前に特定されたファイルを、しかるべき仮想機械に転送する。尚、ある種のファイルが多数の仮想機械に使用されることもあり、その場合、ファイルはこれらの機械の各々に転送されることを注記しておく。一実施形態では、ファイル転送のネットワーク・オーバーヘッドを極力抑えるために必要なファイルの共通度(degree of commonality)にしたがって、仮想機械を仮想機械サーバー上で集合化する。他の実施形態では、必要とするファイルと、仮想機械サーバーにおいて既にキャッシュされたファイルとの間における共通度にしたがって、仮想機械を仮想機械サーバーに割り当てる。
【００１９】
[0027]  次に、ステップ２０９において、必要に応じて、ビルド環境を仮想機械に分散する。ある種の実施形態では、ビルド環境は、ソース・ファイルが仮想機械に転送される前に、代わりに、仮想機械に分散される。ビルド環境の１つの役割は、ビルド・プロセスを駆動する(drive)ことである。実施形態の中には、ビルド環境がエージェントを含み、このエージェントがビルド・サービス・コントローラーに応答し、アクティビティのステータスを規定し、コマンドを実行する場合がある。他の実施形態では、ビルド環境が、アクティビティを実行するために、ユーザー入力に直接応答する場合もある。更に、ビルド環境はツールを備えることができ、コンパイラー、アセンブラー、リンカー、およびその他のツールというようなコンポーネント、ならびにバイナリー・ファイルを生成するためにソース・ファイルを処理するときに使用されるワークフローを構築することができる。
【００２０】
[0028]  この時点において、仮想機械は、ソース・ファイルを処理してバイナリー・ファイルを生成することによって、ビルド・プロセスを開始することができる。本発明の一実施形態では、各仮想機械は、所与のブランチと関連付けられたバイナリー・ファイルの全てを生成する役割がある。他の実施形態では、各仮想機械は１つのバイナリーを生成する役割がある（即ち、仮想機械の数が、バイナリーの数と同じである）。更に他の実施形態では、生成すべき全てのバイナリー・ファイルを１組にして、利用可能な仮想機械全体に割り当て、各仮想機械によって実行される処理が等しくなるようにする。更に他の実施形態では、１つよりも多いブランチに対して、異なるブランチに対応する複数のバイナリー・ファイルが、１つの仮想機械に割り当てられる。利用可能な仮想機械間で構築すべきバイナリーを割り当てる他の方法も考えられる。バイナリーの仮想機械への割り当てによって、ステップ２０４および２０８において、それぞれ、ファイルの特定および転送が知らされる。ステップ２１０において、仮想機械は、バイナリー・ファイルを生成するために、しかるべきソース・ファイルを処理する。実施形態の中には、図３のビルド・サービス・コントローラー３０２のような他のコンポーネントが、仮想機械にこの処理を開始させる場合がある。ここで、ファイルを「処理する」とは、とりわけ、前処理、コンパイル、アセンブリー、およびリンキングを含み、「バイナリー・ファイル」は、とりわけ、ネーティブな実行可能ファイル、中間表現ファイル、バイトコード表現ファイル、オブジェクト・ファイル、およびライブラリー・ファイルを含むことができる。同様に、「させる」(causing)とは、直接コード実行、プロセス間通信、クライアント−サーバーまたはピア−ツー−ピア・メッセージング、リモート・コマンド実行、ウェブ・サービス、またはリモート・スクリプト呼び出しを含む種々の技法を含むことができる。当業者には明白であるような、仮想機械にファイルを処理させる他の技法も、想起される。
【００２１】
[0029]  ユーザー入力、ビルド構成ファイル、または他の一般的な方針にしたがって、生成されたバイナリー・ファイルのあるものについて、その出所、改ざんされていない状態を認証するために、または他の理由のために、ディジタル署名してもよい。採用されるディジタル署名アルゴリズムは、ＲＳＡ、ＤＳＡ、Elliptic Curve  ＤＳＡ、ElGamalというようなアルゴリズム、または他の確実なディジタル署名アルゴリズムを含むことができる。多くの環境において、署名プロセスに必要なディジタル鍵は、セキュリティの目的上少数の場所にしか格納されず、したがって仮想機械には分散されない。したがって、実施形態の中には、バイナリーが生成された後、ステップ２１２において、署名のためにこれらを専用署名サーバーに転送するものがある。次に、ステップ２１４において、対応するディジタル署名を生成する。実施形態の中には、図３に関して論じられる、ビルド・サービス・コントローラー３０２のような他のコンポーネントが、以上で述べたような種々の方法の内いずれかによって、これを行わせる。この実施形態の変形では、バイナリーを転送する代わりに、しかるべき仮想機械が、署名を生成するのに十分なバイナリーの表現を生成する。例えば、多くのディジタル署名アルゴリズムは、実際には、ファイル全体ではなく、ファイルの安全なハッシュ(secure hash)に署名する。この例では、このハッシュを生成するために署名鍵が必要でないので、仮想機械はそれ自体でハッシュを生成し、それだけを署名サーバーに送ることができる。この方式には、署名サーバーの作業負荷を軽減し、バイナリー・ファイルを送信することに伴うネットワーク負荷を軽減するという二重の利点がある。バイナリー・ファイル（潜在的に非常に大きい可能性がある）を送信する代わりに、ハッシュだけ（通例１kB未満）が送られる。ここで、そして明細書全体を通じて、「送る」(send)とは、直接送ること、および何かを送らせることによって間接的に送ることの双方を含む。ステップ２１６において、生成された署名を仮想機械に返送する。実施形態の中には、ディジタル署名の追加によって変更されたバイナリーが、切り離された署名の代わりに、仮想機械に返送される場合もある。「署名」という用語は、ここでは、切り離された署名、およびこのように変更されたバイナリーの双方を含む。
【００２２】
[0030]  一旦バイナリー・ファイルおよび署名が収集されたなら、ステップ２１８においてこれらをバイナリー・パッケージに組み立てる。実施形態の中には、図３のビルド・サービス・コントローラー３０２のような他のコンポーネントが、先に説明したような、種々の方法の内いずれかによってこれを行わせる場合もある。実施形態の中には、これらのバイナリー・パッケージが、ビルド・プロセスによる影響を受けないデーター・ファイルを収容する場合もある。実施形態の中には、そのパッケージに対するこれらのバイナリー・ファイルおよび署名が収集され終えたら直ぐに、バイナリー・パッケージの組み立てが開始する場合がある。他の実施形態では、ビルドおよび署名生成プロセスが完全に終了するまでは、パッケージ生成プロセスが開始しない場合もある。一旦パッケージが生成されたなら、これらを仮想機械から転送する。一実施形態では、ステップ２２０においてこれらをストレージ・サービス(storage service)に公開することによって、これが行われる。他の実施形態では、仮想機械の内１つ以上が、レポジトリーとして機能し、仮想機械に直接サービスを提供する(serve)。最後に、実施形態の中には、ステップ２２２においてユーザー通知を生成する場合がある。このユーザー通知は、電子メール、インスタント・メッセージ、通話、アプリケーションにおけるポップアップ・アラート、または他のアラートというような、種々の形態をなすことができる。
【００２３】
[0031]  これより図３に移ると、本発明の実施形態を実現するのに適した環境が提示され、全体的に参照番号３００で示されている。実施形態の中には、ビルド・サービス・コントローラー３０２が、システムに対して中央コントローラーとして役割を果たし、機能的に他のコンポーネントに接続される場合がある。実施形態の中には、この接続がＬＡＮ、ＷＡＮ、またはインターネット接続を経由する場合がある。これらの接続は直接的または間接的でもよい。他の実施形態では、システム３００のコンポーネントが概念的であり、いくつかのコンポーネントを組み合わせて１つの物理サーバーにしてもよい。これらの場合、接続は、共有ストレージおよび／またはプロセス間通信の形態となる。実施形態の中には、ビルド・サービス・コントローラーが、作業ＶＭのコード・ブランチに対するマッピングを追跡するために、メタデーターを維持する場合がある。実施形態の中には、ビルド・サービスが、ユーザー入力を受け、ジョブ・ステータスを表示し、ビルド・メトリックへのアクセスを付与するためにフロント・エンドを設ける場合がある。実施形態の中には、ビルド・コントローラーが、今後の実行に対してビルド・プロセスのスケジューリングを行うことを役割とするとよい場合がある。これは、システム負荷が低下するまでビルドを遅らせる形態を取ることができ、または予期される要求が低くなる期間にビルドのスケジューリングを行う形態を取ることができる。他のスケジューリング経験則も考えられる。実施形態の中には、ビルド・コントローラーが動的仮想機械スケジューリングを役割とする場合もある。これは、ビルド・プロセス専用に設けられる仮想機会の数を増減する形態を取ることができる。また、これは、忙しい仮想機械サーバーから他の忙しくない仮想機械サーバーに仮想機械を移動させる形態を取ることもできる。更に、これは、作業負荷が重い仮想機械に、作業負荷が軽い仮想機械よりも多くのリソースを割り当てるために、１つの仮想機械内部において仮想機械のスケジューリングを操作する形態を取ることもできる。また、動的仮想機械スケジューリングの他の形態も考えられる。ソース・レポジトリー３０４およびソース・レポジトリー３０６のような１つ以上のソース・レポジトリーが、ビルド・サービス・コントローラーに接続される。このようなソース・レポジトリーの各々は、付随するストレージ、それぞれ、ストレージ３０８およびストレージ３１０を有する。ソース・レポジトリーに付随するストレージは、ローカル・ストレージ、ネットワーク取り付けストレージ、クラウド・ベース・ストレージ、またはソース・レポジトリーによってアクセス可能な他のストレージであってもよい。実施形態の中には、１つのソース・レポジトリーだけが存在すればよい場合もあり、他の実施形態では、多くのソース・レポジトリーが存在する場合もある。
【００２４】
[0032]  同様に、ビルド・サービス・コントローラー３０２にはストレージ・サービス３１２が接続される。ストレージ・サービス３１２は、ユーザーに利用可能なバイナリー・パッケージを作る（そして、実施形態によっては、他のファイルも作る）。実施形態の中には、ストレージ・サービス３１２が、地理複製型(geo−replicated)クラウド・ベース・ストレージ・サービスのような、耐久性があり可用性が非常に高いストレージ・サービスである場合もある。実施形態の中には、ストレージ・サービス３１２およびソース・レポジトリー３０４のようなソース・レポジトリーの機能が、１つの物理サーバーに組み合わされる場合もある。他の実施形態では、ストレージ・サービス３１２およびソース・レポジトリー３０４が別個の物理サーバーであるが、ストレージ３０８のような共通バック・エンド・ストレージを共有する場合もある。実施形態の中には、ストレージ・サービス３１２が、作成された仮想機械上に展開されるビルド環境を格納する場合もある。他の実施形態では、ビルド環境が、ソース・レポジトリー３０４のようなソース・レポジトリー上に格納される場合もある。更に他の実施形態では、ビルド環境がビルド・サービス・コントローラー３０２上に格納され、ここからビルド環境が展開される。また、ストレージ・ソリューションの任意の組み合わせも考えられる。また、ビルド・サービス・コントローラー３０２には署名サーバー３１４も接続される。署名サーバー３１４は、図２のステップ２１２、２１４、および２１６を参照して先に論じたように、生成されたバイナリー・ファイルにディジタル署名を生成するサービスを実行する。署名サーバー３１４は、署名鍵３１６を格納する。署名鍵３１６は、ディジタル署名を生成するために使用される。
【００２５】
[0033]  最後に、ビルド・サービス・コントローラー３０２は、仮想機械サーバー３１８および３２０のような、１つ以上の仮想機械サーバーに接続される。各仮想機械サーバーは、仮想機械３２２および３２４のような複数の仮想機械を潜在的に実行することができる物理コンピューターを表す。実施形態の中には、仮想機械の一部または全部が、いずれの所与の時点においてもビルド・サービスとは関係ない他のタスク専用に割り当てられてもよい場合がある。実施形態の中には、仮想機械サーバー３１８および３２０が私有または公開計算クラウドの一部である場合もある。実施形態の中には、仮想機械が必要に応じてインスタンス化され、これらが不要になるとまたは使用されなくなると、削除される場合もあり、あるいはガベージ・コレクションが行われる場合もある。実施形態の中には、ビルド・サービス・コントローラー３０２が、ビルド・サービスの必要性にしたがって使用される作業ＶＭの数を増減する(scale)場合もある。仮想機械３２２のような各仮想機械には、何らかの1組のソースおよびデーター・ファイル３２６がロードされ、これらのソースおよびデーター・ファイル３２６は、仮想機械にロードされるビルド環境から分かる(informed)ように、バイナリー・パッケージを生成するために使用される。尚、仮想機械３２４によって格納されるファイル３２８は、仮想機械３２２によって格納されるファイル３２６と完全に重複する、部分的に重複する、または重複しない場合があり、これらのファイルは、仮想機械によって仮想機械サーバー３２０上に格納される。図３に示すビルド・システムのコンポーネントはいずれも、本明細書において説明する機能を実行するために、１つ以上のプロセッサーおよび／またはメモリーを利用することができる。
【００２６】
[0034]  これより図４に移ると、本発明の他の態様によるフローチャート図が提示されている。図４は、仮想機械３２２のような仮想機械による実行に適した方法を示し、全体的に参照番号４００が付けられている。最初に、ステップ４０２において、０個以上のソース・ファイルを受け取る。これらの受け取られるファイルは、０個以上の既にローカルに格納されているファイルと組み合わせて、１つ以上のバイナリー・ファイルを生成するのに十分である。纏めて、これらのファイルは図３のファイル３２６に対応することができる。次に、ステップ４０４において、これらのファイルを処理して１つ以上のバイナリー・ファイルを生成する。ステップ４０６において、生成したバイナリー・ファイルの表現を署名サーバーに送る。実施形態の中には、これらの表現が直接署名サーバーに送られる場合がある。他の実施形態では、これらはビルド・サービス・コントローラーまたは他の仲介ホストに送られ、次いでこれらを署名サーバーに転送する。実施形態の中には、「表現」が証明されるバイナリー・ファイル全体を含む場合があり、他の実施形態では、表現は、署名すべきバイナリーの耐衝突(collision−resistant)暗号ハッシュのような、署名生成に十分な、もっと少量の情報を含む場合もある。私有または検査ビルドの場合というような、更に他の実施形態では、バイナリーに署名するステップを省略することができる。
【００２７】
[0035]  次に、ステップ４０８において、署名されるバイナリー・ファイルに対応するディジタル署名を受け取る。この場合も、これらのディジタル署名を署名サーバーから直接受けても、またはビルド・サービス・コントローラーまたは他の仲介ホストを介して間接的に受け取ってもよい。これらのディジタル署名は、１つ以上の対応するまたは未署名のバイナリー・ファイルと共に、ステップ４１０においてバイナリー・パッケージを生成するために使用される。最後に、ステップ４１２において、バイナリー・パッケージを他のホストに送信する。実施形態の中には、これらを公開するために、ストレージ・サービス３１２のようなストレージ・サービスに送信することができる場合もある。他の実施形態では、バイナリー・パッケージをビルド・サービス・コントローラー３０２に送ることもできる。更に他の実施形態では、ビルド・プロセスを開始したユーザーのコンピューターにこれらを送る。
【００２８】
[0036]  図５は、本発明の実施形態による、ソース・レポジトリー３０４のようなソース・レポジトリーによる実行に適した方法を示し、全体的に参照番号５００が付けられている。最初にステップ５０２において、１つ以上のソース・ファイルを求める要求を受ける。一実施形態では、図３のビルド・サービス・コントローラー３０２から要求を受ける。他の実施形態では、仮想機械サーバー３１８上で実行する仮想機械３２２のような、仮想機械から要求を受ける。３１８および３２２は双方共図３にある。次にステップ５０４において、要求されたファイルをストレージから引き出して送信する。一実施形態では、これらを要求元に送信する。他の実施形態では、これらをキャッシュして要求元に転送するために、ビルド・サービス・コントローラー３０２または仮想機械サーバー３１８のような他のホストにこれらを送信する。
【００２９】
[0037]  図６は、本発明の実施形態による、署名サーバー３１４のような署名サーバーによる実行に適した方法を示し、全体的に参照番号６００が付けられている。最初に、ステップ６０２において、バイナリー・ファイルの１つ以上の表現を受け取る。一実施形態では、要求は、図３の仮想機械３２２のような、仮想機械から直接受け取る。他の実施形態では、ビルド・サービス・コントローラーまたは他の仲介ホストを経由して要求を受ける。先に論じたように、実施形態の中には表現が署名するバイナリー・ファイル全体であることがあり、一方他の実施形態では、表現が署名生成に十分なだけのもっと少量の情報であることもある。実施形態の中には、署名サーバーが、ウィルス・スキャニング、正しい形式の検証、およびビルド位置の確認というような追加のステップを、署名を生成する前に実行する場合もある。次に、ステップ６０４において、１つ以上の表現に対応する１つ以上のディジタル署名を生成する。これは、多数の周知のディジタル署名アルゴリズムの内いずれで行うこともでき、図３のディジタル署名鍵３１６を使用する。最後に、ステップ６０６において、１つ以上の生成した署名を要求元に返送する。
【００３０】
[0038]  図７は、本発明の実施形態による、図３のビルド・ソース・コントローラー３０２のようなビルド・ソース・コントローラーによる実行に適した方法を示し、全体的に参照番号７００が付けられている。最初に、ステップ７０２において、構築する１つ以上のブランチのリストを決定する。一実施形態では、構築するブランチの決定は、ユーザー入力に基づく。他の実施形態では、構築するブランチを決定するために、構成ファイルを参照する。更に他の実施形態では、構築するブランチを決定するために、現在のビルド環境を使用する。次に、ステップ７０４において、これらのブランチを構築するために作業仮想機械に転送すべきファイルのリストを決定する。一実施形態では、これは、図２のステップ２０４（ａ）から２０４（ｆ）およびこれらに付随する論述において説明するように遂行することができる。一旦ファイルが特定されたなら、ステップ７０６において、図３のソース・レポジトリー３０４およびソース・レポジトリー３０６のような１つ以上のソース・レポジトリーからこれらを引き出し、ステップ７０８においてしかるべき仮想機械に転送する。この場合も、ある種のファイルが多数の仮想機械によって使用される場合があり、したがってこれらの機械の各々にファイルを転送する。一実施形態では、ファイル転送のネットワーク・オーバーヘッドを極力抑えるために、これらが使用するファイルの共通度にしたがって、仮想機械を仮想機械サーバーに集合化する。他の実施形態では、転送されたファイルが今後再度必要になった場合に、ソース・レポジトリーからこれらを再度読み取らなくても済むように、これらのコピーを維持する。
【００３１】
[0039]  次に、ステップ７１０において、署名すべきバイナリー・ファイルの表現をコンピューター実行方法７００において受け取る。ある種の実施形態では、これは図３のビルド・サービス・コントローラー３０２である。一実施形態では、これらは、バイナリー・ファイルを生成した仮想機械から受け取られる。一実施形態では、バイナリー・ファイル全体が受け取られ、更にコンパクトな表現が、今後の送信のために生成される。次いで、ステップ７１２において、これらの表現を、署名サーバー３１４のような署名サーバーに転送する（例えば、送る）。その後、ステップ７１４において、これらの表現に対応するディジタル署名を、逆に署名サーバーから受け取り、ステップ７１６において、これらをしかるべき仮想機械に転送する。実施形態の中には、しかるべき仮想機械が、対応するバイナリー・ファイルを作成した仮想機械である場合があり、他の実施形態では、バイナリー・パッケージ作成を役割とする他の仮想機械である場合もある。ステップ７１８において、ソース・ファイルおよびディジタル署名に対応するバイナリー・ファイルを構成するバイナリー・パッケージを受け取る。一実施形態では、これらのバイナリー・パッケージを作成した仮想機械からこれらを受け取る。他の実施形態では、これらは、更に、ビルド・プロセスによって変化を受けなかったデーターも含む。次に、ステップ７２０において、これらのパッケージを今後の引き出しのために利用可能にする。一実施形態では、これは、これらのパッケージをストレージ・サービスに公開することによって行われる。他の実施形態では、これは、これらのパッケージを所定の場所に転送することによって行われる。更に他の実施形態では、これは、これらのパッケージがユーザーによって引き出されるまでこれらをローカルに格納することによって行われる。最後に、ステップ７２２において、パッケージが利用可能であることをユーザーに知らせるために、通知を生成する。この通知は、図２のステップ２２２を参照して論じた形態の内いずれを取ることもできる。
【００３２】
[0040]  これより図８に移ると、図３の仮想機械サーバー３１８のような仮想機械サーバーによる実行に適した、本発明の更に他の態様によるフローチャート図が示されており、全体的に参照番号８００が付けられている。実施形態の中には、図３の仮想機械サーバー３１８が、ラップトップ、デスクトップ、またはサーバー・クラス・コンピューターというような１つの物理機械である場合がある。他の実施形態では、仮想機械サーバー３１８自体が、サーバー・ファームのような分散型計算環境であることもできる。
【００３３】
[0041]  最初に、ステップ８０２において、１つ以上のブランチおよびソース・ファイルのリストを受け取る。一実施形態では、ソース・ファイルのリストのみを受け取り、ソース・レポジトリー３０４のようなソース・レポジトリーから ソース・ファイルを引き出す。他の実施形態では、ソース・ファイルを１つ以上のブランチのリストと共に受け取る。次に、ステップ８０４において、１つ以上の仮想機械をインスタンス化する。バイナリーを仮想機械に割り当てる論述において先に論じたように、多数の割り当て方策(strategy)が考えられ、使用される正確な割り当て方策から、インスタンス化される仮想機械の数が分かる。更に、ステップ８０４は、ビルド・サービスに関与するために仮想機械を準備することも含む。この準備は、ビルド環境の展開を含む。ビルド環境は、インスタンス化の間に作業ＶＭ上にロードすることができ、またはインスタンス化の後にビルド・システム・コントローラー３０２によって作業ＶＭにプッシュすることができる。仮想機械がインスタンス化された後、ステップ８０６において、しかるべきソース・ファイルを各仮想機械に転送する。
【００３４】
[0042]  次に、ステップ８０８において、これらのソース・ファイルから生成されたバイナリー・ファイルを、仮想機械から収集する。一実施形態では、これらに署名する目的上、バイナリー・ファイルのコンパクトな表現を生成する。次に、ステップ８１０において、バイナリーのディジタル署名を取得する。一実施形態では、これは、図３の署名サーバー３１４と直接通信することによって行われ、他の実施形態では、図３のビルド・サービス・コントローラー３０２を通じて署名サーバー３１４と通信することによって行われる。ステップ８１２において、バイナリー・ファイル、ディジタル署名、および実施形態によっては、他のデーター・ファイルから、バイナリー・パッケージを生成する。次に、ステップ８１４において、バイナリー・パッケージを、引き出しのために利用可能にする。一実施形態では、これは、これらが引き出される場所にこれらを送信することを含む。他の実施形態では、これは、ソフトウェア・エージェントまたは人がこれらを引き出すことができるＶＭ上の周知のローカル位置に、これらを置くことを含む。最後に、ステップ８１６において、通知を生成する。一実施形態では、これはユーザー通知であり、他の実施形態では、これはソフトウェア・エージェントに通知することを含む。
【００３５】
[0043]  本発明の代替実施形態および実施態様(implementation)は、図面を含む本明細書を検討すれば、本発明が関係する技術分野の当業者には明白になるであろう。したがって、本発明の範囲は、以上の説明ではなく、本文書の「特許請求の範囲」の章に出てくる請求項によって定められるものとする。
【図１】
0006027615.tif 000002
【図２】
0006027615.tif 000003
【図３】
0006027615.tif 000004
【図４】
0006027615.tif 000005
【図５】
0006027615.tif 000006
【図６】
0006027615.tif 000007
【図７】
0006027615.tif 000008
【図８】
0006027615.tif 000009