Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

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

はじめに

全国の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で設定をコード管理することで属人化が多少は防げるのではないかなぁと思っております。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?