1PasswordからJenkinsに秘密情報を読み込む
1Passwordマニュアル|Jenkins統合でシークレットを安全に管理。1Password Secretsプラグインで効率的なCI/CDパイプラインを実現します。
Last updated
1Passwordマニュアル|Jenkins統合でシークレットを安全に管理。1Password Secretsプラグインで効率的なCI/CDパイプラインを実現します。
Last updated
を使うとを使用して、1Password からシークレットを Jenkins CI/CD パイプラインの環境変数として安全に読み込むことができます。シークレット参照は 1Password と自動的に同期され、コード内のプレーンテキストのシークレットが公開されるリスクがなくなります。
プラグインは、またはを使用して認証できます。
情報
1Password Jenkins プラグインは、1Passwordによって公式にサポートおよび管理されています。コミュニティへの貢献は大歓迎です。GitHub
Jenkins 用の 1Password Secrets プラグインは、またはのいずれかで使用できます。サービス アカウントと Connect サーバーの両方を構成すると、Connect サーバーが優先されます。
サービスアカウント
1Passwordに
サーバーに接続
1Passwordに
。
Jenkins 用の 1Password Secrets プラグインを使い始めるには:
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を選択します。
Jenkins CLI tool
CLI ツールを使用して Jenkins 用の 1Password Secrets プラグインをインストールするには:
②次のコマンドを実行します。必ず1.0.0を正しいバージョンに置き換えてください。
$ jenkins-plugin-cli --plugins onepassword-secrets:1.0.0
Direct upload
直接アップロードを使用して Jenkins 用の 1Password Secrets プラグインをインストールするには:
②Jenkins ダッシュボードから、Manage Jenkins > Pluginsに移動します。
③Advancedタブを選択します。
④.hpiリリースからダウンロードしたファイルを選択します。
⑤Deployを選択します。
Jenkins 用の 1Password Secrets プラグインは 1Password CLI に依[Save]しています。Jenkins CI/CD パイプラインを実行するのと同じマシンに 1Password CLI をインストールする必要があります。
情報
同じパイプラインに 1Password CLI をインストールする場合は、プラグインを呼び出す前に 1Password CLI インストール スクリプトを追加する必要があります。
Jenkinsfile
Jenkinsfile を使用して 1Password CLI をインストールするには:
①Jenkins インスタンスにサインインします。
②New Itemを選択します。
③ジョブの詳細を入力し、Pipelineを選択します。
④ジョブの詳細を設定します。
⑤Advanced Project Options > Pipelineまでスクロールします。
⑥Pipeline scriptを選択します。
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 ジョブを使用して 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します。
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を設定します。
④Scopeを設定します。
⑤Secretをサービス アカウント トークンに設定します。
⑥IDとDescriptionは空のままにしておくことができます。
⑦Addを選択します。
Connect server
Jenkins の 1Password Secrets プラグインでサービス アカウントを使うには、Connect Host 値を指定し、少なくとも 1 つの Connect Credential を追加する必要があります。
①Connect Host をConnect サーバーの IP アドレス、ホスト名、または URL に設定します。
②Connect Credentialの下にあるAdd > Jenkinsを選択します。
③Domainを設定します。
⑤Scopeを設定します。
⑥SecretをConnect サーバー トークンに設定します。
⑦IDとDescriptionは空のままにしておくことができます。
⑧Addを選択します。
情報
Connect サーバーとサービス アカウントの両方を構成する場合、Connect サーバーが優先されます。
情報
同じパイプラインに 1Password CLI をインストールする場合は、プラグインを呼び出す前に 1Password CLI インストール スクリプトを追加する必要があります。
1Password CLI を別のパイプラインにインストールする場合は、構成でインストールを実行したワークスペースへの1Password CLI pathを設定する必要があります。
Jenkins 用の 1Password Secrets プラグインには、1Password CLI、Connect サーバー、およびサービス アカウントの構成オプションがあります。
設定
説明
ホストを接続
Connect サーバーのホスト名、IP アドレス、または URL。
接続資格情報
サービス アカウント認証情報
1Password CLI パス
1Password CLI実行ファイルへのパス。デフォルトの場所は/usr/local/bin/op
Jenkins の 1Password Secrets プラグインは、グローバル、フォルダーごと、またはジョブごとに設定できます。
レベル
説明
グローバル
グローバル レベルの構成は、全てのフォルダー内の全てのジョブに影響します。Jenkins の 1Password Secrets プラグインをグローバルに構成するには、それをグローバル構成に追加します。
フォルダ
フォルダー レベルの設定は、フォルダー内の全てのジョブに影響します。特定のフォルダーに対して Jenkins 用の 1Password Secrets プラグインを設定するには、それをフォルダー設定に追加します。
仕事
ジョブレベルの設定は、設定したジョブにのみ影響します。Jenkins の 1Password Secrets プラグインを単一のジョブに設定するには、Jenkinsfile または Freestyle ジョブでプラグインを設定します。
構成の優先度は、ジョブ レベルの構成では最も高く、グローバル構成では最も低くなります。レベルが具体的であるほど、優先度が高くなります。つまり、より広いレベルでデフォルト構成を設定し、より具体的なレベルでそれを上書きすることができます。
例えば、サービス アカウント (サービス アカウント A) をグローバルに構成したが、ジョブ レベルの構成で別のサービス アカウント (サービス アカウント B) で上書きした場合、ジョブは 2 番目のサービス アカウント (サービス アカウント B) を使用します。
情報
Connect サーバーとサービス アカウントの両方を構成する場合、Connect サーバーが優先されます。
次のセクションでは、Jenkins 用の 1Password Secrets プラグインのいくつかの使用例について説明します。
設定手順について...
Service account
Connect
connect-server-tokenを Connect サーバーのトークンに、connect-host をConnect サーバーの IP アドレスに、
Service account
withSecrets次の例は、1Password サービス アカウントを使用して Jenkinsfile で関数を使う方法を示しています。
Declarative Jenkinsfile
宣言型 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
スクリプト化された 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 パイプライン構文ヘルパー
ブロック内に環境変数を設定する必要がありますenvironment。次の表では、各環境変数について説明します。
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'
}
}
}
}
}
}
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を設定します。
⑦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を設定します。
⑧Generate Pipeline Scriptの生Createを選択します。
①
②
③
より詳細な手順については、を参照してください。
①従ってください。
①の1つをダウンロードする。
を参照してくださいより詳細な手順については、こちらをご覧ください。
使用して1Password CLIをインストールできますまたは、Freestyle ジョブを使用します。どちらの方法でも、1Password CLI を Jenkins の 1Password Secrets プラグインと同じパイプラインにインストールすることも、別のパイプラインにインストールすることもできます。
でインストールを実行したワークスペースへの1Password CLI パスを設定する必要があります。
⑦1Password CLI をインストールするためのコードをScriptフィールドに追加します。 宣言型またはスクリプト化されたを使用して、Jenkinsfileで1Password CLIをインストールできます。。
情報 次の例は、Linux amd64 マシンに 1Password CLI バージョン 2.24 をインストールする方法を示しています。サンプル スクリプトをプラットフォームに合わせて変更し、を使用してください。
フリースタイルジョブでは、ジョブレベルで設定とシークレットの両方を設定することはできません。1Password では、フリースタイルジョブではなく Jenkinsfile の使用を推奨しています。
③ Kind をSecret textに設定します。 プラグインはのみをサポートします。
④KindをSecret textに設定します。 プラグインはのみをサポートします。
構成とパイプライン スクリプトの例については、を参照してください。
次のセクションでは、使用可能な構成と構成について説明します。
Connectサーバーで認証するための。この設定は
サービスアカウントで認証するための。この設定は
withSecrets関数でを使用して、Jenkins パイプライン内のシークレットにアクセスできます。この関数は、1Password シークレットの設定とリストを受け取り、それらをパラメータとして読み込みます。次の例を調べて、さまざまなコンテキストでwithSecrets関数を使う方法を学習してください。
サービス アカウントと 1Password CLI を構成するための Jenkinsfile の先頭の構成はオプションです。構成を指定しない場合、1Password Secrets プラグインは使用します。
service-account-token をサービス アカウント トークンに、op-cli-path を1Password CLI をインストールしたパス (カスタムの場所を使用した場合) に置き換えてください。構成参照してください。
Jenkinsfile の先頭にある、Connect サーバーと 1Password CLI を構成するための構成はオプションです。構成を指定しない場合、1Password Secrets プラグインは使用します。
op-cli-path を1Password CLI をインストールしたパス (カスタムの場所を使用した場合) に置き換えてください。 を参照してください。
次のwithSecretsサービス アカウントで関数を使う方法を示します。最初に、秘密の値を保持するための環境変数を定義し、次にwithSecrets関数を使用して値にアクセスし、値を割り当てます。
次のwithSecretsサービス アカウントで関数を使う方法を示します。最初に、秘密の値を保持するための環境変数を定義し、次にwithSecrets関数を使用して値にアクセスし、値を割り当てます。
使用してパイプライン スクリプトをCreateすることもできます。
Jenkins用の1Password Secretsプラグインを使うと、設定とシークレットを取得します。次の例は、Jenkins の 1Password Secrets プラグインで環境変数を使う方法を示しています。
これらの環境変数を設定しない場合、1Password Secrets プラグインはを使用します。
Jenkins Pipeline構文ヘルパーを使用してFreestyle ジョブでシークレットにアクセスします。
⑥Secret referenceを設定します。を使用して、1Password シークレットを指定します。
⑦Secret referenceを設定します。使用して1Password シークレットを指定します。