Jenkinsで似たようなジョブをテンプレートにする方法として、ここで取り上げる Job DSL Plugin の他にも、
Jobcopy Builder Plugin のような方法もある。
GroovyでDSLとしてジョブを定義できる点が気に入って、今回はJob DSL Pluginを採用したので、使い方を書き残す。
テンプレートDSLの作成
今回は、こんなジョブのテンプレートを作成する。
- GitBucket上で管理したGitリポジトリからソースコードを取得する
- ビルド、テストはGradleを使う
- ジョブ名、リポジトリのURL、ビルド結果メールの送信先が可変要素
DSL作成時のポイント
- プラグインの API Reference が充実しているため、そちらを参照しながら実装する
- プラグインの Wiki には、使い方を中心としたドキュメントがあるため、そちらも参照する
- 特に、 ローカルで開発する方法 を使うと、実装が早い
- プラグインに存在しない設定項目は、 Configure block を用いる
- Groovyスクリプトのファイル名には英数字とドット、アンダースコアしか使えない。ハイフンを用いるとビルドエラーになることに注意。
- 実際にやった…
DSL例
Groovyで以下のようなスクリプトを記述し、Git管理させておく。
// 全て大文字の識別子はJenkinsのジョブパラメータとして定義する前提
job(DSL_PROJECT_NAME) {
// リポジトリの設定
scm {
git {
remote {
url(DSL_GITBUCKET_REPO_URL)
credentials(DSL_CREDENTAILS)
}
branch('*/develop')
}
}
// ビルドのステップ
steps {
gradle {
switches('--refresh-dependencies')
tasks('clean')
tasks('build')
gradleName('Gradle 2.10')
useWrapper(false)
makeExecutable(true)
useWorkspaceAsHome(false)
}
}
// ビルド後の処理
publishers {
// JUnitテスト結果の集計
archiveJunit('**/build/test-results/*.xml') {
allowEmptyResults(false)
}
// Email-ext pluginに送信先とトリガーを設定
extendedEmail {
recipientList('$DEFAULT_RECIPIENTS')
triggers {
aborted { recipientList(DSL_NOTIFY_LIST) }
failure { recipientList(DSL_NOTIFY_LIST) }
unstable { recipientList(DSL_NOTIFY_LIST) }
}
}
}
// ここからDSLにAPIがない設定
configure { project ->
// GitBucketへのpushをビルドトリガーにする
project / triggers << 'org.jenkinsci.plugins.gitbucket.GitBucketPushTrigger' {
passThroughGitCommit(false)
}
// GitBucketのリポジトリURL(GitリポジトリURLではない)
project / 'properties' / 'org.jenkinsci.plugins.gitbucket.GitBucketProjectProperty' {
url(DSL_GITBUCKET_URL)
linkEnabled(true)
}
// ビルドの履歴を10個までしか保持しない
project / 'properties' / 'jenkins.model.BuildDiscarderProperty' {
strategy {
daysToKeep(-1)
numToKeep(10)
artifactDaysToKeep(-1)
artifactNumToKeep(10)
}
}
// JUnitテスト結果集計の空模様
project / publishers / 'hudson.tasks.junit.JUnitResultArchiver' << {
healthScaleFactor('1.0')
}
}
}
Jenkinsの設定
DSLが作成できたら、ジョブ生成の元になるジョブ seed job を作成する。
-
Jenkinsで 新規ジョブ作成 を選択し、ジョブ名を記入した上でフリースタイルのジョブとして登録
-
以下のようにジョブを設定
-
Git管理している場合は、ソースコード管理パートにて、通常のJenkinsジョブと同様の設定をする
-
DSLに対するパラメータがある場合は、 ビルドのパラメータ化 を選択し、パラメータを追加する
- DSL内では、パラメータの 名前 で直接参照可能
- パラメータの種類を 認証情報パラメータ にしておくことで、Gitへの認証をDSL内に書く必要がなくなるため推奨
-
ビルドパートにて、 ビルド手順の追加 -> Process Job DSLs を選択
-
Look on Filesystem DSL Scripts を選択し、Gitリポジトリ上のファイル名をワークスペースからの相対パスで記述
- 例:app_job_seed.groovy
-
保存ボタンを押下
-
ジョブの生成
- seed jobにて、 パラメータ付きビルド を押下することで、パラメータ入力と実行ができる
- 正常終了後、Jenkinsのダッシュボードにジョブが生成されていることを確認する