はじめに
こんにちはSREエンジニアのMakiです。
この記事ではJenkins の設定をコード管理するやり方について紹介します。
Jenkinsのスクリプトのコード管理だけでなく設定自体もコード管理していきたいという方におすすめの記事となっております。
jobの設定もコード化しよう!
- 【Jenkins 】SCM(Source Control Management)を使ってスクリプトの管理をしてみよう。
https://tielec.blog/index.php/sre/ci-cd/jenkins/scm/ 
こちらの記事ではスクリプトのコード管理を行うやり方を説明しました。
ですが、Jenkinsのジョブはスクリプト部分だけでなく様々な設定部分が存在しています。
こうした設定部分もコードで管理することが可能です。
Jenkinsの設定は config.xmlというファイルに保存されます。
このファイルをコード管理してもよいのですがxmlなので管理にはつらいものがあります。
Jenkins は これを補うためにJob DSL という機能サポートしており、Groovyの形でジョブの定義ファイルを書きそれを読み込ませることで正規のconfig.xmlとして生成することができるようになっています。
Job DSLについてまずはこれを読もう
job DSL を使うには 公式のREADMEを見ながらやるのが一番近道だと思います。
- Jenkins Job DSL Plugin
https://github.com/jenkinsci/job-dsl-plugin
Job DSLの基本的な使い方が提示されています。最初に読むとよい。 - Job DSL Commands
https://github.com/jenkinsci/job-dsl-plugin/wiki/Job-DSL-Commands
Job DSLのよく使う構文が紹介されています。次に読むとよい。 - Jenkins Job DSL API
https://jenkinsci.github.io/job-dsl-plugin/
job DSLで使う構文の詳細なリファレンスです。実際に開発するときには必ず読もう。 
Job DSL を使って設定をコード化する。
- 【Jenkins】Pipelineジョブを使ってみよう ~ 基本編 ~
https://tielec.blog/index.php/sre/ci-cd/jenkins/pipeline-basic/
上記のパイプライン基本編で作ったジョブ題材に設定をコード化していきます。 
step1 JobDSL API から pipelineJob を探す。

step2 JobDSL APIを検索しながら設定内容をコード化していく
pipelineJob("development/sakamaki_y/kitten_image_generator_pipeline2") {
    description("猫の画像をダウンロードして保存するジョブ")
    keepDependencies(false)
    parameters {
        stringParam("KITTEN_IMAGE_FILE_NAME", "kitten-image.jpg", "保存する猫の画像のファイル名")
    }
    disabled(false)
    throttleConcurrentBuilds {
        maxPerNode(1)
        maxTotal(1)
        throttleDisabled(false)
    }
    logRotator {
        numToKeep(5)
        artifactNumToKeep(5)
    }
    definition {
        cpsScm {
            scm {
                git {
                    remote {
                        github("sakamaki-y123/jenkins-continuous-delivery", "https")
                    }
                    branch("*/master")
                }
            }
            scriptPath("pipeline/decrative-pipeline/pipeline_26_step_up_jenkins_basic_part.groovy")
        }
    }
}
step3 seedジョブを用意する。
seedジョブはJob DSLのスクリプトを読み込ませるためのジョブです。
フリースタイルジョブから作成します。
今回はkitten_image_generator_pipeline_seed という名前で作成します。
ビルドで Process Job DSLsを選んで先ほどのスクリプトを記載します。

step3 seedジョブを実行する。
ジョブの実行結果から生成されたジョブを確認することができます。

Job DSL のスクリプト自体もSCMで管理しましょう。
job DSLのスクリプトの動作確認ができたら、これもコード管理しましょう。
ジョブの設定はこうなります。

おまけ
XML Job to Job DSL Plugin というプラグインがあります。
これを使うと job DSLの自動生成を行うことができます。
ですが、精度は100%ではありません。
Google翻訳で英語から日本語に変換するくらいの精度だと思ってください。
使い方
- 
画面左から 
XML Job To DSLへと進む
 - 
DSLを作りたいジョブにチェックを入れる
kitten_image_generator_pipelineを選択してみます。
 - 
画面最下部の 
Convert selected to DSLを実行 
pipelineJob("kitten_image_generator_pipeline") {
    description("猫の画像をダウンロードして保存するジョブ")
    keepDependencies(false)
    parameters {
        stringParam("KITTEN_IMAGE_FILE_NAME", "kitten-image.jpg", "保存する猫の画像のファイル名")
    }
    disabled(false)
    logRotator("-1")
    definition {
        cpsScm {
            scriptPath("pipeline/decrative-pipeline/pipeline_26_step_up_jenkins_basic_part.groovy")
            scm {
                git {
                    remote {
                        github("sakamaki-y123/jenkins-continuous-delivery", "https")
                    }
                    branch("*/master")
                }
            }
        }
    }
    configure {
        it / 'properties' / 'com.coravy.hudson.plugins.github.GithubProjectProperty' {
            'projectUrl'('https://github.com/sakamaki-y123/jenkins-continuous-delivery/')
        }
    }
}
完璧なものができるわけではないですが、まあまあいい感じのものが出力されます。
これをベースに手直ししていく方がぶっちゃけ楽なんじゃないかと思っています。
が、これに頼りすぎると仕組みの理解ができなくなる恐れがあるので取り扱い注意です。
まとめ
いかがでしたでしょうか。改めて内容をまとめますと次のようになります。
1. Jenkins の設定をコード管理するには Job DSLを使う。
2. Job DSLの作成は公式のリファレンスを見ながら作成する。
3. 既存の設定をJob DSLに変換するプラグインもある。
はじめは少し大変かもしれませんが、設定もコード管理できるようになるとよりできることの幅が広がると思います。
是非使ってみてください。
関連ページ
- 
【Jenkins】Pipelineジョブを使ってみよう ~ 基本編 ~
https://tielec.blog/index.php/sre/ci-cd/jenkins/pipeline-basic/ - 
【Jenkins】Pipelineジョブを使ってみよう ~ 応用編 ~
https://tielec.blog/index.php/sre/ci-cd/jenkins/pipeline-advance/ - 
【Jenkins】SCM(Source Control Management)を使ってスクリプトの管理をしよう
https://tielec.blog/index.php/sre/ci-cd/jenkins/scm/ 
おすすめ書籍

[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
初めてJenkinsを学ぶ方におすすめです。

Jenkins
Jenkinsでできることについてもう少し詳しく学びたい方におすすめです。
 



コメント