【Jenkins】jobの設定もコード化しよう!

CI/CD
https://jenkins.io/

はじめに

こんにちはSREエンジニアのMakiです。
この記事ではJenkins の設定をコード管理するやり方について紹介します。
Jenkinsのスクリプトのコード管理だけでなく設定自体もコード管理していきたいという方におすすめの記事となっております。

jobの設定もコード化しよう!

こちらの記事ではスクリプトのコード管理を行うやり方を説明しました。

ですが、Jenkinsのジョブはスクリプト部分だけでなく様々な設定部分が存在しています。
こうした設定部分もコードで管理することが可能です。
Jenkinsの設定は config.xmlというファイルに保存されます。
このファイルをコード管理してもよいのですがxmlなので管理にはつらいものがあります。

Jenkins は これを補うためにJob DSL という機能サポートしており、Groovyの形でジョブの定義ファイルを書きそれを読み込ませることで正規のconfig.xmlとして生成することができるようになっています。

Job DSLについてまずはこれを読もう

job DSL を使うには 公式のREADMEを見ながらやるのが一番近道だと思います。

Job DSL を使って設定をコード化する。

step1 JobDSL API から pipelineJob を探す。

dsl1

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を選んで先ほどのスクリプトを記載します。

dsl2

step3 seedジョブを実行する。

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

Job DSL のスクリプト自体もSCMで管理しましょう。

job DSLのスクリプトの動作確認ができたら、これもコード管理しましょう。

ジョブの設定はこうなります。
dsl4

おまけ

XML Job to Job DSL Plugin というプラグインがあります。
これを使うと job DSLの自動生成を行うことができます。
ですが、精度は100%ではありません。
Google翻訳で英語から日本語に変換するくらいの精度だと思ってください。

使い方

  • 画面左から XML Job To DSL へと進む
    dsl5

  • DSLを作りたいジョブにチェックを入れる
    kitten_image_generator_pipeline を選択してみます。
    dsl6

  • 画面最下部の 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に変換するプラグインもある。

はじめは少し大変かもしれませんが、設定もコード管理できるようになるとよりできることの幅が広がると思います。
是非使ってみてください。

関連ページ

おすすめ書籍


[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

初めてJenkinsを学ぶ方におすすめです。


Jenkins

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


◆ Twitterで最新情報を配信していきます。フォローお願いします。

◆無料でLINE@にて最新情報を配信していきます。登録お願いします。
友だち追加

◆SREに関する相談や質問を受け付けております。
問い合わせ

コメント

タイトルとURLをコピーしました