# TeamCity

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FxfQOcxkpumZM0dTGsaeD%2Fimage.png?alt=media&#x26;token=23519750-cc86-41fc-bc0e-13d4857afbce" alt=""><figcaption></figcaption></figure>

## 概要 <a href="#about" id="about"></a>

TeamCityは汎用CI/CDソフトウェアプラットフォームで、柔軟なワークフロー、コラボレーション、開発慣行を促進し、DevOpsプロセス内で継続的な統合、継続的なデリバリー、継続的なデプロイメントを成功させるソリューションです。

このプラグインを使用すると、TeamCityサーバー (バージョン 2018.1 以降) を Keeperシークレットマネージャーと統合して、TeamCityでのシークレットの管理をより簡単かつ安全に行うことができます。

## 特徴 <a href="#features" id="features"></a>

* TeamCityビルドでKeeperボルトのシークレットを使用します。
* KeeperシークレットマネージャープラグインはTeamCityの**接続**としてインストールされます。

## 要件 <a href="#prerequisites" id="prerequisites"></a>

* Keeperシークレットマネージャーへのアクセス (詳細については[クイックスタートガイド](https://docs.keeper.io/jp/keeperpam/secrets-manager/quick-start-guide)のページをご参照ください)
  * Keeperアカウントでシークレットマネージャーのアドオンが有効である
  * シークレットマネージャー強制適用ポリシーが有効になっているロールのメンバーシップ
* シークレットが共有された[Keeperシークレットマネージャーアプリケーション](https://github.com/Keeper-Security/gitbook-jp-secrets-manager/blob/main/about/terminology/README.md#application)
  * アプリケーションの作成手順については、[クイックスタートガイド](https://docs.keeper.io/jp/keeperpam/secrets-manager/quick-start-guide)をご参照ください。
* 初期化された[Keeperシークレットマネージャー構成](https://docs.keeper.io/jp/keeperpam/secrets-manager/about/secrets-manager-configuration)
  * TeamCityプラグインにはBase64形式の構成を使用します

## インストール <a href="#installation" id="installation"></a>

### JetBrainsプラグインリポジトリからインストール <a href="#installing-plugin-from-jetbrains-plugins-repository" id="installing-plugin-from-jetbrains-plugins-repository"></a>

* TeamCity&#x3067;**「Administration | Plugins」**&#x306B;移動し、**\[Browse plugins repository]**&#x3092;クリックします。
* **Keeper Secrets Manager**プラグインを見つけて、**\[Get]**&#x3092;クリックし、**http\[s]://\<teamcityUrl> にインストールします**。
* **\[Install]**&#x3092;クリックしてプラグインをインストールことを確認します。
* インストール後にプラグインを有効にするには、プラグインのコンテキストメニューをクリックし、**\[Load]**&#x3092;選択します。

### Web UI経由でプラグインをインストールする <a href="#installingpluginviawebui" id="installingpluginviawebui"></a>

* [こちらのGithubページ](https://github.com/Keeper-Security/secrets-manager-teamcity/releases/latest)から TeamCity KSMプラグインのZIPファイルの最新バージョンをダウンロードします。
* **「Administration | Plugins」**&#x30DA;ージに移動し、対応するリンクを使用してローカルマシンからプラグインのZIPファイルをアップロードします。

### プラグインを手動でインストールする <a href="#installingpluginmanually" id="installingpluginmanually"></a>

* ZIPプラグインファイルを`<`[`TeamCity Data Directory`](https://www.jetbrains.com/help/teamcity/teamcity-data-directory.html)`>/plugins`ディレクトリにコピーします。ディレクトリ内に以前のバージョンのプラグインがある場合は (プラグイン パッケージの名前は異なる場合があります)、削除しておきます。

### プラグインを有効にする <a href="#enablingplugin" id="enablingplugin"></a>

* インストール後にプラグインを有効にするには、プラグインのコンテキストメニューをクリックし、**\[Load]**&#x3092;選択します。サーバーを再起動させることなくプラグインが有効になります。

### Web UI経由でプラグインをアンインストール <a href="#uninstallingpluginviawebui" id="uninstallingpluginviawebui"></a>

* **\[Administration | Plugins]**&#x306B;移動し、リストから対象の外部プラグインを見つけて、その横にある矢印アイコンをクリックし、**\[Delete]**&#x3092;選択します。
* プラグインが削除されると、サーバーを再起動するオプションがページに表示されますので、それをクリックして、プラグインのバージョン&#x304C;**\[Administration | Plugins]**&#x306E;リストに表示されなくなったことを確認します。

### プラグインを手動でアンインストール <a href="#uninstallingpluginmanually" id="uninstallingpluginmanually"></a>

* `<`[`TeamCity Data Directory`](https://www.jetbrains.com/help/teamcity/teamcity-data-directory.html)`>/plugins`ディレクトリからプラグインパッケージを削除し、TeamCityサーバーを再起動します。

## セットアップ <a href="#configuring-discovery-credentials" id="configuring-discovery-credentials"></a>

### 接続の設定 <a href="#configuring-connections" id="configuring-connections"></a>

接続を作成すると、現在のプロジェクトにネストされたすべてのサブプロジェクトで接続を使用できます。ルートプロジェクトに接続を追加した場合、サーバー全体で使用できるようになります。

接続を追加するには、対象プロジェクトの設定に移動し、**\[Connections]**&#x30DA;ージを開いて、**\[Add Connection]**&#x3092;クリックします。接続タイプ&#x306B;**\[Keeper Vault]**&#x3092;選択し、他の接続と区別するためにDisplay nameを設定します。

<figure><img src="https://docs.keeper.io/~gitbook/image?url=https%3A%2F%2F762006384-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MJXOXEifAmpyvNVL1to%252Fuploads%252FNdlO2intZScfxPHoCFPk%252Fteamcity-ksm-connections.png%3Falt%3Dmedia%26token%3D1c3b7d62-6b15-41d7-a102-4c770ffec558&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=abed32cb&#x26;sv=1" alt=""><figcaption><p>Keeperボルトの接続タイプを追加</p></figcaption></figure>

* **「Project Administration | Connections」**&#x3067;、**\[Add Connection]**&#x3092;クリックします。
* 接続タイプとし&#x3066;**「Keeper Vault」**&#x3092;選択します。
* トークンを指定します。有効なKSM構成を貼り付けます ([要件](#prerequisites)をご参照ください)。
* 接続を保存します。

<figure><img src="https://docs.keeper.io/~gitbook/image?url=https%3A%2F%2F762006384-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MJXOXEifAmpyvNVL1to%252Fuploads%252FvtxIhGbV9B62dtsOIIhO%252Fteamcity-ksm-connections-add.png%3Falt%3Dmedia%26token%3Df7d6600e-d4de-4e4b-91d7-25381bc18ce6&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=4e37143d&#x26;sv=1" alt=""><figcaption><p>Keeperボルト接続を構成する</p></figcaption></figure>

### TeamCityビルドでシークレットを使用 <a href="#using-secrets-in-teamcity-builds" id="using-secrets-in-teamcity-builds"></a>

以下は、TeamCityサーバーからKeeperボルト内のシークレットを使用する際の手順となります。

* Keeperボルトにシークレットを作成し、対応するKSMアプリケーションと共有します。
* [Secrets Manager Notation URI](https://docs.keeper.io/jp/keeperpam/secrets-manager/about/keeper-notation)を使用してシークレットを解決するTeamCityパラメータを構成します。

### ビルド構成設定でのビルドパラメータを使用 <a href="#usingbuildparametersinbuildconfigurationsettings" id="usingbuildparametersinbuildconfigurationsettings"></a>

ほとんどのビルド構成設定では、実際のプレーンテキスト値を使用する代わりに、ビルドパラメータへの参照を使用できます。ビルドを開始する前に、TeamCity は使用可能なパラメータを使用してすべての参照を解決します。解決できない参照がある場合はそのまま残され、ビルドログにそれぞれの警告が表示されます。ビルドパラメータを参照するには、`%env.KsmSecret1%`のように名前をパーセント文字で囲みます。

**「Parameters」**&#x30BF;ブでは、新しいパラメータ/プロパティ/変数を追加、編集、削除したり、事前定義された値を再定義したりできます。

{% hint style="warning" %}
パーセント文字で囲まれたテキストは、TeamCityによってパラメータへの参照として解釈されます。ビルド構成でパラメータが見つからない場合、この参照は暗黙のエージェント要件となり、そのようなビルド構成は、このパラメータが定義されているエージェントでのみ実行できます。エージェント定義の値がビルドで使用されます。

TeamCityがパーセント文字内のテキストをパラメータへの参照として扱わないようにするには、パーセント文字を2つ使用します。パラメーター参照がサポートされている値で`%%` が使用されている場合、ビルドに値を渡す前に`%`に置き換えられます。たとえば、 `%Y%m%d%H%M%S`をビルドに渡す場合には、`%%Y%%m%%d%%H%%M%%S`に変更されます。
{% endhint %}

### ワークフローの例 <a href="#exampleworkflow" id="exampleworkflow"></a>

ビルド構成レベルでビルドパラメータを定義し、ビルドステップで使用します。

1. **「Build Configuration Settings | Parameters」**&#x306B;移動します。
2. **\[Add new parameter]**&#x3092;クリックします。
3. パラメータの名前と値を入力します。パラメータ&#x306E;**「Kind」を\[Environment variable (env.)]**&#x306B;変更します。\
   \
   Name: `username`\
   Value: `%keeper://UserRecord1/fields/login%`

<figure><img src="https://docs.keeper.io/~gitbook/image?url=https%3A%2F%2F762006384-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MJXOXEifAmpyvNVL1to%252Fuploads%252FCyNRIxtU170myoD55VNF%252Fteamcity-ksm-parameter.png%3Falt%3Dmedia%26token%3D5a523ab3-59d1-49a7-95e4-20dee93bc31f&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=60b18d26&#x26;sv=1" alt=""><figcaption><p>新しいパラメータの追加</p></figcaption></figure>

4. パラメータを保存します。
5. **Build Steps**に進みます。
6. **\[Add build step]**&#x3092;クリックします。
7. [Command Line](https://www.jetbrains.com/help/teamcity/command-line.html) ランナータイプを選択します。
8. **\[Custom script]**&#x30D5;ィールドに以下のコマンドを入力します。\
   \
   `echo UserName %env.username%`\
   \
   ビルドの場合、このコマンドは次のように解決されます (ログでは実際の値はマスクされますが、実際のコマンドでは使用されます)*。*<br>

   ```
   echo UserName *****
   ```
9. ビルドステップを保存し、新しいビルドを実行します。

{% hint style="warning" %}
プラグインでは、ビルドパラメータ、環境変数などでKeeper表記法の接頭辞 (`keeper://NotationURI`) と TeamCityスタイルの接頭辞 (`keeper:NotationURI`) の両方が使用できます。以下の例をご参照ください。
{% endhint %}

**パラメータの例**

* 環境変数`env.User`: `keeper:abcdABCDabcdABCDuvwxyz/field/login`
* 環境変数`env.Secret`: `keeper://MyRecord1/custom_field/Secret1`
