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を編集してください。

  1. Incredibuildのインストーラファイルを入手します。詳しくは、サイレントインストール をご覧ください。

  2. 以下の のように 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)
  3. 上記の例では、イニシエータのロールを持つ Agent をインストールしています。「Helper」 ロールを持つ Agent をインストールするには、agentrole パラメータを次のように変更します:&& /agent:agentrole=helper

  4. 以下のように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に割り当てられたライセンスを解除する場合は、手動で割り当てを解除 する必要があります。詳しくは、ライセンスの管理 をご覧ください。