LoginSignup
1
0

More than 3 years have passed since last update.

Jenkins+CapistranoでUser credentialをデプロイ先へ渡す

Posted at

Capistranoで実行元の環境変数をデプロイ先へ送るにはどうすれば良いか?

direnvAccess tokenをセットして使うなどはAWS CLIの常套手段だったりします。
また環境変数にUser credentialを保持させるのはわりとある手段です。

Credentialには username, password, access token, ... と沢山あります。
これをデプロイ先でも使いたい場合のお話です。

Jenkins User Handbookを読む

Jenkins User Handbook にドンピシャに書いてあったりします。

これでpipeline-stage-stepsの中で参照できます。

このセクションにはもうひとつのやり方が記述されています。
JenkinsにCredential情報を持たせることができますよね。(GUIで操作するヤツです)
アレを参照できるんです。

Usernames and passwords - Using a Jenkinsfile

ただちょっとトリッキーなので解説。

  1. hoge_credentialとして登録します
  2. Jenkinsfileに使うように指示を追加します。
  3. 参照する時
    • user: USER_CREDENTIAL_USR
    • password: USER_CREDENTIAL_PSW

Jenkinsfileのサンプル

Jenkinsfile
pipeline {
    environment {
        USER_CREDENTIAL = credentials('$hoge_credential')
    }
}

こうなります。

Capistranoから環境変数をリモートへ送る

Jenkinsfileの中で参照できましたのでCapistranoからもENVとして参照できます。

先程のUSER_CREDENTIALで書くと、

deploy.rb
namespace :deploy do
  tasks :sample-task do
    on roles(:app) do
      with hoge_user: ENV['USER_CREDENTIAL_USR'] do
        with hoge_passwd: ENV['USER_CREDENTIAL_PSW'] do
          capture(:echo, '--user=$HOGE_USER', '--password=$HOGE_PASSWD')
        end
      end
    end
  end
end

となります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0