Jenkinsジョブを管理するのが辛くなって今更ながらJenkisfile(Jenkins Pipeline)に手を出してみた。
Jenkinsfileとは
- JenkinsのPipelineという仕組みを使ってジョブをコード化するためのファイル
- groovyで記載する。
-
Declarative Pipeline
とScripted Pipeline
という2つの種類がある-
Declarative Pipeline
はジョブ設定(カスタムワークスペースの場所とか)+ジョブの内容が書ける -
Scripted Pipeline
はスクリプトチックに書ける
-
Declarative Pipeline
の中でScripted Pipeline
の書き方もできるので、基本的にはDeclarative Pipeline
で書いたほうが良い。
Jenkinsfileサンプル
#!groovy
pipeline {
// 実行ノードの設定。ここでdockerとか指定できる。
agent any
// ジョブ設定。実行タイミングとかも設定できる。
options {
retry(3)
}
// ジョブの内容
stages {
stage('checkout') {
steps {
checkout scm
}
}
stage('build') {
steps {
// ビルド処理
echo 'hello'
}
}
}
// 終了処理
post {
// 必ず実行
always {
deleteDir()
}
// ジョブ成功時のみ
success {
slackSend color: "good", message: "${env.JOB_NAME} - #${env.BUILD_NUMBER} ${currentBuild.durationString} (<${env.BUILD_URL}|Open>)"
}
// ジョブ失敗時のみ
failure {
slackSend color: "danger", message: "${env.JOB_NAME} - #${env.BUILD_NUMBER} ${currentBuild.durationString} (<${env.BUILD_URL}|Open>)"
}
// 前回のジョブと結果が違う場合(成功 -> 失敗)とかの処理も設定できる
}
}
// ここに関数とか定義して使うもよし
Jenkinsfileの管理
個人的には以下のような管理をしている
管理方法 | 対象 |
---|---|
ソースのリポジトリ内で一緒に管理 | リソースがリポジトリ内で完結しているジョブ |
ジョブ専用のリポジトリを作って管理 | 複数の成果物を使用するジョブ |
入れた方が良いプラグイン
プラグイン | 概要 |
---|---|
Blue Ocean | 見た目をかっこよくしてくれるやつ。これ入れたら必要なのほとんど入る |
File Operations | ファイル操作系の便利関数を提供してる |
使ってみた感想
- Jenkinsサーバーのお引越しやソースコード管理システムのお引越しが発生したときにめちゃ楽。
- プラグインの恩恵がでかい。
BitBucket Team/Project
ジョブを作るだけでプロジェクト配下全部のリポジトリのジョブ勝手に作ってくれるので、手動で作るジョブの数が激減。(GitHub Organization
ジョブも多分おんなじ感じだと思う。) - Jenkinsfileデバッグ用ジョブ作らないと無駄コミットが発生しまくる
- ビルド環境もdocker使ってコード化したほうが良い(ジョブよりもビルド環境のほうが暗黙知が多い)