1PasswordからJenkinsに秘密情報を読み込む

1Passwordマニュアル|Jenkins統合でシークレットを安全に管理。1Password Secretsプラグインで効率的なCI/CDパイプラインを実現します。

Jenkins用の1Password Secretsプラグインを使うと、シークレット参照を使用して、1Password からシークレットを Jenkins CI/CD パイプラインの環境変数として安全に読み込むことができます。シークレット参照は 1Password と自動的に同期され、コード内のプレーンテキストのシークレットが公開されるリスクがなくなります。

プラグインは、1Password サービス アカウントまたは1Password Connect サーバーを使用して認証できます。

情報

1Password Jenkins プラグインは、1Passwordによって公式にサポートおよび管理されています。コミュニティへの貢献は大歓迎です。GitHubのリポジトリをご覧ください。

必要条件

Jenkins 用の 1Password Secrets プラグインは、サービス アカウントまたはConnect サーバーのいずれかで使用できます。サービス アカウントと Connect サーバーの両方を構成すると、Connect サーバーが優先されます。

サービスアカウント

サーバーに接続

Get started

Jenkins 用の 1Password Secrets プラグインを使い始めるには:

Step 1: Install the 1Password Secrets plugin for Jenkins

Jenkins 用の 1Password Secrets プラグインをインストールするには、いくつかのオプションがあります。Jenkins GUI (グラフィカル ユーザー インターフェイス)、Jenkins CLI ツール、または直接アップロードを使用できます。

Jenkins GUI

GUI を使用して Jenkins 用の 1Password Secrets プラグインをインストールするには:

  • ①Jenkins インスタンスにサインインします。

  • ②Jenkins ダッシュボードから、Manage Jenkins > Pluginsに移動します。

  • Available pluginsタブを選択します。

  • onepassword-secretsを検索します。

  • ⑤Jenkins 用の 1Password Secrets プラグインを選択し、Installを選択します。

より詳細な手順については、GUIの使用を参照してください。

Jenkins CLI tool

CLI ツールを使用して Jenkins 用の 1Password Secrets プラグインをインストールするには:

  • CLIツールの使用説明書に従ってください。

  • ②次のコマンドを実行します。必ず1.0.0を正しいバージョンに置き換えてください。

  • $ jenkins-plugin-cli --plugins onepassword-secrets:1.0.0

Direct upload

直接アップロードを使用して Jenkins 用の 1Password Secrets プラグインをインストールするには:

  • リリースの1つをダウンロードする。

  • ②Jenkins ダッシュボードから、Manage Jenkins > Pluginsに移動します。

  • Advancedタブを選択します。

  • ④.hpiリリースからダウンロードしたファイルを選択します。

  • Deployを選択します。

直接アップロードの使用を参照してくださいより詳細な手順については、こちらをご覧ください。

Step 2: Install 1Password CLI

Jenkins 用の 1Password Secrets プラグインは 1Password CLI に依[Save]しています。Jenkins CI/CD パイプラインを実行するのと同じマシンに 1Password CLI をインストールする必要があります。

Jenkinsfileを使用して1Password CLIをインストールできますまたは、Freestyle ジョブを使用します。どちらの方法でも、1Password CLI を Jenkins の 1Password Secrets プラグインと同じパイプラインにインストールすることも、別のパイプラインにインストールすることもできます。

情報

同じパイプラインに 1Password CLI をインストールする場合は、プラグインを呼び出す前に 1Password CLI インストール スクリプトを追加する必要があります。

1Password CLI を別のパイプラインにインストールする場合は、構成でインストールを実行したワークスペースへの1Password CLI パスを設定する必要があります。

Jenkinsfile

Jenkinsfile を使用して 1Password CLI をインストールするには:

  • ①Jenkins インスタンスにサインインします。

  • New Itemを選択します。

  • ③ジョブの詳細を入力し、Pipelineを選択します。

  • ④ジョブの詳細を設定します。

  • Advanced Project Options > Pipelineまでスクロールします。

  • Pipeline scriptを選択します。

  • ⑦1Password CLI をインストールするためのコードをScriptフィールドに追加します。 宣言型またはスクリプト化されたJenkinsパイプライン構文を使用して、Jenkinsfileで1Password CLIをインストールできます。。

  • 情報 次の例は、Linux amd64 マシンに 1Password CLI バージョン 2.24 をインストールする方法を示しています。サンプル スクリプトをプラットフォームに合わせて変更し、1Password CLI の最新リリースを使用してください。

Declarative Jenkinsfile

Declarative Jenkinsfile

pipeline {

agent any

stages {

stage('Install 1Password CLI') {

steps {

sh 'curl -sSfLo op.zip "https://cache.agilebits.com/dist/1P/op2/pkg/v2.24.0/op_linux_amd64_v2.24.0.zip"'

sh 'unzip -o op.zip -d op-dir'

sh 'mv -f op-dir/op /usr/local/bin'

sh 'rm -r op.zip op-dir'

}

}

}

}

Scripted Jenkinsfile

Scripted Jenkinsfile

node {

stage('Install 1Password CLI') {

sh '''

ARCH="amd64"

curl -sSfLo op.zip "https://cache.agilebits.com/dist/1P/op2/pkg/v2.24.0/op_linux_${ARCH}_v2.24.0.zip"

unzip -o op.zip -d op-dir

mv -f op-dir/op /usr/local/bin

rm -r op.zip op-dir

'''

}

}

See result...

[Pipeline] Start of Pipeline

[Pipeline] node

Running on Jenkins in /config/workspace/Example

[Pipeline] {

[Pipeline] stage

[Pipeline] { (Install 1Password CLI)

[Pipeline] sh

+ curl -sSfLo op.zip https://cache.agilebits.com/dist/1P/op2/pkg/v2.24.0/op_linux_amd64_v2.24.0.zip

[Pipeline] sh

+ unzip -o op.zip -d op-dir

Archive: op.zip

extracting: op-dir/op.sig

inflating: op-dir/op

[Pipeline] sh

+ mv -f op-dir/op /usr/local/bin

[Pipeline] sh

+ rm -r op.zip op-dir

[Pipeline] }

[Pipeline] // stage

[Pipeline] }

[Pipeline] // node

[Pipeline] End of Pipeline

Finished: SUCCESS

  • ⑧ビルドをSaveします。

Freestyle job

注意

フリースタイルジョブでは、ジョブレベルで設定とシークレットの両方を設定することはできません。1Password では、フリースタイルジョブではなく Jenkinsfile の使用を推奨しています。連鎖フリースタイルジョブからパイプラインへの移行を参照してください。

Freestyle ジョブを使用して 1Password CLI をインストールするには:

  • ①Jenkins インスタンスにサインインします。

  • New Itemを選択します。

  • ③ジョブ名を入力し、Freestyle projectを選択します。

  • ④ジョブの詳細を設定します。

  • Build Stepsまでスクロールし、Add build step > Execute shellを選択します。

  • Execute shellの実行ステップに次のコマンドを追加します。

$ ARCH="amd64"

$ curl -sSfLo op.zip "https://cache.agilebits.com/dist/1P/op2/pkg/v2.24.0/op_linux_${ARCH}_v2.24.0.zip"

$ unzip -o op.zip -d op-dir

$ mv -f op-dir/op /usr/local/bin

$ rm -r op.zip op-dir

  • See result...

Running as SYSTEM

Building in workspace /config/workspace/Example

[Test 1Password Secrets Freestyle] $ /bin/sh -xe /tmp/jenkins14763651031574634007.sh

+ ARCH=amd64

+ curl -sSfLo op.zip https://cache.agilebits.com/dist/1P/op2/pkg/v2.24.0/op_linux_amd64_v2.24.0.zip

+ unzip -o op.zip -d op-dir

Archive: op.zip

extracting: op-dir/op.sig

inflating: op-dir/op

+ mv -f op-dir/op /usr/local/bin

+ rm -r op.zip op-dir

Finished: SUCCESS

  • ⑦ビルドをSaveします。

Step 3: Configure the 1Password Secrets plugin for Jenkins

Jenkins ダッシュボードから Jenkins 用の 1Password Secrets プラグインを設定できます。

  • ①Jenkins インスタンスにログインします。

  • Manage Jenkins > Systemを選択します。

  • 1Password Secretsまでスクロールします。

  • 1Password CLI pathを1Password CLI 実行可能ファイルの場所に設定します。 サンプル スクリプトでは /usr/local/bin/opを使用します。

残りの構成手順は、サービス アカウントを使うか、Connect サーバーを使うかによって異なります。

Service account

Jenkins の 1Password Secrets プラグインでサービス アカウントを使うには、少なくとも 1 つのサービス アカウント資格情報を追加する必要があります。

  • ①サービス アカウント資格情報の下にあるAdd > Jenkinsを選択します。

  • Domainを設定します。

  • KindSecret textに設定します。 プラグインは秘密のテキストのみをサポートします。

  • Scopeを設定します。

  • Secretをサービス アカウント トークンに設定します。

  • IDDescriptionは空のままにしておくことができます。

  • Addを選択します。

Connect server

Jenkins の 1Password Secrets プラグインでサービス アカウントを使うには、Connect Host 値を指定し、少なくとも 1 つの Connect Credential を追加する必要があります。

  • Connect Host をConnect サーバーの IP アドレス、ホスト名、または URL に設定します。

  • ②Connect Credentialの下にあるAdd > Jenkinsを選択します。

  • Domainを設定します。

  • KindSecret textに設定します。 プラグインは秘密のテキストのみをサポートします。

  • Scopeを設定します。

  • SecretをConnect サーバー トークンに設定します。

  • IDDescriptionは空のままにしておくことができます。

  • Addを選択します。

構成とパイプライン スクリプトの例については、「使用例」を参照してください。

情報

Connect サーバーとサービス アカウントの両方を構成する場合、Connect サーバーが優先されます。

Configuration

次のセクションでは、使用可能な構成オプションと構成スコープについて説明します。

情報

同じパイプラインに 1Password CLI をインストールする場合は、プラグインを呼び出す前に 1Password CLI インストール スクリプトを追加する必要があります。

1Password CLI を別のパイプラインにインストールする場合は、構成でインストールを実行したワークスペースへの1Password CLI pathを設定する必要があります。

Configuration options

Jenkins 用の 1Password Secrets プラグインには、1Password CLI、Connect サーバー、およびサービス アカウントの構成オプションがあります。

設定

説明

ホストを接続

Connect サーバーのホスト名、IP アドレス、または URL。

接続資格情報

Connectサーバーで認証するためのConnectサーバートークン。この設定はJenkinsの秘密テキスト認証情報です。

サービス アカウント認証情報

サービスアカウントで認証するためのサービスアカウントトークン。この設定はJenkinsの秘密のテキスト認証情報です。

1Password CLI パス

1Password CLI実行ファイルへのパス。デフォルトの場所は/usr/local/bin/op

Configuration scope

Jenkins の 1Password Secrets プラグインは、グローバル、フォルダーごと、またはジョブごとに設定できます。

レベル

説明

グローバル

グローバル レベルの構成は、全てのフォルダー内の全てのジョブに影響します。Jenkins の 1Password Secrets プラグインをグローバルに構成するには、それをグローバル構成に追加します。

フォルダ

フォルダー レベルの設定は、フォルダー内の全てのジョブに影響します。特定のフォルダーに対して Jenkins 用の 1Password Secrets プラグインを設定するには、それをフォルダー設定に追加します。

仕事

ジョブレベルの設定は、設定したジョブにのみ影響します。Jenkins の 1Password Secrets プラグインを単一のジョブに設定するには、Jenkinsfile または Freestyle ジョブでプラグインを設定します。

構成の優先度は、ジョブ レベルの構成では最も高く、グローバル構成では最も低くなります。レベルが具体的であるほど、優先度が高くなります。つまり、より広いレベルでデフォルト構成を設定し、より具体的なレベルでそれを上書きすることができます。

例えば、サービス アカウント (サービス アカウント A) をグローバルに構成したが、ジョブ レベルの構成で別のサービス アカウント (サービス アカウント B) で上書きした場合、ジョブは 2 番目のサービス アカウント (サービス アカウント B) を使用します。

情報

Connect サーバーとサービス アカウントの両方を構成する場合、Connect サーバーが優先されます。

Usage examples

次のセクションでは、Jenkins 用の 1Password Secrets プラグインのいくつかの使用例について説明します。

Use with a Jenkinsfile

withSecrets関数でシークレット参照を使用して、Jenkins パイプライン内のシークレットにアクセスできます。この関数は、1Password シークレットの設定とリストを受け取り、それらをパラメータとして読み込みます。次の例を調べて、さまざまなコンテキストでwithSecrets関数を使う方法を学習してください。

設定手順について...

Service account

サービス アカウントと 1Password CLI を構成するための Jenkinsfile の先頭の構成はオプションです。構成を指定しない場合、1Password Secrets プラグインはより広範囲にわたる構成を使用します。

service-account-token をサービス アカウント トークンに、op-cli-path を1Password CLI をインストールしたパス (カスタムの場所を使用した場合) に置き換えてください。構成参照してください。

Connect

Jenkinsfile の先頭にある、Connect サーバーと 1Password CLI を構成するための構成はオプションです。構成を指定しない場合、1Password Secrets プラグインはより広範囲にわたる構成を使用します。

connect-server-tokenを Connect サーバーのトークンに、connect-host をConnect サーバーの IP アドレスに、

op-cli-path を1Password CLI をインストールしたパス (カスタムの場所を使用した場合) に置き換えてください。 「構成」を参照してください。

Service account

withSecrets次の例は、1Password サービス アカウントを使用して Jenkinsfile で関数を使う方法を示しています。

Declarative Jenkinsfile

次の宣言型JenkinsfilewithSecretsサービス アカウントで関数を使う方法を示します。最初に、秘密の値を保持するための環境変数を定義し、次にwithSecrets関数を使用して値にアクセスし、値を割り当てます。

宣言型 Jenkinsfile

// Configure 1Password CLI and the service account.

def config = [

serviceAccountCredentialId: 'service-account-token',

opCLIPath: 'op-cli-path'

]

// Define the environment variables for the values of the secrets.

// Use the secret reference syntax: `op://<vault>/<item>[/section]/<field>`.

def secrets = [

[envVar: 'DOCKER_USERNAME', secretRef: 'op://vault/item/username'],

[envVar: 'DOCKER_PASSWORD', secretRef: 'op://vault/item/password']

]

pipeline {

agent any

stages{

stage('Push latest docker image') {

steps {

// Use the `withSecrets` function to access secrets.

withSecrets(config: config, secrets: secrets) {

docker.withRegistry('http://somehost:5100') {

sh 'docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} http://somehost:5100'

def image = docker.build('somebuild')

image.push 'latest'

}

}

}

}

}

}

Scripted Jenkinsfile

次のスクリプト化されたJenkinsfilewithSecretsサービス アカウントで関数を使う方法を示します。最初に、秘密の値を保持するための環境変数を定義し、次にwithSecrets関数を使用して値にアクセスし、値を割り当てます。

スクリプト化された Jenkinsfile

node {

// Configure 1Password CLI and the service account

def config = [

serviceAccountCredentialId: 'service-account-token',

opCLIPath: 'op-cli-path'

]

// Define the environment variables for the values of the secrets.

// Use the secret reference syntax: `op://<vault>/<item>[/section]/<field>`.

def secrets = [

[envVar: 'DOCKER_USERNAME', secretRef: 'op://vault/item/username'],

[envVar: 'DOCKER_PASSWORD', secretRef: 'op://vault/item/password']

]

stage('Push latest docker image') {

// Use the `withSecrets` function to access secrets.

withSecrets(config: config, secrets: secrets) {

docker.withRegistry('http://somehost:5100') {

sh 'docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} http://somehost:5100'

def image = docker.build('somebuild')

image.push 'latest'

}

}

}

}

Jenkins パイプライン構文ヘルパー

Jenkins パイプライン構文ヘルパーを使用してパイプライン スクリプトをCreateすることもできます。

Use with environment variables

Jenkins用の1Password Secretsプラグインを使うと、環境変数を使うことができます設定とシークレットを取得します。次の例は、Jenkins の 1Password Secrets プラグインで環境変数を使う方法を示しています。

ブロック内に環境変数を設定する必要がありますenvironment。次の表では、各環境変数について説明します。

これらの環境変数を設定しない場合、1Password Secrets プラグインはより広範囲の設定を使用します。

Service account

次の例は、Jenkinsfile で環境変数を使用してサービス アカウントを使う方法を示しています。

Declarative Jenkinsfile

Declarative Jenkinsfile

pipeline {

agent any

environment {

// Configure 1Password CLI and the service account.

OP_SERVICE_ACCOUNT_TOKEN = credentials('service-account-token')

OP_CLI_PATH = 'op-cli-path'

// Define the environment variables using the secret reference `op://<vault>/<item>[/section]/<field>`.

DOCKER_USERNAME = 'op://vault/item/username'

DOCKER_PASSWORD = 'op://vault/item/password'

}

stages{

stage('Push latest docker image') {

steps {

// Access 1Password secrets.

withSecrets() {

docker.withRegistry('http://somehost:5100') {

sh 'docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} http://somehost:5100'

def image = docker.build('somebuild')

image.push 'latest'

}

}

}

}

}

}

Scripted Jenkinsfile

Scripted Jenkinsfile

node {

def environment = [

// Configure 1Password CLI.

'OP_CLI_PATH = op-cli-path',

// Define the environment variables for the values of the secrets.

// Use the secret reference syntax: `op://<vault>/<item>[/section]/<field>`.

'DOCKER_USERNAME=op://vault/item/username',

'DOCKER_PASSWORD=op://vault/item/password'

]

// Define the service account token.

def credentials = [

string(credentialsId: 'service-account-token', variable: 'OP_SERVICE_ACCOUNT_TOKEN')

]

withEnv(environment) {

withCredentials(credentials) {

stage('Push latest docker image') {

// Use the `withSecrets` function to access secrets.

withSecrets() {

docker.withRegistry('http://somehost:5100') {

sh 'docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} http://somehost:5100'

def image = docker.build('somebuild')

image.push 'latest'

}

}

}

}

}

}

Connect server

次の例は、Jenkinsfile で環境変数を使用して Connect サーバーを使う方法を示しています。

Declarative Jenkinsfile

Declarative Jenkinsfile

pipeline {

agent any

environment {

// Configure 1Password CLI and the Connect server.

OP_CONNECT_HOST = 'connect-host'

OP_CONNECT_TOKEN = credentials('connect-server-token')

OP_CLI_PATH = 'op-cli-path'

// Define the environment variables for the values of the secrets.

// Use the secret reference syntax: `op://<vault>/<item>[/section]/<field>`.

DOCKER_USERNAME = 'op://vault/item/username'

DOCKER_PASSWORD = 'op://vault/item/password'

}

stages{

stage('Push latest docker image') {

steps {

// Use the `withSecrets` function to access secrets.

withSecrets() {

docker.withRegistry('http://somehost:5100') {

sh 'docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} http://somehost:5100'

def image = docker.build('somebuild')

image.push 'latest'

}

}

}

}

}

}

Scripted Jenkinsfile

Scripted Jenkinsfile

node {

def environment = [

// Configure 1Password CLI and the Connect server.

'OP_CONNECT_HOST=connect-host',

'OP_CLI_PATH = op-cli-path',

// Define the environment variables for the values of the secrets.

// Use the secret reference syntax: `op://<vault>/<item>[/section]/<field>`.

'DOCKER_USERNAME=op://vault/item/username',

'DOCKER_PASSWORD=op://vault/item/password'

]

def credentials = [

string(credentialsId: 'connect-server-token', variable: 'OP_CONNECT_TOKEN')

]

withEnv(environment) {

withCredentials(credentials) {

stage('Push latest docker image') {

// Use the `withSecrets` function to access secrets.

withSecrets() {

docker.withRegistry('http://somehost:5100') {

sh 'docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} http://somehost:5100'

def image = docker.build('somebuild')

image.push 'latest'

}

}

}

}

}

}

Use in a Freestyle Job

Jenkins Pipeline構文ヘルパーを使用して環境変数を設定できますFreestyle ジョブでシークレットにアクセスします。

Service account

Jenkins パイプライン構文ヘルパーを使用して、Freestyle ジョブでサービス アカウントを使用します。

  • ①Jenkins の Freestyle ジョブから、Stepsセクションに移動します。

  • 1Password CLI pathを1Password CLI をインストールした場所に設定します。 サンプル スクリプトでは/usr/local/bin/op を使用します。

  • Service Account Credentialをサービス アカウント トークンに設定します。

  • Add a 1Password secretを選択します。

  • ⑤シークレットのEnvironment variableを設定します。

  • Secret referenceを設定します。シークレット参照構文 を使用して、1Password シークレットを指定します。

  • Generate Pipeline Scriptを選択します。

Connect server

Jenkins パイプライン構文ヘルパーを使用して、Freestyle ジョブで Connect サーバーを使用します。

  • ①Jenkins の Freestyle ジョブから、Stepsセクションに移動します。

  • 1Password CLI pathを1Password CLI をインストールした場所に設定します。 サンプル スクリプトでは /usr/local/bin/opを使用します。

  • Connect Host をConnect サーバーの IP アドレスまたはホスト名に設定します。

  • Connect Credentialを Connect サーバー トークンに設定します。

  • Add a 1Password secretを選択します。

  • ⑥シークレットのEnvironment variableを設定します。

  • Secret referenceを設定します。シークレット参照を 使用して1Password シークレットを指定します。

  • Generate Pipeline Scriptの生Createを選択します。

Last updated