はじめに
こんにちは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でできることについてもう少し詳しく学びたい方におすすめです。
コメント