TeamCity On-Premises 2026.2 Help

Amazon S3 と S3 互換ストレージ

TeamCity には Amazon S3 Artifact Storage プラグインがバンドルされており、ビルドアーティファクトを Amazon S3 バケットに加え、 MinIOBackblaze B2 などの S3 互換バケットに保存できます。 S3 互換ストレージは、AWS 環境と AWS 以外の環境の両方でホストできます。

新しい AWS S3 ストレージの作成とセットアップアップ?

管理 | <自分のプロジェクト> ページに移動し、 アーティファクトストレージ タブに切り替えます。

  • 新しいストレージをすべての TeamCity プロジェクトで利用できるようにする場合は、<ルートプロジェクト> の設定を開きます。

  • 新しいストレージをこのプロジェクトとそのサブプロジェクトでのみ利用できるようにする場合は、特定のプロジェクトを 1 つ編集します。

  1. 組み込みの TeamCity アーティファクトストレージはデフォルトで表示され、アクティブとしてマークされています。 新しいストレージを作成するには、 新しいストレージを追加 ボタンをクリックします。

  2. カスタムストレージ名を指定し、必要に応じて内部で使用される ID を指定します。

  3. タイプ フィールドを「AWS S3」に設定します。

  4. TeamCity が Amazon リソースにアクセスするために使用する既存の AWS 接続を選択します。 適切な AWS 接続が存在しない場合は、「+」アイコンをクリックして追加します。

    選択した AWS 接続が S3 バケットにアクセスするために使用する認証情報 (またはそれが想定する IAM ロール) を持つユーザーには、次の権限が必要です。

    • 自分のすべてのバケットを一覧表示する権限の付与権限の取得? wait... no.

    • GetBucketLocation

    • GetObject

    • ListBucket

    • PutObject

    • DeleteObject

    • GetAccelerateConfiguration (転送加速が有効な場合)

  5. TeamCity は、選択した AWS 接続を使用して、利用可能な S3 バケットのリストを取得します。 バケット ドロップダウンメニューを開いて、リストから特定の項目を選択します。

  1. (任意) すべての TeamCity プロジェクトで同じ S3 バケットを使用し、プレフィックスベースの権限を設定する場合は、 パスプレフィックスを指定します。

  2. Amazon S3 バケットは、ファイルのアップロードとダウンロードを高速化する 2 つのオプションをサポートしています。

    • AWS CloudFront — TeamCity が近くの低レイテンシ CloudFront サーバーを使用してアーティファクトを転送できるようにするコンテンツ配信ネットワーク (CDN)。

    • 転送加速(英語) — 世界中から一元化された S3 バケットへの転送速度を最適化するように設計されたバケットレベルの機能。 これにより、クライアントと S3 バケット間の長距離にわたるファイルの高速、簡単、安全な転送が可能になります。

    バケットが Transfer Acceleration または CloudFront を使用するように構成されている場合は、 転送のスピードアップ セクションで対応するオプションを選択します。 それ以外の場合、TeamCity で通常モードでファイルを転送するには、 なし タイプを選択します。

    S3 転送スピードアップモード

  1. ストレージへの 大きなファイルのアップロード を最適化するには、 マルチパートアップロード を有効にできます。 これを行うには、 しきい値とパートサイズをカスタマイズ 設定にチェックを入れ、マルチパートアップロードのしきい値を設定します。 許可される最小値は 5MB です。 サポートされているサフィックス: KBMBGBTB。 このフィールドを空のままにすると、8 MB を超えるすべてのファイルに対してマルチパートアップロードが自動的に開始されます (8MB がデフォルト値です)。

    マルチパートアップロード
    さらに、アップロードされる各ファイルパートの最大許容サイズを構成できます。 最小値は 5MB です。 空のままにすると、TeamCity は 8MB をデフォルト値として使用します。

  1. アップロード後にファイルの整合性を検証 にチェックを入れると、TeamCity が追加の アップロード済みファイルのチェック を実行できます。 整合性検証に失敗した場合、TeamCity は対応するメッセージをビルドログに書き込みます。

  2. 保存をクリックして新しいストレージを保存し、使用可能なストレージのリストに戻ります。

プロジェクトで使用可能なストレージのリストを表示しているときに、 アクティブにするをクリックして、このプロジェクトのすべての新しいビルドに対して対応するストレージの使用を開始します。 「N 個の使用状況」リンクでは、アーティファクトをアップロードするためにこのストレージを使用したビルドを表示できます。

ストレージをアクティブにする

新しい S3 互換ストレージの作成と設定

  1. 管理 | <自分のプロジェクト> ページに移動し、 アーティファクトストレージ タブに切り替えます。

    • 新しいストレージをすべての TeamCity プロジェクトで利用できるようにする場合は、<ルートプロジェクト> の設定を開きます。

    • 新しいストレージをこのプロジェクトとそのサブプロジェクトでのみ利用できるようにする場合は、特定のプロジェクトを 1 つ編集します。

  2. 組み込みの TeamCity アーティファクトストレージはデフォルトで表示され、アクティブとしてマークされています。 新しいストレージを作成するには、 新しいストレージを追加 ボタンをクリックします。

  3. カスタムストレージ名を指定し、必要に応じて内部で使用される ID を指定します。

  4. タイプ フィールドを「カスタム S3」に設定します。

  5. アクセスキー ID 値と 秘密アクセスキー 値を指定します。 アクセスキーの発行方法については、S3 互換ストレージベンダーのドキュメントを参照してください。

  6. TeamCity がバケットへのアクセスに使用するストレージエンドポイントを指定します。

  7. (任意) すべての TeamCity プロジェクトで同じ S3 バケットを使用し、プレフィックスベースの権限を設定する場合は、 パスプレフィックスを指定します。

  8. ストレージへの 大きなファイルのアップロード を最適化するには、 マルチパートアップロード を有効にできます。 これを行うには、 しきい値とパートサイズをカスタマイズ 設定にチェックを入れ、マルチパートアップロードのしきい値を設定します。 許可される最小値は 5MB です。 サポートされているサフィックス: KBMBGBTB。 このフィールドを空のままにすると、8 MB を超えるすべてのファイルに対してマルチパートアップロードが自動的に開始されます (8MB がデフォルト値です)。

    マルチパートアップロード

    さらに、アップロードされる各ファイルパートの最大許容サイズを構成できます。 最小値は 5MB です。 空のままにすると、TeamCity は 8MB をデフォルト値として使用します。

  9. アップロード後にファイルの整合性を検証 にチェックを入れると、TeamCity が追加の アップロード済みファイルのチェック を実行できます。 整合性検証に失敗した場合、TeamCity は対応するメッセージをビルドログに書き込みます。

  10. 保存をクリックして新しいストレージを保存し、使用可能なストレージのリストに戻ります。

プロジェクトで使用可能なストレージのリストを表示しているときに、 アクティブにするをクリックして、このプロジェクトのすべての新しいビルドに対して対応するストレージの使用を開始します。 「N 個の使用状況」リンクでは、アーティファクトをアップロードするためにこのストレージを使用したビルドを表示できます。

ストレージをアクティブにする

S3 ストレージクラス

Amazon S3 ストレージクラス(英語)を使用すると、必要なパフォーマンス、データの可用性と復元力に基づいてストレージを微調整できます。

必要なストレージクラスを有効にするには、次の 2 つの方法があります。

  • TeamCity 側。 S3 バケットにアーティファクトをアップロードするとき、TeamCity は x-amz-ストレージ-クラス ヘッダーを PUT メソッド リクエストに追加します。 ヘッダー値は、TeamCity の対応するストレージ設定 (例: x-amz-ストレージ-クラス: INTELLIGENT_TIERING) によって異なります。 このモードでは、AWS 側で追加の設定は必要ありません。

    このアプローチは現在サポートされていませんが、今後のリリースサイクルでこの機能を実装したいと考えています。 この機能をサポートし、フィードバックを共有するには、この YouTrack チケットに賛成票を投じ、コメントしてください: TW-79992(英語)

  • AWS 側。 このモードでは、TeamCity は通常の方法でアーティファクトをアップロードし、アーティファクトのアップロード後に、事前構成済みのライフサイクルルールによって必要なストレージクラスが適用されます。 このルールを設定するには、次の手順を実行します。

    1. 必要な S3 ストレージを開き、 管理 タブに切り替えます。

    2. ライフサイクルルールを作成 をクリックします。

    3. ライフサイクルルールのアクション セクションの オブジェクトの現行バージョンをストレージクラス間で移動 を確認します。

    4. 必要なストレージクラスと、アップロード日と移行日の間の遅延を選択します。 TeamCity がアーティファクトをアップロードするとすぐに移行するには、 オブジェクト作成後の日数 を "0" に設定します。

    5. 保存されたアーティファクトの追加ルールを有効にします。 例: オブジェクトの現行バージョンを期限切れにする をチェックすると、以前にアップロードされたアーティファクトに期限切れのラベルを付けることができ、 オブジェクトの非現行バージョンを完全に削除 をチェックすると、ストレージを定期的にクリーンアップできます。

    6. ルールのスコープを指定して、ストレージ全体に適用するか、必要なフィルターに一致するアーティファクトのみに適用するかを選択します。

    7. ページの下部にあるルールを確認します。 次のようになります。

      S3 ライフサイクルルール
    8. ライフサイクルルールを保存するには、 ルールを作成 をクリックします。

詳細については、次の AWS ヘルプ記事を参照してください: Amazon S3 ストレージクラスの使用(英語)

CloudFront 経由でのアーティファクト転送

Amazon CloudFront(英語) は、低遅延と高速転送を提供するコンテンツ配信ネットワークです。 S3 ストレージのサポートを有効にすると、TeamCity は最も近い CloudFront サーバー経由でアーティファクトを転送できるようになります。 S3 バケットが TeamCity インフラストラクチャとは異なるリージョンにある場合、アーティファクトのアップロード/ダウンロードを大幅に高速化し、費用を削減できる可能性があります。

前提条件

TeamCity は CloudFront 統合をセットアップ することも、すべての設定を 手動 でセットアップすることもできます。

CloudFront 統合には、以下を設定する必要があります。

CloudFront 設定

ストレージタイプを AWS CloudFront に切り替えると、4 つの新しい設定が表示されます。

  • 手動で作成されたディストリビューションを選択するには、 ダウンロード用ディストリビューション および アップロード用ディストリビューション ドロップダウンメニューを使用します。

  • 公開鍵 フィールドと 秘密鍵をアップロード… ボタンを使用すると、 対応するキーを指定できます。

または、 Switch to the Sakura UI アイコンをクリックして、TeamCity に 4 つの設定すべてを自動的に構成 させることもできます。

CloudFront 設定が正しく機能するには、TeamCity に次の権限が必要です:

  • クラウドフロント: ListDistributions

  • cloudfront:ListKeyGroups

  • cloudfront:ListPublicKeys

CloudFront の自動セットアップ

TeamCity は設定を自動的に構成できます。 これには以下が含まれます。

  • キーペアを生成し、公開鍵を CloudFront にアップロードします。

  • CloudFront で新しいキーグループを作成します。

  • 次の方法で 2 つの新しいディストリビューションを作成します。

    • すべてのエッジロケーションを使用 価格クラス。

    • 現在のバケットにアクセスできる新しい オリジンアクセス ID(英語)

    • 定義するデフォルトの動作

      • アーティファクトをアップロードするために許可された HTTP メソッド: GET メソッドHEADOPTIONSPUT メソッドPOSTPATCHDELETE 、ダウンロード用: GET メソッドHEADOPTIONS;

      • ビューアーアクセス権を持つ新しい キーグループ(英語)

      • すべてのクエリ文字列を渡すことができるカスタム キャッシュポリシー(英語)

  • S3 バケットに新しいポリシーを追加して、新しいディストリビューションがそれにアクセスできるようにします。 ポリシーの例を参照してください。

自動セットアップでは、Teamcity に追加のアクセス許可を与える必要があります。

  • クラウドフロント: CreateDistribution

  • クラウドフロント: CreateKeyGroup

  • cloudfront:CreatePublicKey

  • cloudfront:CreateOriginRequestPolicy

  • cloudfront:CreateCloudFrontOriginAccessIdentity

  • クラウドフロント: CreateCachePolicy

  • cloudfront:DeleteKeyGroup

  • cloudfront:DeletePublicKey

  • cloudfront:ListCloudFrontOriginAccessIdentities

  • cloudfront:ListCachePolicies

  • cloudfront:ListOriginRequestPolicies

  • クラウドフロント: GetDistribution

  • クラウドフロント: GetPublicKey

  • s3:GetBucketPolicy

  • s3:PutBucketPolicy

必要なすべてのアクセス許可を提供するポリシーの例:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Action": [ "cloudfront:CreatePublicKey", "cloudfront:CreateOriginRequestPolicy", "cloudfront:ListCloudFrontOriginAccessIdentities", "cloudfront:DeleteKeyGroup", "cloudfront:GetPublicKey", "cloudfront:ListCachePolicies", "cloudfront:CreateDistribution", "cloudfront:ListOriginRequestPolicies", "cloudfront:DeletePublicKey", "cloudfront:CreateCloudFrontOriginAccessIdentity", "cloudfront:CreateKeyGroup", "cloudfront:CreateCachePolicy", "cloudfront:GetDistribution", "cloudfront:ListPublicKeys", "s3:ListAllMyBuckets", "cloudfront:ListKeyGroups", "cloudfront:ListDistributions" ], "Resource": "*" }, { "Sid": "2", "Effect": "Allow", "Action": [ "s3:PutBucketPolicy", "s3:GetBucketPolicy" ], "Resource": "arn:aws:s3:::<YOUR_BUCKET_NAME>" } ] }

CloudFront の手動セットアップ

セキュリティ上の理由から、アーティファクトのアップロードとダウンロード用に 2 つの別々のディストリビューションを構成することをお勧めします。 ディストリビューションごとに:

  1. SSH-2RSA キー形式(英語)でキーペアを生成します。

  2. ペアから CloudFront に公開鍵をアップロードします。

  3. CloudFront で 新しいキーグループを追加する(英語)を実行し、作成した公開鍵をこのグループに追加します。

  4. キャッシング鍵の設定 | クエリ文字列すべてに設定して新しいキャッシュポリシーを作成します。

  5. プライベートバケットを使用する場合は、新しい OAI(英語) ユーザーを作成します。

  6. ディストリビューションを作成する(英語)とそれにキーグループを添付します。

    • TeamCity で指定されているものと同じ S3 バケットを選択してください。

    • アーティファクトをアップロードするための 許可された HTTP メソッドGET メソッドHEADOPTIONSPUT メソッドPOSTPATCHDELETE; GET メソッドHEADOPTIONS をダウンロードするため

    • ビューアーアクセスを制限: はい

    • 信頼された認可タイプ: 信頼できるキーグループ

    • キャッシング鍵とオリジンリクエスト: キャッシュポリシーとオリジンリクエストポリシー

    • プライベートバケットの場合は、 OAI の使用オプションを有効にし、次の設定で OAI を構成します。

      • バケットポリシー: いいえ、バケットポリシーを更新します

    • パブリックバケットの場合、 パブリックアクセスをブロック オプションを無効にします。

  7. 新しいポリシーを追加する(英語)を S3 バケットに追加します。 ポリシーの例を参照してください。

設定すると、ディストリビューションは ダウンロードディストリビューションおよび アップロード配信ドロップダウンメニューに自動的に表示されます。

  1. ターゲットの CloudFront ディストリビューションを選択します。

  2. 公開鍵で、このディストリビューションに関連付けられている公開鍵を選択します。

  3. 秘密鍵をアップロード ... ボタンをクリックして、ペアから秘密鍵をアップロードします。

  4. ストレージ設定を保存します。

S3 ポリシーの例

OAI を使用してプライベートバケットにアクセスするには:

{ "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <OAI ID" }, "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::<S3 bucket name/*" }

パブリックバケットにアクセスする場合:

{ "Sid": "PublicRead", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3::<BUCKET_NAME>/*" }

Kotlin DSL

次のサンプルは、S3 バケットをプロジェクトアーティファクトのカスタムストレージとして追加し、このストレージをプライマリ (デフォルト) として設定する方法を示しています。

import jetbrains.buildServer.configs.kotlin.* import jetbrains.buildServer.configs.kotlin.projectFeatures.activeStorage import jetbrains.buildServer.configs.kotlin.projectFeatures.s3Storage project { // ... features { activeStorage { id = "PROJECT_EXT_37" activeStorageID = "PROJECT_EXT_4" } s3Storage { id = "PROJECT_EXT_4" awsEnvironment = default { awsRegionName = "eu-west-1" } connectionId = "AwsPrimary" storageName = "S3 Transfer Acceleration" bucketName = "dk-s3ta" enableTransferAcceleration = true forceVirtualHostAddressing = true verifyIntegrityAfterUpload = true } } // ... }

アーティファクトを別のストレージへ移行

TeamCity サーバーには、ビルドアーティファクトをあるストレージから別のストレージに転送する コマンドラインツールが付属しています。 このツールは、 プロジェクト設定 | アーティファクトストレージ ページからダウンロードできます。

アーティファクト移行ツールをダウンロードする

現在、このツールは次の移行ルートをサポートしています。

  • ローカルディレクトリから Amazon S3 バケットへ、またはその逆

  • ある Amazon S3 バケットから別のバケット

他のクラウドストレージオプションのサポートにも取り組んでいます。

詳細: アーティファクト移行ツール

削除されたプロジェクトの孤立アーティファクトの特定

TeamCity プロジェクトを削除すると、TeamCity は外部ストレージ構成を含むその設定も削除します。 これらの設定がないと、TeamCity は削除されたプロジェクトの構成とパイプラインがアーティファクトを保存していた S3 バケットにアクセスできなくなります。

これらの孤立アーティファクトを特定するには、 GET メソッド リクエストを <server_URL>/artifacts/s3/scan.html エンドポイントに送信します:

curl --location 'http://localhost:8111/artifacts/s3/scan.html' \ --header 'Content-Type: application/xml' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer $TEAMCITY_USER_ACCESS_TOKEN' \ --data ''

両方の条件が満たされると、リクエストはレスポンス本文に "Starting the scan" を含めてコード 202 Accepted を返します。 スキャンが完了すると、TeamCity はレポートを <TeamCity-server-home>/logs/artifact_scan_<timestamp> ファイルに保存します。 TeamCity UI からこのファイルにアクセスするには、 管理 | 診断 | サーバーログ ページに移動します。

孤立ファイルのレポート

レポートには、 {"orphanedPaths":[...],"errors":[...]} フォーマットの配列が 2 つ含まれます。

  • orphanedPaths 配列には、削除されたプロジェクトに属するアーティファクトが一覧表示されます。

  • errors 配列には、スキャン中に発生したエラーが一覧表示されます。

検索を絞るには、次のパラメーターを追加できます:

curl --location 'http://localhost:8111/artifacts/s3/scan.html?projectId=myProj&scanBuilds=true&calculateSizes=true&skipErrors=false' \ --header 'Content-Type: application/xml' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer $TEAMCITY_USER_ACCESS_TOKEN' \ --data ''
プロジェクト ID

型: 文字列
デフォルト値: null

プロジェクトの 一般 設定タブからコピーできる外部プロジェクト ID。 指定した場合、検索はこのプロジェクトから開始され、子サブプロジェクトの階層全体がスキャンされます。指定しない場合、検索は最上位の "Root" プロジェクトから開始されます。

ビルドをスキャン

型: Boolean
デフォルト値: false

このパラメーターを に設定すると、ビルド構成内のすべてのビルドフォルダーが完了済みまたは実行中のビルドのいずれかに属しているかどうかを確認します。設定しない場合、スキャンではストレージのプロジェクトレベルとビルド構成レベルのみを確認します。

サイズを計算

型: Boolean
デフォルト値: false

このパラメーターを に設定すると、すべてのゴーストフォルダーのサイズを計算します。

エラーをスキップ

型: Boolean
デフォルト値: true

デフォルトでは、生成されたレポート内の errors 配列は空です。

このパラメーターを に設定すると、エラーがレポートに含まれます。設定しない場合、サイズ付きのゴーストフォルダーの配列のみが含まれます。

2026 年 9 月 11 日