Dockerとの統合
Docker コンテナを使用して Incredibuild Helper およびイニシエータエージェントを起動および実行することができます。Dockerの技術では、1つのホスト上に複数のコンテナを作成することができるため、1台の強力なマシンを使って、複数のユーザーに ヘルパーエージェントを提供することが可能です。
また、コンテナ上にAgentをインストールすることで、Agentの起動、停止、削除、Agentの再立ち上げの柔軟性が高まります。いくつかのコマンドで、Incredibuild環境全体でコンテナエージェントをセットアップして管理することができます。
必要条件
-
Incredibuildでコンテナをホストする各マシンに、Docker Desktop を設置します。Docker Desktopは、仮想マシン上に置かないことを推奨します。
-
Incredibuild Coordinatorには、フローティングライセンス(Helperおよび/またはイニシエータ)があり、作成したAgentに自動的に割り当てられたり、割り当てられなかったりする事になります。
-
Incredibuildイメージでコンテナを起動する前に、Docker環境でIncredibuildなしでビルドを実行可能か確認します。
-
Docker Desktopsは、Windows コンテナ に設定する必要があります(デフォルトではLinuxコンテナを実行するように設定されています)。
-
Microsoft Nano Server OSは64ビットベースのアプリケーションしか実行せず、IncrediBuildのアプリケーションの一部は32ビットベースであるため、Microsoft Nano Server OSでコンテナ型エージェントを実行することはできません。
Incredibuildイメージの準備
Dockerコンテナ上でビルドを実行するために使用されるIncredibuild Agentをインストールするには、Incredibuildインストールスクリプトを含むようにDockerfileを編集してください。
-
Incredibuildのインストーラファイルを入手します。詳しくは、サイレントインストール をご覧ください。
-
以下の例 のように Dockerfile を編集してください:
コピーFROM mcr.microsoft.com/windows/server:ltsc2022
RUN mkdir C:\\Installers
#assumes your Incredibuild installer file is called ibsetup.exe
COPY ibsetup.exe . C:\\Installers\\
RUN C:\\Installers\\ibsetup.exe / # Run IncrediBuild console installer.
&& /install /
&& /installdir="C:\IncrediBuild\InstallDir" / # Set installation directory.
&& /components=agent / # Install Agent component only.
&& /coordinator=192.168.10.10:31104 / # Connect to the Coordinator in IP address 192.168.10.10, that is listening on port 31104.
&& /agent:serviceport=31105 / # Set BuildService port.
&& /agent:helperport=31106 # Set BuildHelper(s) port(s), according to the allocated CPUs for the container, which is automatically detected by the installer.
&& /agent:agentrole=Initiator # Install Agent component only.
RUN mkdir C:\\BuildTools
WORKDIR C:\\BuildTools
COPY C:\Path\To\Host\BuildToolsDirectory . # (import build tools and necessary binaries) -
上記の例では、イニシエータのロールを持つ Agent をインストールしています。「Helper」 ロールを持つ Agent をインストールするには、agentrole パラメータを次のように変更します:&& /agent:agentrole=helper
-
以下のようにIncredibuildのイメージを使ってコンテナを起動することができるようになりました。
Incredibuildイメージを使ってコンテナを起動する
コンテナを起動するには、次のコマンドを使用します:
docker run --cpus <Max_No._of_Cores_to_Use>
-e Coordinator=<Coordinator_Machine_IP_Adddress_or_Hostname>
-e CoordinatorPort=<Coordinator_Port_No.>
-e BuildServicePort=<Agent_Port_No._for_Coordinator_Communication>
-e BuildHelperPort=<First_Agent_Port_No._in_a_Range_for Communicating_with_the_Agent_Cores>"
-it
-p <Host_Machine_Port_No._mapped to>:<BuildServicePort No._in the_Container>/tcp
-p <Start-End_Port_Range_in the Host_Machine_mapped_to>:
<Start-End_Port_Range_for_the_Agent_Cores_in_the Container>/tcp
<IncrediBuild_Image>
コマンドの詳細:
フラグ | 必須/オプション | 説明 |
---|---|---|
--cpus | オプション | コンテナエージェントが使用するCPUコアの最大数です。何も指定しない場合、デフォルトは2 となります。 |
e Coordinator= | 必須 | エージェントが関連しているIncredibuild CoordinatorのIPアドレスまたはホスト名です。 |
-e CoordinatorPort= | オプション | Agent との通信に必要な Coordinator ポートです。規定値で31104です。 |
-e BuildServicePort= | オプション | コーディネーターとの通信に必要なサービスポートです。規定値で31105です。 |
-e BuildHelperPort= | オプション | 最初のHelperポートです。すべてのコアは固有のHelperポートを必要とし、指定した番号から連続して割り当てられます。つまり、デフォルトの31106を使用し、4つのコアがある場合、31106-31109のポートがHelperポートとして使用されることになります。 |
-it | 必須 | Incredibuildで使用するために必要な一般的な「docker run」オプションです。 |
-p <Host_Machine_Port_No._mapped to>:<BuildServicePort No.>/tcp | 必須 |
コンテナのBuildサービスポートとホストマシンのBuild サービスポートのマッピングです。一般的に、1つのホスト上に複数のコンテナがある場合でも、これらの数字をすべて同じにすることができます。既定値では31105となっており、以下のようになります: -p 31105:31105/tcp |
-p <Start-End_Port_Range_in the Host_Machine_mapped_to>:<Start-End_Port_Range_for_the_Agent_Cores_in_the Container>/tcp | 必須 |
コンテナのBuildHelperポートとホストマシンのBuildHelperポートの対応表です。それぞれのHelperコアは、ホストマシンで独自のポートを必要とします。既定値では、31106で始まり、連続して続きます。ホストマシンに複数のコンテナがある場合は、慎重にマッピングしてください。 例えば、同じホスト上に4コアずつ割り当てられた2つのコンテナがある場合、最初のコンテナのマッピングは-p 31106-31109:31106-31109/tcp で、2番目のコンテナのマッピングは-p 31106-31109:31110-31113/tcp となります 。 |
<Incredibuild_Image> |
必須 |
マシンにダウンロードされたIncredibuildイメージ名です。例:Incredibuild:9.5.0 |
コンテナ Agent にはコンテナ ID とホスト名に基づく名前が付けられます。コンテナエージェント に意味のある名前を付けたい場合は、--hostname Docker オプションを使用してコンテナの内部ホスト名を指定し、それがコンテナエージェント名に明示されるようにします。
Advanced Options
Incredibuild Docker Runコマンドに標準的なDockerオプションを追加するには
Incredibuild コンテナ作成docker run コマンドの一部として、docker run コマンドの標準オプションを使用することができます。利用可能な docker の実行オプションの詳細な一覧は、以下を参照してください:https://docs.docker.com/engine/reference/run/
Incredibuild のコンテナ作成コマンドで、docker run コマンドと指定した Incredibuild イメージの間に、標準の Docker オプションを追加してください。
たとえば、コンテナの終了時に自動的にクリーンアップして、そのファイルシステムを削除したい場合は、次のように--rm コマンドを使用します。
docker run --cpus 4
-e Coordinator= Incredibuild1
-e CoordinatorPort=31104
-e BuildServicePort=31105
-e BuildHelperPort=31106
--rm
-it
-p 31105:31105/tcp
-p 31106-31109:31106-31109/tcp Incredibuild:9.5.0
コンテナ起動時の追加プロセスの初期化
ソリューションの構築、スクリプトの実行、サーバーの起動などのIncredibuildコンテナの起動時に、追加の処理を初期化することができます。
Incredibuild の <docker run> コマンドに追加できるプロセスは 1 つのみです。複数のプロセスを起動したい場合は、スクリプトを使用してプロセスをバンドルします。
<docker run> コマンドで指定した Incredibuild イメージの後にプロセスの起動コマンドと引数を追加します。
コマンドの例:
docker run --cpus 4
-e Coordinator= IncrediBuild1
-e CoordinatorPort=31104
-e BuildServicePort=31105
-e BuildHelperPort=31106
-it
-p 31105:31105/tcp
-p 31106-31109:31106-31109/tcp
incredibuild:9.4.6
MSBuild.exe MySolution.sln /t:rebuild /v:q
Dockerエージェントからライセンスの割り当てを解除する
Incredibuildコンテナを停止、削除、または終了した場合、コンテナエージェントに割り当てられていたライセンスは、フローティングライセンスでない限り、自動的に割り当てが解除されることはありません。Dockerコンテナ内のAgentに割り当てられたライセンスを解除する場合は、手動で割り当てを解除 する必要があります。詳しくは、ライセンスの管理 をご覧ください。