Jenkins から TeamCity への移行ガイドライン
概要
TeamCity は、CI/CD ワークフローを向上させるための幅広い堅牢な統合機能とスマートな自動化機能を提供しています。しかし、複雑な全社規模のビルドファームの移行は常に課題を伴います。このガイドでは、移行プロセスの概要と、2 つの CI システムの主な類似点と相違点を解説し、スムーズな移行をサポートします。
TeamCity vs Jenkins: 主な類似点と相違点
TeamCity と Jenkins はどちらも、ビルド、テスト、デプロイの自動化に使用される人気の CI/CD ツールです。コア機能は共通しているものの、両者には顕著な違いもあります。
類似点
どちらのツールも、ビルドとデプロイワークフローを構造化する方法としてパイプラインをサポートしています (ただし、使用する用語とアプローチは若干異なります)。
TeamCity と Jenkins はどちらも、プラグインや拡張機能を通じて高度に構成およびカスタマイズ可能です。
どちらのツールも、Docker を含むコンテナーベースのワークフローとの統合をサポートしています。
相違
設定形式。Jenkins は、宣言型パイプライン(Groovy ベースのファイル)またはスクリプト型パイプライン(Jenkins DSL)を使用します。TeamCity では、ビルドルーチンを UI 経由で設定するか、Kotlin ベースの設定スクリプトを使用するか、あるいはその両方を組み合わせて設定するかを常に選択できます。
ホスティングオプション。TeamCity は、セルフホスト型ソリューションと SaaS(JetBrains がホストするクラウドインスタンス経由)の両方を提供しています。Jenkins は完全にセルフホスト型であり、ユーザーは独自のインフラストラクチャを管理する必要があります。
セットアップとメンテナンスの容易さ。TeamCity は、よりユーザーフレンドリーなセットアッププロセスと洗練されたインターフェースを標準装備しています。クラウドエージェントのセットアップからサーバーノードの管理、クリーンアップルールの設定まで、あらゆる設定タスクを TeamCity UI から直接実行できます。さらにユーザー中心のソリューションをお探しなら、TeamCity パイプラインをお試しください。わずか数クリックでビルドルーチンを設定できます。Jenkins は通常、より手動でのセットアップと設定が必要で、プラグインに大きく依存しているため、メンテナンスのオーバーヘッドが増加する可能性があります。
組み込み機能とプラグイン。TeamCity には、ビルドエージェント、テストフレームワーク、コード品質チェック、レポートツールの管理のための組み込みサポートが含まれています。Jenkins の機能はサードパーティ製プラグインに大きく依存しており、同様の機能を実現するには別途プラグインを選択して設定する必要があります。
開発ツールとの統合。TeamCity は JetBrains によって開発されているため、IntelliJ IDEA やその他の JetBrains IDE などの開発ツールのエコシステムと緊密に統合されています。Jenkins は多くのツールとの統合を提供していますが、通常、これらの接続を設定するにはプラグインやカスタム設定が必要です。
コスト。TeamCity の無料利用枠では、ビルドエージェントと構成の数に制限があり、スケールアップには追加コストがかかります。Jenkins はオープンソースであるため、初期費用はかかりませんが、ホスティングとプラグインのメンテナンスは運用コストとして考慮する必要があります。
移行の計画
Jenkins の設定を監査する
まず、Jenkins で現在実行されているものをすべて理解することから始めましょう。これにより、予期せぬ事態を避け、TeamCity での機能の整合性を確保できます。
すべての Jenkins ジョブとパイプラインをインベントリする
スクリプト型か宣言型かを問わず、パイプラインの完全なリストをエクスポートします。命名規則、フォルダー構造、トリガー、分岐戦略に注意してください。
使用中のすべてのプラグインを一覧表示する
Jenkins プラグインを TeamCity の機能と一致させるを使用してリストを生成します。各プラグインの目的と、TeamCity に対応するプラグインがあるかどうかをメモしてください(多くの機能が組み込まれています)。
外部統合を文書化する
Jenkins がアーティファクトリポジトリ (Artifactory、Nexus)、コンテナーマネージャー (Docker、Podman、Kubernetes)、シークレットマネージャー (Vault、AWS Secrets Manager)、通知ツール (Slack、メール、MS Teams)、インフラストラクチャツールなどのツールとどのように通信するかを特定します。(Terraform、Ansible など)
認証とアクセス制御を確認する
SSO、LDAP、GitHub OAuth、または手動ユーザーを使用していますか? TeamCity のユーザー / グループモデルへの移行に必要なロールと権限を文書化します。
パフォーマンスとリソースの使用状況を測定する
ビルド時間、キュー時間、エージェント使用率などの指標を収集します。これにより、移行後のパフォーマンスを比較するためのベースラインが得られます。
TeamCity 環境を準備する
実際の移行を開始する前に、TeamCity のセットアップが準備ができていることを確認してください。
TeamCity インスタンスを起動する TeamCity クラウド (JetBrains によって完全に管理) または TeamCity オンプレミス (お客様のチームによってホストおよび保守) のいずれかを選択します。
ビルドエージェントのプロビジョニング
TeamCity では、ジョブを実行するためにビルドエージェントが必要です。以下のいずれかを使用するかどうかを決めてください。
自己ホスト型静的エージェント (例: ベアメタルまたは VM)
クラウドベースのエージェント (例: AWS、GCP、Azure)
オンデマンドエージェント (Docker/Kubernetes をサポート)
バージョン管理システムを接続する
VCS ルート経由でリポジトリを追加します。TeamCity は、SSH/HTTP(S) プロトコル経由で、GitHub/GitHub Enterprise、GitLab、Bitbucket Cloud、Server and Data Center、Bitbucket Cloud、Azure Repos、Perforce Helix、およびその他の VCS プロバイダーをサポートします。
TeamCity 構造の基礎を学ぶ
TeamCity は Jenkins とは異なる方法で作業を編成します。基本的な概念は以下のとおりです。
プロジェクト – 最上位のコンテナー
ビルド構成 – Jenkins ジョブに類似
テンプレート – 再利用可能なビルドロジック
ビルドチェーン – 依存関係を視覚化して制御する
Kotlin DSL – ビルドロジックをコードとして定義し、Git でバージョン管理します。このガイドの用語マッピングと機能比較の部分を参照してください。
秘密と資格情報を設定する
TeamCity で API キー、トークン、パスワード用のセキュアパラメーターを定義します。Jenkins の認証情報をこれらにマッピングします。
用語マッピングと機能比較
始める前に、Jenkins の主要な用語が TeamCity の用語とどのように対応しているかを確認しましょう。
Jenkins | TeamCity |
|---|---|
Jenkins マスター / ノード | TeamCity サーバー |
ダムスレーブ / パーマネントエージェント | |
実行者 | |
表示またはフォルダー (英語) | |
Job/Item/Project | |
ビルド | |
プレステップ | |
ビルド後のアクション | |
ビルドトリガー | |
ソース管理 (SCM) | |
ワークスペース | |
パイプライン | ビルドチェーン (スナップショット依存関係経由) |
ラベル |
以下のタイルは、いくつかの主要な Jenkins 概念が TeamCity の概念とどのように異なるかを詳しく説明しています。
構成ファイル
Jenkins は Groovy で記述された Jenkinsfile を使用します。これはコード内でパイプラインのステップを定義します。
TeamCity は Kotlin または XML 設定ファイルを使用します。TeamCity は UI で設定されたプロジェクトから設定を自動生成し、IDE をフルサポートしてローカルで編集できます。設定ファイルは、ビルドされたプロジェクトと一緒に保存することも、完全に独立したリモートリポジトリに保存することもできます。
ビルド定義
Jenkins ジョブは、UI を介して構成されるか、Jenkinsfile でスクリプトまたは宣言型パイプラインとして定義されます。
ビルド構成によって生成されたビルドは、親プロジェクトによって所有されます。各構成には、複数のステップ、トリガー、パラメーターなどを含めることができます。
変数
Jenkins 変数は、環境ブロックまたはパイプラインスクリプト内の
params {}を通じて設定されます。UI でも設定できます。TeamCity は、ビルド構成、プロジェクト、グローバルに定義されたパラメーターを使用します。これには、エージェントのマシンに渡される環境変数や構成パラメーターが含まれます。パラメーターは、他の構成と共有することも(出力パラメーター)、非公開にすることもできます(入力パラメーター)。
条件付きステップ
Jenkins は、宣言型パイプライン内の
when {}ブロックまたはスクリプト型パイプライン内の Groovy を介した条件付き実行をサポートします。TeamCity ステップの条件は、UI または Kotlin DSL で設定できます。幅広い条件をサポートしており、あるステップが成功した場合のみ、別のステップが失敗した場合のみ、特定のパラメーターに必要な値が設定されている場合にのみ実行するなど、様々な条件を設定できます。
アーティファクト管理
Jenkins では、
archiveArtifactsを使用してアーカイブするファイルを明示的に宣言する必要があります。TeamCity UI、Kotlin DSL、または手動で送信されたサービスメッセージを使用して、ビルド中に生成されたファイルをアーティファクトとして公開できます。アーティファクトの依存関係を使用すると、公開されたアーティファクトをさまざまな構成間で共有できます。
コンテナーマネージャー
Jenkins は、Docker パイプラインプラグインまたは Kubernetes プラグインを介して Docker をサポートしますが、インストールして構成する必要があります。
TeamCity には Docker と Podman の組み込みサポートが含まれており、Docker のステップ、エージェントイメージ、サービスコンテナーが含まれています。プラグインは必要ありません。
ビルドエージェント
Jenkins エージェントは手動で設定および接続する必要があります(SSH、Docker など)。Kubernetes 経由のエージェントテンプレートではプラグインの設定が必要です。
TeamCity は、最小限の構成で、クラウドエージェント (JetBrains ホスト)、Docker ベースのエージェント、および従来のセルフホストエージェントをサポートします。
並列実行
Jenkins は、スクリプトパイプライン内の並列ブロックまたは宣言型パイプライン内の並列ステージをサポートします。
TeamCity は、ビルド依存関係、テストのバッチ分割、エージェント側の並列処理を使用して、ビルドまたはビルドステップを並列に実行できます。
ビルドログ
Jenkins はデフォルトでビルド結果をコンソールに出力します。プラグインを使用することで、タイムスタンプや色分けなどのログ機能を追加できます。検索とナビゲーション機能は制限されています。
TeamCity は、タイムスタンプとハイライト表示機能を備えたリアルタイムログストリーミング、Prometheus 形式のサーバー負荷メトリクス、ビルドステップごとのアーカイブ履歴を提供します。TeamCity は、Dynatrace、Grafana などのサードパーティ製オブザーバビリティソリューションと統合可能です。
TeamCity と Jenkins のより詳細な機能比較については、このドキュメント(英語)を参照してください。
Jenkins プラグインを TeamCity の機能と一致させる
多くのコア機能がサードパーティのプラグインに依存している Jenkins とは異なり、TeamCity には、Git および Docker のサポート、テストレポート、シークレット管理、通知などのほとんどの重要な機能が組み込まれています。つまり、保守する可動部分が少なくなり、アップグレード中にプラグインの互換性の問題がなくなり、より安定した、すぐに使用できるエクスペリエンスが得られます。
Jenkins プラグインの一部が TeamCity の同じ組み込み機能とどのように一致するかを以下に示します。
Jenkins プラグイン | TeamCity と同等の機能 |
|---|---|
ビルド構成と Kotlin DSL | |
さまざまなユースケースに対応するさまざまなパラメーター : TeamCity サーバーに保存されている秘密、「パスワード」型のパラメーター、HashiCorp Vault などの外部ストレージから機密データを取得するリモートパラメーター | |
Artifactory プラグイン | 組み込みのアーティファクトストレージとクラウド / オンプレミスリポジトリのサポート。S3 バケットやその他のクラウドストレージプロバイダーのサポート。 |
Git プラグイン | 緊密な VCS 統合 (GitHub、GitLab、Bitbucket、Azure Repos など) による一流の Git サポート。 |
Docker プラグイン | Docker と Podman のサポート内蔵: Docker をビルド環境として使用し、サービスをプルし、イメージをビルド / プッシュする |
Slack 通知プラグイン | 組み込み通知 : カスタマイズ可能なテンプレートを使用した、Slack、メール、Microsoft Teams、Webhook、サービスメッセージベースの通知。 |
Kubernetes プラグイン | さまざまなレベルの Kubernetes 統合が組み込まれています。Kubernetes クラウドプロファイルを設定するか、クラスターを TeamCity ビルドを処理する外部エグゼキュータとして使用します。 |
JUnit プラグイン | JUnit テスト結果、ビジュアルテストレポート、テスト履歴、不安定なテストの検出の解析をネイティブでサポートします。 |
HTML パブリッシャープラグイン | HTML ビルドレポートの公開と表示のための組み込みサポート。 |
同時ビルドのスロットルプラグイン | スマートなキューの優先順位付け、プロジェクト / エージェントごとのビルド制限、エージェント要件ロジック。 |
AnsiColor プラグイン | ビルドログで色分けされた ANSI サポートと構文のハイライトを備えたネイティブログ出力 |
タイムスタンププラグイン | TeamCity ログには構造化されたタイムスタンプ、ログの折りたたみ、フィルタリングが組み込まれています。 |
ワークスペースクリーンアッププラグイン | カスタマイズ可能な保持ポリシーを備えた組み込みのワークスペースおよびアーティファクトのクリーンアップルール。 |
ビルドタイムアウトプラグイン | ビルド構成設定で直接、柔軟なビルドタイムアウトオプション (絶対、非アクティブ、カスタムロジック) を設定できます。 |
パラメーター化されたトリガープラグイン |
移行例
Jenkins では、ジョブは一連のタスクを定義する基本単位です。TeamCity では、この概念はビルド構成によって表現されます。各ビルド構成は、ビルドの実行に必要な一連のビルドステップ、トリガー、その他の設定を指定します。
Jenkins は、Groovy で記述された Jenkins ファイルを使用してビルドパイプラインを定義します。このファイルは通常、リポジトリのルートに配置され、ビルドプロセスのステップとステージを記述します。
例 1. 基本的なパイプライン構成
Jenkins 構成:
TeamCity では、パイプラインの設定方法を UI 経由または Kotlin DSL から選択できます。パイプライン設定に Kotlin DSL を使用するメリットには、次のようなものがあります。
人間が読みやすく保守しやすい
バージョン管理: サポートされている任意の VCS に構成を保存して、追跡可能性を向上します。
拡張性: ループ、条件分岐、再利用可能なコンポーネントをサポートします。XML、XAML、YAML といった単なるマークアップではなく、カスタムデータクラスやカスタムライブラリなどを含む本格的なプログラミング言語として考えてください。
UI 同期: UI で行われた変更は DSL に反映され、その逆も同様です。
設定に Kotlin DSL を使用する場合、単一のファイルではなく、リモートディレクトリ(デフォルトではリポジトリルートの隠しフォルダー .teamcity)にセットアップが保存され、型安全な Kotlin コードで記述されます。これにより、エラーを早期に検出し、コード補完などの IDE 機能を活用できるようになります。
以下は、TeamCity Kotlin DSL で前述した Jenkins ファイルと同等の設定です。
この Kotlin コードは、Hello World を出力するスクリプトを実行する単一のビルド構成を持つプロジェクトを定義します。TeamCity は、リポジトリに接続するとこの構成を自動的に取得します。
例 2: シンプルなビルドジョブ
Jenkins:
TeamCity では、多目的コマンドラインステップを使用して、通常のビルドアクションを実行したり、.NET、Maven、Python、Gradle などの特定のビルドツールと対話するようにカスタマイズされた特殊なビルドステップを実行したりできます。
TeamCity Kotlin DSL (CLI ステップ):
TeamCity UI 経由 (Maven ステップ):
Maven ステップのゴールプロパティを
clean packageに設定します。
例 3: テストを実行
Jenkins:
TeamCity Kotlin DSL:
TeamCity UI:
command-line または Python 型のビルドステップを追加します。
pytest tests/ステップスクリプトを指定します。
例 4: 本番環境へのデプロイ
Jenkins:
TeamCity Kotlin DSL:
TeamCity UI 経由:
デプロイ構成を作成します。
kubectl apply -f deployment.yamlコマンドを設定します。
トリガー
Jenkins と TeamCity はどちらもビルドの開始を自動化するビルドトリガーをサポートしています。Jenkins では、cron、pollSCM、GitHub webhook triggers のようなトリガーが一般的に使用されています。
TeamCity では、同様の自動化を実現するためにさまざまなトリガーが用意されています。
VCS トリガー : ビルド構成に添付されているバージョン管理システムのルートで変更が検出されると、ビルドがトリガーされます。
GitHub が Webhook トリガーをチェック : ソース GitHub リポジトリにプッシュされたコミットごとにビルドがトリガーされます。さらに、ステータス発行者のコミットが構成されていない場合でも、詳細なビルド結果情報が GitHub ページに投稿されます。
スケジュールトリガー : ビルドは指定された時間に起動されます。
ビルドトリガーを終了 : 選択した構成のビルドが完了した後にビルドがトリガーされます。
Maven アーティファクト依存関係トリガー : チェックサムの変更によって検出された、指定された Maven アーティファクトの内容変更があると、ビルドがトリガーされます。
Maven スナップショット依存関係トリガー : チェックサムの変更によって検出されたリモートリポジトリ内のスナップショット依存関係の内容に変更があると、ビルドが開始されます。
ビルドトリガーを再試行 : 最後のビルドが失敗したか開始に失敗した場合にビルドがトリガーされます。
ブランチリモート実行トリガー : パーソナルビルドは、TeamCity がビルド構成の VCS ルートの特定のブランチで新しい変更を検出するたびに、自動的にトリガーされます。Git および Mercurial をサポートします。
NuGet 依存関係トリガー : NuGet リポジトリで NuGet パッケージの更新が検出された場合、ビルドを開始します。
Perforce シェルフトリガー : シェルブされた Perforce ファイルの変更に基づいてビルドを開始します。
これらのトリガーを活用することで、CI/CD ワークフローの効率的な自動化を実現し、手動による介入を減らし、デプロイの速度を向上させることができます。
環境変数
Jenkins では、environment ブロック内で環境変数を定義できます。TeamCity では、環境変数はプロジェクトレベルまたはビルド構成レベルで定義できるビルドパラメーターとして管理されます。
Jenkins:
TeamCity Kotlin DSL:
TeamCity UI での同等のもの:
ビルド構成またはプロジェクト設定を開き、env.API_KEY という名前のパラメーターを作成します。
パラメーター値を指定します。
%env.API_KEY%構文を使用して、ビルドステップまたは構成設定で参照します。
ビルド後のアクション
Jenkins では、ビルド後のアクションは post セクションで定義され、通知、アーティファクトのアーカイブ、他のビルドのトリガーなどのタスクが含まれます。
TeamCity では、成功または失敗の条件に基づいて実行するように構成された機能を構築するまたは追加のビルドステップを使用して同様の機能を実現できます。
結論
Jenkins から TeamCity への移行は、効率性の向上、自動化の強化、プラグインへの依存度の低減を実現します。このガイドが、Jenkins から TeamCity への移行に役立つ出発点となることを願っています。
関連ページ:
エージェントプールの構成
ビルドエージェントの共通セットを 1 つ持つ代わりに、エージェントプールと呼ばれる個別のグループに分割できます。プールは、プロジェクトを割り当てることができるエージェントの名前付きセットです。エージェントは 1 つのプールにのみ所属できます。プロジェクトではビルドに複数のプールを使用できます。TeamCity サーバーによって承認されるエージェントの数は、エージェントライセンスの数によって制限されます。デフォルトでは、新しく承認されたすべてのエージェントがデフォルトプールに含まれます。エージェント...
TeamCity エージェントをインストールして開始する
TeamCity ビルドエージェントは、TeamCity サーバーからのコマンドをリッスンし、実際のビルドプロセスを開始するソフトウェアです。実稼働の TeamCity セットアップでは、専用のマシンに追加のビルドエージェントをインストールする必要があります。その前に、エージェントとサーバー間の通信、システム要件、競合するソフトウェア、およびセキュリティに関する注意事項を必ず参照してください。Tomcat サーブレットコンテナーにバンドルされた TeamCity をインストールするか、Window...
プロジェクト管理者ガイド
このセクションでは、プロジェクト管理に焦点を当てます。TeamCity プロジェクトとビルド構成の作成、ビルドステップの設定、依存関係チェーンの構成などについて説明します。基本的な TeamCity ワークフロー:次のダイアグラムは、基本的な TeamCity ワークフローを示しています。TeamCity サーバーはリポジトリの変更を検出しました。サーバーはこの変更をデータベースに書き込みます。ビルド構成に添付されたトリガーは、データベース内の関連する変更を検出し、ビルドを開始します。トリガー...
ビルドの管理
このセクションには、TeamCity の既存のビルド構成の管理に関連する記事が含まれています。その内容については、サイドバーを参照してください。それらを作成および構成する方法については、このセクションに進んでください。2025 年 4 月 07 日リスクグループテストを最初に実行するビルドの主なアクション
ビルドステップの設定
ビルドステップは、CI/CD ワークフローの最小単位です。ビルドステップは、全体として実行される一連のアクションを定義します。ビルドステップは、ビルド構成とパイプラインジョブに属します。構成とパイプラインのビルドステップ:TeamCity は、.NET、Maven、NAnt、Xcode などの特定のビルドツール用に設計された幅広いビルドステップを提供します。現在、ビルド構成ではすべてのステップが利用可能です。バージョン 2025.07 で導入された
デプロイビルド構成
プロジェクトが構築されテストされたら、最終的なインフラストラクチャにデプロイする必要があることがよくあります。たとえば、NuGet ギャラリーにパッケージをアップロードしたり、DockerHub リポジトリにコンテナーを配信したり、ドキュメント Web サイトのソースを更新したりします。さまざまな CI/CD ソリューションでは、パイプラインのこの最後のステップに「デプロイ」ステージ、配信ターゲット、リリース、本番環境などのさまざまな用語を使用します。TeamCity では、配信タスクは、通常の...