# Jenkinsプラグイン

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FSq4H8ydpR0gTWZbAuMlw%2Fimage.png?alt=media&#x26;token=37f59001-eba5-46d0-bf64-576cafbe2b98" alt=""><figcaption></figcaption></figure>

## 機能

* Jenkinsを使用して、Keeperボルトからシークレットを取得します。
* Jenkins FreestyleプロジェクトまたはJenkins PipelineプロジェクトとKeeperシークレットマネージャーを連携して使用します。
* Keeperボルトからファイルを取得します。

{% hint style="info" %}
Keeperシークレットマネージャー機能の完全なリストについては、[概要](/keeperpam/jp/secrets-manager/overview.md)をご参照ください。
{% endhint %}

## 要件

この統合を利用するには、以下が必要となります。。。

* Keeperシークレットマネージャーへのアクセス (詳細については[クイックスタートガイド](/keeperpam/jp/secrets-manager/quick-start-guide.md)のページをご参照ください)
  * Keeperアカウントでシークレットマネージャーのアドオンが有効である
  * シークレットマネージャー強制適用ポリシーが有効になっているロールのメンバーシップ
* シークレットを共有するKeeper[シークレットマネージャーアプリケーション](/keeperpam/jp/secrets-manager/about/terminology.md)
  * アプリケーションの作成手順については、[クイックスタートガイド](/keeperpam/jp/secrets-manager/quick-start-guide.md)をご参照ください
* [ワンタイムアクセストークン](/keeperpam/jp/secrets-manager/about/one-time-token.md)

{% hint style="warning" %}
このプラグインでは**SecureRandom**を使用しており、エントロピーが少なすぎるために一部のシステムで速度が低下する可能性があります。\
\
Linuxでは、`cat /proc/sys/kernel/random/entropy_avail`を実行すると、利用可能なエントロピーが表示されます。200未満の場合は、エントロピーを生成するために`rng-tools`のようなソフトウェアが必要になります。
{% endhint %}

## 概説

Keeperシークレットマネージャー用のJenkinsプラグインを使用すると、Keeperボルトからシークレットを取得し、ビルドパイプラインおよびワークフローパイプライン内の**環境変数**または**ファイル**に値を格納できます。

## インストール

Keeperシークレットプラグインは、Jenkinsで利用できるプラグインのリストから選んでインストールできます。Jenkins内で、**\[Manage Jenkins]** (Jenkinsの管理) -> **\[Manage Plugins]** (プラグインの管理) -> **\[Available]** (インストール可能) に移動します。検索バーを使用して「Keeper Secrets Manager」を検索し、プラグインを見つけます。**\[Install]** (インストール) チェックボックスをオンにして、インストールボタンをクリックします。Jenkinsをすぐに再起動するか、後にしてインストールを完了するかを選択できます。Jenkinsを再起動すると、プラグインが使用できるようになります。

詳細については、plugins.jenkins.ioの[Keeperシークレットマネージャープラグイン](https://plugins.jenkins.io/keeper-secrets-manager/)をご参照ください。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F1iMxkzGsxGygiloHsbCL%2Fimage.png?alt=media&#x26;token=6cac415e-51b5-4cb5-9072-41ec2741f4f0" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Keeperシークレットマネージャープラグインのベータ版がインストールされている場合は、まずそれを削除する必要があります。**\[Manage Jenkins]** (Jenkinsの管理) -> **\[Manage Plugins]** (プラグインの管理) -> **\[Installed]** (インストール済み) のタブで、**\[Uninstall]** (アンインストール) ボタンをクリックします。すでにインストールされている場合は、**\[Available]** (インストール可能) タブには表示されません。
{% endhint %}

### ソースコード

[GitHubリポジトリ](https://github.com/jenkinsci/keeper-secrets-manager-plugin)でKeeper Secrets Manager Jenkinsプラグインのソースコードを検索します。

## シークレットマネージャークライアントの作成

まだの場合は、クイックスタートガイドをご参照の上、Jenkins専用のシークレットマネージャーアプリケーションとクライアントデバイスを作成してください。

Keeperコマンダーを使用して、Jenkins用のクライアントデバイスを生成します。ワンタイムアクセストークンをメモします。

```
My Vault> secrets-manager client add --app MyApplication

------------------------------------------------------------------
One Time Access Token:XX:XXXXXXXXXXXXX
------------------------------------------------------------------
```

{% hint style="warning" %}
デフォルトでは、クライアントデバイスはワンタイムアクセストークンを使用する最初のIPアドレスに固定されます。Jenkinsサーバーに複数の外部IPアドレスが設定されている可能性がある場合は、ワンタイムアクセストークンを生成するときに`--unlock-ip`パラメータを追加してください。

シークレットマネージャーアプリケーションおよびクライアントの作成の詳細については、[Secrets Managerコマンドのページ](/keeperpam/jp/commander-cli/command-reference/secrets-manager-commands.md#overview)をご参照ください。
{% endhint %}

### Jenkinsにクレデンシャルを追加

プラグインを使用する最初の手順は、ワンタイムアクセストークンからJenkinsのクレデンシャルを作成することです。

Jenkins内で、**\[Manage Jenkins]** (Jenkinsの管理) > **\[Manage Credentials]** (クレデンシャルの管理) > **\[Scope]** (スコープ) > **\[Add Credentials]** (クレデンシャルの追加) に移動し、**\[Kind]** (種類) のドロップダウン&#x3067;**\[Keeper Secrets Manager]**&#x3092;選択します。以下のようなフォームが表示されます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FxIOSRPbQb8rMh07lUKbM%2Fimage.png?alt=media&#x26;token=cc5be00f-908e-4874-bc4b-fb19da09bcc3" alt=""><figcaption></figcaption></figure>

クレデンシャルがJenkinsの他の領域で見つけやすくなるように、クレデンシャル&#x306E;**\[Description]** (説明) を設定します。

ワンタイムアクセストークンをフォームフィールドに貼り付けて保存します。

#### 初回接続

クレデンシャルを保存すると、JenkinsサーバーがKeeperシークレットマネージャーサービスに接続し、ワンタイムアクセストークンを初期化します。続いて、以降のリクエストに備えて、必要な暗号化鍵とクライアント識別子をJenkins内に格納します。この時点で、ワンタイムアクセストークンフィールドは消去されます。

ワンタイムアクセストークンの初期化に問題があった場合は、エラーメッセージがフィールドに表示されます。Jenkinsのクレデンシャルは、エラーがない状態になるまで使用できません。新しいワンタイムアクセストークンを作成して、クレデンシャルの既存の情報を置き換えることができます。コマンダーを使用して新たなトークンを作成し、それ&#x3092;**\[Token]** (トークン) フィールドに貼り付けてて保存します。

クライアントID、秘密鍵、アプリキーは閲覧できなくなります。**\[Replace Keys...]** (鍵の置換) ボタンをクリックすると、既存の設定から鍵を置き換えることができます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FyC6nM9MkhfWo5mQKLNlq%2Fimage.png?alt=media&#x26;token=36db19d1-c5e8-4266-994d-3655e6a1da4b" alt=""><figcaption></figcaption></figure>

**\[Replace]** (置換) ボタンをクリックすると、既存の設定からJenkinsに値をカットアンドペーストできます。次に、**\[Validate Credential]** (クレデンシャルの検証) ボタンをクリックして、IDと鍵を検証できます。

## 使用例: フリースタイルプロジェクト

フリースタイルプロジェクトの場合、環境変数の挿入はビルドステップを介して行われます。

**\[Add build step]** (ビルドステップの追加) ドロップダウンで、**\[Keeper Secrets Manager]**&#x3092;選択します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FkpVaJ45WK4kWuejmvKgX%2Fimage.png?alt=media&#x26;token=7dd64b7b-efb0-41c9-b729-a64beebb4a3a" alt=""><figcaption></figcaption></figure>

**\[Credential]** (クレデンシャル) ドロップダウンで、前の手順で作成したKeeperシークレットマネージャーのクレデンシャルを選択します。

Keeper表記法を使用すると、環境変数はKeeperボルト内のレコードから一致する値に自動的に置き換えられます。Keeperボルト内のシークレットに含まれるログイン、パスワード、カスタムフィールド、ファイル名など、任意のフィールドを参照できます。

次に、シークレットの代入先を選択します。シークレットは、ビルドのワークスペース内の環境変数またはファイルに格納できます。

ビルドステップに複数の環境変数を追加するには、**\[Add Secret]** (シークレットの追加) をクリックし、環境変数と表記法のフィールドに値を入力します。

**Keeper表記法**

Keeper表記法を使用して、シークレットとして使用するレコードフィールドを選択します。Keeper表記法では以下の形式を使用します。

`keeper://<レコードUID>/field/<フィールド名>`

ここで、「レコードUID」は、フィールドとしてシークレットのクレデンシャルを含むレコードのUIDであり、「フィールド名」は、クレデンシャルが「パスワード」などとして格納されるフィールドです。

例: `keeper://3FXqmP5nFKwju0H8pl0DmQ/field/password`

{% hint style="info" %}
レコードUIDは、Keeperコマンダーまたはウェブボルトユーザーインターフェース内で確認できます。
{% endhint %}

**シークレットの使用**

設定された環境変数は、以下のビルドステップで使用できます。**Keeper Secrets Manager**ステップを新たに追加し、別のアカウントまたはアプリケーションからシークレットを選択することもできます。

環境変数は、**シェルの実行**ステップで使用および表示できます。以下に例を示します。

```
#!/bin/bash

my_app --login "${MY_LOGIN}"
echo "My Login = ${MY_LOGIN}"
```

上記では、環境変数**MY\_LOGIN**はアプリケーションmy\_appにパラメータとして渡されますが、**echo**命令文はコンソールに「\*\*\*\*」というテキストを出力します。テキストベースのシークレットは、コンソールで自動的に編集されます。

## 使用例: パイプライン連携 (ワークフロー)

Keeperシークレットマネージャープラグインでは、以下のよう&#x306B;**`withKsm`**&#x30E9;ベルの付いたステップを使用する**Jenkinsfile**ファイル内で使用できます。

```
pipeline {
  agent any 
  stages {
    stage('Hello') {
      steps {
        withKsm(application: [
          [
            credentialsId:'5142ceb84e9b4a2a9179cc5b6fe2798b',
            secrets: [
              [destination: 'env', envVar:'MY_LOGIN', filePath: '',
                notation:'1adh_WZxtbbHWqf6IALMVg/field/login'],
              [destination: 'env', envVar:'MY_SEC_PHONE_NUM', filePath: '',
                notation:'Atu8tVgMxpB-iO4xT-Vu3Q/custom_field/phone[1][number]'],
              [destination: 'file', envVar: '', filePath: 'img.png',
                notation:'V8lFbio0Bs0LuvaSD5DDHA/file/IMG_0036.png']
            ]
          ]  
        ]) {
          sh'''
              # Will be redacted in console  
              echo "MY_LOGIN = ${MY_LOGIN}"
              echo "MY_SEC_PHONE_NUM = ${MY_SEC_PHONE_NUM}"

              ./my/build/script --login  "${MY_LOGIN}" --phone "${MY_SEC_PHONE_NUM}"
              file img.png
          '''
        }
      }
    }
  }
}
```

Keeperシークレットマネージャーのスニペットは、Jenkins内の**パイプライン構文**[スニペット生成ツール](https://www.jenkins.io/doc/book/pipeline/getting-started/#snippet-generator)を使用して作成できます。**\[Sample Step]** (サンプルステップ) ドロップダウンか&#x3089;**\[withKsm]**&#x3092;選択して、Keeperシークレットマネージャーアプリケーションを追加します。これでクレデンシャルを選択してシークレットを追加できるようになります。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F7Ppw4Xuxg6i371cfBUPk%2Fimage.png?alt=media&#x26;token=b329f3df-ae40-49e1-ba4a-72ee9ad186e9" alt=""><figcaption></figcaption></figure>

アプリケーション、クレデンシャル、シークレットの設定が完了したら、**\[Generate Pipeline Script]** (パイプラインスクリプトの生成) をクリックして**withKsm**ブロックを生成できます。これで、このスニペットをJenkinsfileに追加できます。

{% hint style="info" %}
シークレットを含む環境変数は、それらが定義されている**withKsm**ブロック内でのみアクセスできます。ブロックを終了すると、シークレットにアクセスできなくなります。
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/secrets-manager/integrations/jenkins-plugin.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
