TeamCity On-Premises 2026.2 Help

複合ビルド構成

コンポジットビルド構成は、複数の通常のビルド構成をトリガーし、結果を 1 か所で追跡するように設計された「ステップレス」構成です。

鍵となるポイント

  • 複合構成では、実際の構築ルーチンは実行されません。

  • 複合構成では、依存関係からすべての情報が集約され、一元的な方法で表示されます。

  • 複合ビルドはビルドキュースロットを占有せず、エージェントを実行する必要もありません。

  • ビルド構成タイプを切り替えるには、「構成設定 | 一般 」タブに移動します。

サンプル

このチュートリアルでは、複数のビルド構成を作成し、1 つのビルドチェーンにバインドし、チェーンの最上位のビルド構成を複合構成に変換することでどのようにメリットが得られるかを学びます。

サンプルプロジェクトの作成

この手順では、空のビルド構成を含むプロジェクトと、さまざまなプラットフォームで .NET/.NET フレームワークプロジェクトをビルド、テスト、公開する 5 つのビルド構成を含むサブプロジェクトを作成します。

サンプルセットアップ
  1. 次の GitHub リポジトリ (またはそのフォーク) からプロジェクトを作成します: TeamCity DotNet サンプル。 プロジェクトをインポートするときは、 設定をインポートせず、プロジェクトを最初から作成 オプションを選択します。

  2. ビルド構成名を 「すべて構築」に設定します。

  3. TeamCity がリポジトリをスキャンした後に提案するステップは選択しないでください。 実際のビルドタスクは別々の構成で実行し、最初に作成したこの構成は、後ですべてを一度にトリガーするために使用します。

  4. プロジェクト設定を開きます。

  5. サブプロジェクトの作成 をクリックします。 このサブプロジェクトは、ステップ 1 と同じ GitHub リポジトリをターゲットにする必要があります。

    サブプロジェクトの作成
  6. サブプロジェクトはルートプロジェクトと同じリポジトリを使用するため、TeamCity は重複を作成する代わりに、両方のプロジェクトで同じ VCS ルート を共有することを提案します。 同意するよう求められたら、「これを使用 」をクリックします。

    プロジェクト間で VCS ルートを共有する
  7. 新しい 「建物の構成」サブプロジェクトで、 5 つのビルド構成を作成します。 すべての構成は、手順 1 と同じリポジトリをターゲットとし、共有 VCS ルートを使用する必要があります (手順 5 を参照)。

    • テストの実行 (Linux) — Linux の .NET SDK コンテナー(英語)内で "Clock.Tests" C# プロジェクトをテストする単一の .NET ランナーを含む構成。

    • テストの実行 (Windows) — 必要な .NET SDK がインストールされている Windows エージェント上で「Clock.Tests」C# プロジェクトをテストする単一の .NET ランナーを含む構成。

    • デスクトップのビルド (Windows) — 「Clock.Desktop」および「Clock.Desktop.Uwp」プロジェクトで「msbuild」コマンドを実行する単一の .NET ランナーを含む構成。

    • コンソール & ウェブのビルド (win-x64) — 2 つの .NET ステップを含む構成。

      • 1 つのステップでは、「win-x64」ランタイムオプションを使用して、「Clock.Console」プロジェクトで「publish」コマンドを実行します。 このステップの出力ディレクトリは「bin/Clock.Console/win-x64」に設定されます。

      • 別のステップでは、「Clock.Web」プロジェクトで「publish」コマンドを実行します。 このステップの ランタイム オプションは「win-x64」、 出力ディレクトリ は「bin/Clock.Web/win-x64」です。

    • コンソール & ウェブのビルド (linux-x64) — 前の構成と同じですが、.NET ステップの ランタイム 設定と 出力ディレクトリ 設定は、それぞれ "linux-x64" と "bin/<プロジェクト名>/linux-x64" に設定されています。

  8. これらのビルド構成は単一の ビルドチェーン の一部になるため、TeamCity がリモートリポジトリの変更を検出するたびに五つのビルド構成すべてを個別に開始する、自動的に追加された ビルドトリガー は必要ありません。 ビルド構成設定 | トリガー に移動し、すべての構成のトリガーを無効化または削除します (最上位のプロジェクトが所有する "すべてをビルド" 構成を除く)。

    トリガーを削除または無効にする
  9. 両方の "コンソール & ウェブのビルド" 構成で "bin" フォルダーを公開する必要があります。 そのためには、これらの構成で bin => bin アーティファクトパス を指定します。 公開されたアーティファクトは、後で デプロイ構成で使用されます。

最終的には、ビルドステップを実行する 5 つの独立したビルド構成と、空の 「すべて構築」構成が作成されます。 各構成を実行して、正常に終了することを確認します。 以下の Kotlin コードは、五つのビルド構成すべてと親 TeamCity プロジェクトの設定を示しています。

project { buildType(Building_1) subProject(Building) } object Building_1 : BuildType({ id("Building") name = "Build All" vcs { root(DslContext.settingsRoot) showDependenciesChanges = true } triggers { vcs { } } }) object Building : Project({ name = "Building Configurations" buildType(Building_BuildConsoleWebLinuxX64) buildType(Building_BuildConsoleWebWinX64) buildType(Building_BuildDesktopWindows) buildType(Building_RunTestsLinux) buildType(Building_RunTestsWindows) })
object Building_RunTestsLinux : BuildType({ name = "Run Tests (Linux)" vcs { root(DslContext.settingsRoot) } steps { dotnetTest { name = "Tests (Linux)" projects = "Clock.Tests/Clock.Tests.csproj" dockerImage = "mcr.microsoft.com/dotnet/sdk:7.0" dockerImagePlatform = DotnetTestStep.ImagePlatform.Linux } } triggers { vcs { enabled = false } } requirements { matches("teamcity.agent.jvm.os.family", "Linux") } })
object Building_RunTestsWindows : BuildType({ name = "Run Tests (Windows)" vcs { root(DslContext.settingsRoot) } steps { dotnetTest { name = "Test (Win)" projects = "Clock.Tests/Clock.Tests.csproj" sdk = "7" } } triggers { vcs { enabled = false } } requirements { matches("teamcity.agent.jvm.os.family", "Windows") } })
object Building_BuildDesktopWindows : BuildType({ name = "Build Desktop (Windows)" artifactRules = """ bin/Clock.Desktop/win/**/*.* => bin/Clock.Desktop.zip bin/Clock.Desktop.Uwp/win/**/*.* => bin/Clock.Desktop.Uwp.zip """.trimIndent() params { param("system.PublishDir", "../bin/Clock.Desktop/win/") param("system.AppxPackageDir", "../bin/Clock.Desktop.Uwp/win/") } vcs { root(DslContext.settingsRoot) } steps { dotnetMsBuild { name = "Build Desktop (Win)" projects = """ Clock.Desktop/Clock.Desktop.csproj Clock.Desktop.Uwp/Clock.Desktop.Uwp.csproj """.trimIndent() version = DotnetMsBuildStep.MSBuildVersion.V17 targets = "Restore;Rebuild;Publish" sdk = "7" } } triggers { vcs { enabled = false } } requirements { matches("teamcity.agent.jvm.os.family", "Windows") } })
object Building_BuildConsoleWebWinX64 : BuildType({ name = "Build console & web (win-x64)" artifactRules = "bin => bin" vcs { root(DslContext.settingsRoot) } steps { dotnetPublish { name = "Build Console (win-x64)" projects = "Clock.Console/Clock.Console.csproj" runtime = "win-x64" outputDir = "bin/Clock.Console/win-x64" } dotnetPublish { name = "Build web" projects = "Clock.Web/Clock.Web.csproj" runtime = "win-x64" outputDir = "bin/Clock.Web/win-x64" } } triggers { vcs { enabled = false } } requirements { exists("DotNetCoreSDK7.0_Path") exists("DotNetCoreRuntime7.0_Path") } })
object Building_BuildConsoleWebLinuxX64 : BuildType({ name = "Build console & web (linux-x64)" artifactRules = "bin => bin" vcs { root(DslContext.settingsRoot) } steps { dotnetPublish { name = "Build console" projects = "Clock.Console/Clock.Console.csproj" runtime = "linux-x64" outputDir = "bin/Clock.Console/linux-x64" args = "/p:PublishTrimmed=true /p:PublishSingleFile=true" } dotnetPublish { name = "Build web" projects = "Clock.Web/Clock.Web.csproj" runtime = "linux-x64" outputDir = "bin/Clock.Web/linux-x64" } } triggers { vcs { enabled = false } } requirements { exists("DotNetCoreSDK7.0_Path") exists("DotNetCoreRuntime7.0_Path") } })

ビルドチェーンのセットアップ

このステップでは、ビルド構成を単一のチェーンに結び付けるために スナップショット依存関係 を作成します。

フルチェーン
  1. 「デスクトップを構築する (Windows) 構成設定で、 依存関係 タブに切り替えて、 新しいスナップショット依存関係を追加 をクリックします。 "テストの実行 (Windows)" ビルド構成をチェックして、このビルド構成を起動する前にテストを実行するよう TeamCity に指示します。

    スナップショットの依存関係の追加
  2. 手順 1 を繰り返して、両方の "コンソール & ウェブのビルド ..." 構成にスナップショット依存関係をセットアップします。 これらは、対応する 「テストを実行 ...」構成に依存する必要があります。

  3. 「すべて構築」構成設定で、3 つの " 建てる ..." 構成すべてにスナップショット依存関係を追加します。

  4. 3 つの " 建てる ..." 構成はアーティファクトを公開します。 最上位の "すべてをビルド" 構成からアクセスできるようにするには、 アーティファクト依存関係 を作成する必要があります。

    <すべてをビルド設定> | 依存関係 に移動し、 新しいアーティファクト依存関係を追加する をクリックして、3 つの " 建てる ..." 構成すべてに依存関係を作成します。 各アーティファクト依存関係の アーティファクトルール 設定は **/*.* => 。 である必要があります。

    アーティファクトの依存関係を追加する
  5. 「すべて構築」構成が個々の " 建てる ..." 構成によって生成されたアーティファクトにアクセスできるようになったため、その一般設定に bin/**/*.* => 。 アーティファクト公開ルールを追加します。

以下の Kotlin コードは、最終的なチェーンセットアップを示しています。

object Building_1 : BuildType({ id("Building") name = "Build All" artifactRules = "bin/**/*.* => ." // ... dependencies { dependency(Building_BuildConsoleWebLinuxX64) { snapshot { } artifacts { artifactRules = "**/*.* => ." } } dependency(Building_BuildConsoleWebWinX64) { snapshot { } artifacts { artifactRules = "**/*.* => ." } } dependency(Building_BuildDesktopWindows) { snapshot { } artifacts { artifactRules = "**/*.* => ." } } } })
object Building_BuildDesktopWindows : BuildType({ name = "Build Desktop (Windows)" artifactRules = """ bin/Clock.Desktop/win/**/*.* => bin/Clock.Desktop.zip bin/Clock.Desktop.Uwp/win/**/*.* => bin/Clock.Desktop.Uwp.zip """.trimIndent() // ... dependencies { snapshot(Building_RunTestsWindows) { } } })
object Building_BuildConsoleWebWinX64 : BuildType({ name = "Build console & web (win-x64)" artifactRules = "bin => bin" // ... dependencies { snapshot(Building_RunTestsWindows) { } } })
object Building_BuildConsoleWebLinuxX64 : BuildType({ name = "Build console & web (linux-x64)" artifactRules = "bin => bin" // ... dependencies { snapshot(Building_RunTestsLinux) { } } })

複合構成の作成

構成設定の 一般 タブでビルド構成タイプを選択できます。 このサンプルチェーンでは、 「すべて構築」構成タイプを「複合」に変更できます。

ビルド構成タイプの変更

通常のビルド構成と比較すると、複合構成には次のような違いがあります。

アイコン

TeamCity では、通常の構成と複合構成を区別できるように、異なるアイコンを使用しています。

ナビゲーションバーで:

通常の設定アイコン

ビルド構成 | チェーン ページで:

チェーンの通常の構成アイコン

ナビゲーションバーで:

複合構成アイコン

ビルド構成 | チェーン ページで:

チェーンの複合構成アイコン

構成設定

複合ビルド構成は、他のビルドによって生成された結果を集約します。 実際の構築ルーチンを実行するように設計されていません。 そのため、複合構成設定には ビルド手順 または エージェント要件 タブが表示されません。

複合構成設定

複合ビルドの開始とキャンセル

複合ビルド構成には実行する実際のビルドステップがないため、 ビルドキュー内のスロットを占有しません。

複合構成の実行

同時に実行する複合ビルドの数を制限すると、すべての依存関係にも影響します。 例: 現在の制限が 1 で、複合ビルドが実行されているとします。 その場合、キューに入れられた別の複合ビルドに属するすべての依存関係ビルドは、進行中のビルドが完了するまで待機します。

複合ビルドを停止するかキューから削除すると、ビルドチェーン全体が停止または削除されます。

結果の集約

ビルドチェーンの最初の依存関係が開始されると、複合ビルドは実行中として表示されます。 ビルドのステータステキスト、期間、進行状況インジケーターには、このチェーンのすべての通常のビルドの集約されたパラメーターが反映されます。

コンポジットビルドの実行

チェーンのビルドが失敗した場合、複合ビルドにそれが反映されるため、問題を即座に特定できます。

複合ビルドの失敗

複合ビルドの テスト タブはテストを集約し、合格、失敗、ミュート、無視されたすべてのテストを 1 か所に表示します。 同じことが、コードカバレッジまたはコードインスペクション / コード重複分析の結果にも当てはまります。

複合ビルドテスト

アーティファクト

通常のビルドも複合ビルドも、ビルドからのアーティファクトをチェーンに集約しません。 通常のビルドによって生成されたアーティファクトを複合ビルドの アーティファクト タブに表示するには、対応するアーティファクトの依存関係を追加し、必要なアーティファクトルールを設定します (ビルドチェーンのセットアップ セクションの手順 4 および 5 を参照)。

複合ビルドのアーティファクト

複合構成には独自のアーティファクトがないため、依存関係構成でアーティファクトのクリーンアップポリシーを設定する必要があります。

複合ビルドのグループ化

プロジェクト | ビルドチェーン ページには、複合構成で終わるビルドチェーンのすべての部分を 1 つの視覚要素に折りたたむことができる 複合ビルドをグループ化 オプションが表示されます。

複合ビルドのグループ化
2026 年 9 月 11 日