LoginSignup
14
14

More than 5 years have passed since last update.

Job DSL PluginによるJenkinsジョブのテンプレート化

Posted at

Jenkinsで似たようなジョブをテンプレートにする方法として、ここで取り上げる Job DSL Plugin の他にも、
Jobcopy Builder Plugin のような方法もある。

GroovyでDSLとしてジョブを定義できる点が気に入って、今回はJob DSL Pluginを採用したので、使い方を書き残す。

テンプレートDSLの作成

今回は、こんなジョブのテンプレートを作成する。

  • GitBucket上で管理したGitリポジトリからソースコードを取得する
  • ビルド、テストはGradleを使う
  • ジョブ名、リポジトリのURL、ビルド結果メールの送信先が可変要素

DSL作成時のポイント

  • プラグインの API Reference が充実しているため、そちらを参照しながら実装する
  • プラグインの Wiki には、使い方を中心としたドキュメントがあるため、そちらも参照する
  • 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のダッシュボードにジョブが生成されていることを確認する
14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14