LoginSignup
2

More than 3 years have passed since last update.

Jenkinsのcredentialsをコードで更新する方法

Last updated at Posted at 2019-12-04

はじめに

全国のJenkinsおじさんの皆様、こんにちは。
ちょっとJenkinsいじってる系SREエンジニアをやっている@hayaosatoです。

Jenkinsあるあるなのが、Jenkinsおじさんと呼ばれるように属人化してしまうことだと思います。
なぜ属人化するのか、その理由の一つに「Jenkinsでの設定のほとんどがGUIで操作できるから」があるのではないかなと個人的に思っています。

しかし、Jenkinsの設定のほとんどはコード管理することができます。
その中で、今回はcredential情報の管理について書いていこうと思います。

Jenkinsの起動時実行スクリプト

Jenkinsでは、$JENKINS_HOME/init.groovy.d/配下に配置したgroovyスクリプトはJenkinsの起動時に自動的に読み込まれます。
今回はそのJenkinsの起動に実行されるスクリプトでcredentialsの登録をしたいと思います。

credentialsの登録

credential情報として、以下のようなパスワード一覧のtextファイルを配置します。

/path/to/credentials.txt
slack-api-token: xxxxxxxxxx: slackのAPIトークンだよ
パスワード1: xxxxxxxx: xxxのパスワードだよ
import jenkins.model.*
import com.cloudbees.plugins.credentials.*
import com.cloudbees.plugins.credentials.domains.*
import com.cloudbees.plugins.credentials.impl.*
import org.jenkinsci.plugins.plaincredentials.*
import org.jenkinsci.plugins.plaincredentials.impl.*
import hudson.util.Secret
import java.io.BufferedReader
import java.io.FileNotFoundException
import java.io.FileReader
import java.io.IOException
def domain = Domain.global()
def store = Jenkins.instance.getExtensionList("com.cloudbees.plugins.credentials.SystemCredentialsProvider")[0].getStore()
def f = new File("/path/to/credentials.txt") // Jenkins(再)起動前に配置すること。
f.eachLine { line ->
    def secrets = line.split(":")
    def secretId = secrets[0].replaceAll(' ', '')
    def secretPass = secrets[1].replaceAll(' ', '')
    def description = secrets[2].replaceAll(' ', '')
    def secretText = new StringCredentialsImpl(
        CredentialsScope.GLOBAL,
        secretId,
        description,
        Secret.fromString(secretPass)
    )
    store.addCredentials(domain, secretText)
}

groovyファイルで、このようにcredentialsのファイルを読み込んで、一つずつcredentialとして登録していくことができます。また、後ろの説明も登録することができます。
一度読み込んだらJenkinsを再起動してもcredentialは消えることはないので、一度読み込んだら消すことをお勧めします。

最後に

最近ではGitHubActionsなど、Saasのビルドツールが流行っていますが、セキュリティ上の理由などからまだまだJenkinsは活躍すると思います。
その際にJenkinsおじさんに頼りきってしまうのではなく、IaCで設定をコード管理することで属人化が多少は防げるのではないかなぁと思っております。

参考

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
2