Maven
Maven ビルドステップでは、ビルドを自動化するために Apache Maven(英語) を使用できます。
ステップ設定
Maven ステップ設定のリストとそれに対応する UI ラベルは、ビルド構成を構成するかパイプラインを構成するかによって若干異なります。
メイン設定
- ゴール
TeamCity で実行させたい Maven ゴールをスペースで区切ってリストします。一部の Maven ゴールはバージョン管理システムを使用できるため、一部の VCS チェックアウトモードゴールと互換性がなくなる可能性があります。
このようなゴールを実行するには、バージョン管理設定ページの VCS チェックアウトモードドロップダウンメニューで「エージェントに自動的に」を選択してください。これにより、ゴール実行ソフトウェアでバージョン管理システムが利用できるようになります。Perforce P4 で
release:prepareゴールを使用する方法については、こちらのセクションを参照してください。- 作業ディレクトリ
ビルドステップが開始されるディレクトリです。デフォルトでは、エージェントがリモートソースをチェックアウトするルートディレクトリと同じです。詳細については、作業ディレクトリを構築するトピックを参照してください。
詳細設定
- POM の場所
ビルド作業ディレクトリを基準とした POM ファイルへの相対パス。デフォルトでは
pom.xmlと同じです。- ランナーの議論
コマンドラインパラメーターのリスト。
- Maven バージョン
使用する Maven のバージョンを選択します。インストールされているバージョンを管理することもできます。
<自動> - Maven インストールへのパスは
M2_HOME環境変数から取得されます。それ以外の場合は、現在のデフォルトバージョンが使用されます。<Default> — バンドルバージョンがデフォルトとして使用されます。デフォルトの変更方法については、こちらを参照してください。
<Custom> — カスタム Maven バージョンへのパスを指定します。
ビルド設定
これらの設定は、ビルド構成内で使用される Maven ステップでのみ使用できます。
- ユーザー設定の選択
様々な種類のユーザー設定を選択できます。この設定は、
-sまたは--settingsコマンドライン引数を追加するのと同じです。使用可能なオプションは以下のとおりです。<Default> — エージェントのデフォルトの Maven の場所からユーザー設定をインポートします。参照: Maven サーバー側設定。
<Custom> — 代替ユーザー設定ファイルへのパスを指定できます。パスはエージェントとサーバーの両方で有効である必要があります。
定義済み設定 — プロジェクト設定 | Maven 設定ページで、TeamCity サーバーにアップロードされた設定ファイルから 1 つを選択できます。アップロードされたファイルは、現在のプロジェクトとそのすべてのサブプロジェクトの両方で使用でき、
<TeamCity Data Directory>/config/projects/%projectID%/pluginData/mavenSettingsディレクトリに保存されます。アップロードされたファイルは、エージェント側とサーバー側の Maven 機能の両方で使用されます。
カスタム設定または定義済み設定を使用する場合、有効なユーザー設定ファイルへのパスは、maven プロセス内で
teamcity.maven.userSettings.pathシステムプロパティとして使用できます。- アーティファクトリポジトリ
次のいずれかのローカルアーティファクトリポジトリオプションを選択できます。
エージェントごと (デフォルト) - エージェントによって実行されるすべてのビルドによって生成されたアーティファクトを、エージェントシステムディレクトリに別個のリポジトリを使用して保存します。
ビルド構成ごと - 現在のビルド構成のすべてのビルドによって生成されたアーティファクトを保存するには、別のリポジトリを使用します。
Maven デフォルト — デフォルトの Maven リポジトリの場所を使用します。リポジトリは、すべてのビルド構成とマシン上のすべてのエージェント間で共有されます。
このモードでは、Maven ステップは追加のコマンドラインパラメーター
-Dmaven.repo.localで指定された場所を使用します。このパラメーターが指定されていない場合は、settings.xmlで設定された値を検索します。
- インクリメンタルビルド
増分ビルドの一般的な考え方は、変更されたモジュールのみを処理し、それらと接続された変更されていないモジュールの再処理に時間を費やさないことです。TeamCity はこの方法を利用して、変更された Maven モジュールのみのテストを実行し、ビルドまたはビルドチェーンを再実行する際の時間を節約します。
Maven 自体はインクリメンタルビルドのサポートが非常に限られているため、TeamCity は独自の変更影響分析アルゴリズムを使用して影響を受けるモジュールのセットを決定し、影響を受けるモジュールの依存関係を作成するための特別な予備段階を使用します。
最初に TeamCity は、親関係とさまざまな依存関係スコープを考慮して、独自の変更影響分析を実行し、影響を受けるモジュールを判別します。次に、ビルドは 2 つの連続した Maven 実行に分割されます。
準備フェーズと呼ばれる最初の Maven の実行は、影響を受けるモジュールの依存関係を構築することを目的としています。準備段階では、依存関係クラスが存在しないか矛盾していることが原因で、2 回目の実行時にコンパイラーやその他のエラーが発生しないようにします。
メインフェーズと呼ばれる 2 回目の Maven の実行では、メインゴール(たとえば
test)が実行されるため、変更の影響を受けるテストのみが実行されます。また、このトピックに関連するブログ投稿(英語)を確認してください。
コンテナー設定
このビルドステップは、Docker または Podman によってデプロイされたコンテナー内で実行できます。
クラシックビルド構成ステップでは、イメージ名、プラットフォーム、追加の実行引数を指定できる一連のプロパティが表示されます。明示的にイメージをプルするにより、このステップが実行されるたびに、TeamCity がターゲットコンテナーからイメージをプルすることが保証されます。

TeamCity が指定のイメージを検索するレジストリを指定するには、プロジェクトに Docker/Podman 接続を追加します。デフォルトでは、この接続により TeamCity は Docker Hub(英語) から匿名モードでイメージをプルできますが、任意のコンテナーレジストリに設定できます。
詳細については、次の記事を参照してください: コンテナーラッパー。
コンテナー内でステップを実行するには、Docker で実行をオンに切り替えます。有効にすると、この要素に 2 つのオプションが表示されます。

Docker イメージ — Docker または Podman レジストリからイメージをプルできます。デフォルトでは、TeamCity は Docker、Hub イメージを匿名モードでプルできます。その他のケース(プライベートイメージ、カスタムイメージレジストリ、Docker、Hub のレート制限に違反しない非匿名モードなど)の場合は、パイプラインまたはジョブレベルで Docker 統合を設定してください。
Dockerfile — Dockerfile からカスタムイメージを構築できます。
Java パラメーター
- JDK
JDK を選択してください。このセクションは利用可能なオプションを詳しく述べています。デフォルトは
JAVA_HOME環境変数またはエージェント自身の Java です。- JDK ホームパス
このオプションは、上で <カスタム> を選択した場合に使用できます。このフィールドを使用して、ビルドの実行に使用するカスタム JDK へのパスを指定します。このフィールドを空白のままにすると、JDK ホームへのパスは、エージェントマシンの
JAVA_HOME環境変数から、またはビルドエージェント構成ファイル (buildAgent.properties) で指定されたenv.JAVA_HOMEプロパティから読み取られます。これらの値が指定されていない場合、TeamCity はビルドエージェントプロセス自体の Java ホームを使用します。- JVM コマンドラインパラメーター
追加の JVM コマンドラインパラメーターを使用すると、初期および最大ヒープサイズの設定、追加のログの有効化、必要なバイトコード検証モードの選択などを行うことができます。
標準 (
-で始まる、たとえば-verbose:[class|module|gc|jni]または--dry-run) と非標準 (-Xで始まる、たとえば-Xmx<size>または-XstartOnFirstThread) の両方の JVM オプションを指定できます。複数のコマンドラインパラメーターを指定するには、区切り文字としてスペースを使用します。例:
-verbose:gc -Xdiag -Xcomp -Xmx512m -Xms256m
コードカバレッジ
Maven ビルドランナーは、IDEA カバレッジエンジンに基づくコードカバレッジをサポートします。コードカバレッジオプションの構成については、Java コードカバレッジの設定ページを参照してください。
同じマシンに複数のビルドエージェントがインストールされている場合、デフォルトではそれらは同じローカルリポジトリを使用します。ただし、各ローカルエージェントにカスタムローカルリポジトリを割り当てる方法は 2 つあります。
teamcity-agent/conf/buildAgent.propertiesで次のプロパティを指定します。system.maven.repo.local=%\system.agent.work.dir%/<subdirectory_name>たとえば、
%system.agent.work.dir%/m2-repositoryです。各ビルドエージェントを異なるユーザーアカウントで実行します。
異なる VCS での Maven リリース
TeamCity でサポートされているさまざまな VCS で release:prepare Maven タスクを実行するには、少なくとも 2.0 バージョンの Maven リリースプラグイン(英語)を使用していることを確認してください。
Maven リリースと Perforce の使用
Maven リリースプラグインには、Perforce で認証するためのチケットが必要(英語)です。
TeamCity のビルド構成の Perforce VCS ルート設定:
エージェントでチェックアウトを有効にします。
Perforce VCS ルート設定でチケットベースの認証を使用するを有効にします。
ビルドエージェント環境に、Maven Release Plugin の実行を妨げる可能性のある時折の P4 変数がないことを確認してください。
Maven ビルドステップのゴールフィールドに
release:prepareを指定してビルドを実行します。
Git VCS で Maven リリースを使用する
このプラグインを Git で使用するには、pom.xml で Git SSHURL を SCM の URL(英語) として設定します。
TeamCity エージェントの場合:
エージェントに Git がインストールされ、Unix ライクな OS ではエージェントの
$PATHに、Windows では%PATH%環境変数に追加されていることを確認してください。エージェントで、次を実行してアカウントの ID を設定します
git config --system user.email "buildserver@example.com" git config --system user.name "TeamCity Server"Git VCS がエージェントの既知のホストデータベースに追加されていることを確認してください。
TeamCity サーバーの場合:
SSH 鍵の Git を TeamCity サーバーにアップロードします。
構成設定を開き、バージョン管理設定設定タブに移動します。
エージェントでチェックアウトを有効にします。
Git VCS ルートで、秘密鍵認証を有効にします。
SSH エージェントビルド機能を構成に追加します。
Maven ビルドステップのゴールフィールドに
release:prepareを指定してビルドを実行します。
リモート実行制限
Maven ランナーに関連するリモート実行制限:
原則として、TeamCity の個人用ビルドは、TeamCity サーバー上で実行される「通常の」ビルドには影響せず、その結果は開始者のみに表示されます。ただし、Maven ランナーを使用する場合は動作が異なる場合があります。
TeamCity は、Maven 依存関係モデルに干渉しません。Maven 構成でアーティファクトをリモートリポジトリにデプロイする場合、個人ビルドを実行してもアーティファクトはそこにデプロイされます。そのため、個人ビルドは、構成に依存するビルドに影響を与える可能性があります。
たとえば、構成 A でアーティファクトをリモートリポジトリにデプロイし、これらのアーティファクトを構成 B で使用しているとします。A の個人ビルドが完了すると、個人アーティファクトが B に表示されます。構成 A でリリースバージョンのアーティファクトを生成する場合、適切なアーティファクトが開発者のアーティファクトに置き換えられ、Maven のバージョン管理モデルでは調査が困難になるため、特に問題となります。さらに、これらのアーティファクトは、TeamCity によって管理されているビルドだけでなく、すべての依存ビルドで使用できるようになります。
これを回避するには、アーティファクトのデプロイを実行するビルド構成ではリモート実行を使用しないことをお勧めします。
コードとしての構成
次のスニペットは、YAML (パイプラインのみ) と Kotlin DSL の両方の形式でカスタマイズされたビルドステップを示しています。
MavenBuildStep Kotlin DSL ドキュメント(英語)も参照してください。
関連ページ:
VCS 設定値の設定
バージョン管理システム(VCS)は、プロジェクトのソースファイルのリビジョンを追跡するためのシステムです。SCM(ソースコード管理)またはリビジョン管理システムとも呼ばれます。次の VCS は、そのまま TeamCity でサポートされています:Git、Subversion、Mercurial、Perforce、Azure DevOps、CVS、StarTeam。バージョン管理システムへの接続は、TeamCityVCS ルートによって定義されます。TeamCity のプロジェクトまたは...
ビルド構成の作成と編集
ビルド構成とパイプラインは、実際の CI/CD ルーチンを表します。ビルド構成には、一連のビルドステップ(ビルド実行中に実行される基本操作)と、これらのステップの実行に必要な設定が格納されます。これらの設定には以下が含まれます。構成の動作をすばやく変更できるパラメーター。特定の条件が満たされたときに TeamCity が自動的に新しいビルドを開始できるようにするトリガー。構成の機能を拡張する機能を構築します。特定のビルドエージェントで構成ビルドを実行できるようにするエージェント要件。その他。ビル...
パイプライン設定
この記事では、パイプライン全体に使用できる、共通のパイプラインの動作を指定する設定について説明します。パイプライン設定の編集:コアパイプライン設定を表示および編集するには、右上隅の設定トグルをクリックし、ビジュアルエディターでジョブを囲むパイプラインキャンバス領域内の任意の場所をクリックします。ビジュアルエディターからコードに切り替えて、マークアップを直接編集することもできます。パラメーター:パラメーターは、生の値を参照に置き換えるために設計された名前と値のペアです。TeamCity はパラ
SSH 鍵管理
秘密 SSH キーを TeamCity プロジェクトにアップロードできます。アップロードされたキーは、VCS ルートの設定時および SSH エージェントビルド機能で使用できます。サポートされているキー形式:TeamCity は、PEM および OpenSSH 形式のキーをサポートします。異なる形式を使用するキーは変換する必要があります。例:PuTTY キージェネレーターを使用して、サポートされていない Putty 秘密鍵 () を PEM 形式に変換できます。これを行うには、変換 | OpenS...
プロジェクト管理者ガイド
このセクションでは、プロジェクト管理に焦点を当てます。TeamCity プロジェクトとビルド構成の作成、ビルドステップの設定、依存関係チェーンの構成などについて説明します。基本的な TeamCity ワークフロー:次のダイアグラムは、基本的な TeamCity ワークフローを示しています。TeamCity サーバーはリポジトリの変更を検出しました。サーバーはこの変更をデータベースに書き込みます。ビルド構成に添付されたトリガーは、データベース内の関連する変更を検出し、ビルドを開始します。トリガー...
Kotlin DSL
TeamCity では、バージョン管理で設定を XML 形式で保存するだけでなく、DSL (Kotlin 言語に基づく) で設定を保存することもできます。バージョン管理に保存された DSL を使用すると、プログラムで設定を定義できます。Kotlin は静的に型指定されるため、IDE で自動補完機能を自動的に受け取ります。これにより、利用可能な API オプションの発見がはるかに簡単になります。TeamCity での Kotlin DSL の使用に関するブログ投稿シリーズと推奨リファクタリングの記...