karakaram-blog

Jenkins2のPipelineとJenkinsfileで複数ブランチの自動テスト

 ツイート 1  シェア 0  Google+1 0  Hatena 3

Jenkins2 JenkinsfileとPipelineで複数日ランチの自動テスト

前回は Jenkins2でジョブごとに権限を設定する 方法を紹介しました。

クラウドの CI ツールの利用が当たり前になってきましたが、大人の事情でまだまだ活躍の場が多い Jenkins。今回は Jenkins2 になって追加された「Jenkinsfile」と「Pipeline」の使い方を紹介します。

目次

  1. Jenkinsfile で何ができるか
  2. Pipeline の Hello World を試してみる
  3. もう少し複雑なサンプルを見てみる
  4. Snippet Generator で Pipeline のコードを生成
  5. Pipeline script サンプル
  6. Multibranch Pipeline で複数ブランチの自動テスト

Jenkinsfile で何ができるか

Jenkinsfile を使うと、「ブランチを作成して push した後、そのブランチに対してすぐにビルドを走らせる」ことができるようになります。これは Jenkins1 系でこれをやろうとすると、ブランチを作った後に毎回 Job を作る必要がありました。ブランチがマージされたら Job を消す必要もありました。Jenkins ファイルでこれらの手間から開放されます。

Pipeline の Hello World を試してみる

では Jenkinsfile を実際に作ってみます。まずは Pipeline の Hello World から。

新規ジョブ作成から「Pipeline」を選びます。ジョブの設定画面に移ったら、下のほうに「Pipeline」の項目があるので、try sample Pipeline… のプルダウンから「Hello World」を選択します。Script にコードが展開されるので、ジョブを保存します。

jenkins2 pipeline Hello World

保存したジョブを実行すると。Pipeline script の stage ごとに結果が分かれて出力されます。ブロックをクリックすると詳細なログを見ることができます。

Jenkins2 Pipeline 実行結果

もう少し複雑なサンプルを見てみる

もうひとつのサンプルを見てみましょう。ジョブ設定に戻って try sample Pipeline… のプルダウンから「GitHub + Maven」を選びます。

Jenkins2 Pipeline github maven

Github から clone して、mvn clean install を実行する Pipeline script のようです。やろうとしていることは理解できますが、Pipeline script は Groovy で書く必要があり、独自のルールがありそうです。私は、この先ジョブをどう書けばいいか困ってしまいました。チュートリアル的なものをやってみたい。マニュアルはどこだろう・・・。

Snippet Generator で Pipeline のコードを生成

上の画像の Pipeline script の左下に目をやると「Pipeline Syntax」のリンクが。おもむろにクリックすると、Snippet Generator なるものが開きました。どうやら Pipeline script を生成するツールのようです。これは良さそう。さっそく使ってみます。

とりあえず Github から clone したかったので、「Sample Step」のプルダウンで「git」を選択、リポジトリやブランチを入力して「Generate Groovy」ボタンをクリックすると、Pipeline script が生成されます。

Jenkins2 Pipeline Generator

生成されたコードをコピーして、元のジョブの Pipeline script に貼り付ければ OK です。私は Groovy はよく分かりませんが、この Generator のおかげでほとんど困らずに Pipeline script を作ることができています。

ドキュメントへのリンクも
Snippet Generator の左側のメニューには Pipeline script のドキュメントもあるので、困ったら見てみましょう。

Pipeline script サンプル

初めて書いてみた Pipeline script がこれ。Symfony Console を git clone して composer install で依存パッケージをインストールして phpunit でテスト実行してます。

node {
   stage 'git clone'
   git 'https://github.com/symfony/console.git'

   stage 'composer install'
   sh 'composer install'

   stage 'phpunit'
   sh 'phpunit -c phpunit.xml.dist'
}

実行結果。phpunit のところで失敗しています。右下に小さく failure と出てますね。step ごとにログが別れて出力されるので、どこで止まったか分かりやすいです。

Jenkins2 Pipeline 結果 失敗

Multibranch Pipeline で複数ブランチの自動テスト

上記の Pipeline script を Jenkinsfile という名前でプロジェクトのルートディレクトリに保存し、コミット、プッシュします。

新規ジョブ作成から「Multibranch Pipeline」を選び、ジョブの設定画面で、Jenkinsfile がコミットされているリポジトリを選択して保存します。

すると、Jenkinsfile が入っているブランチを探してきて、ブランチごとに Pipeline script を実行してくれます。

Jenkins2 Multibranch Pipeline 結果

ジョブ設定のビルド・トリガを設定しておくと、変更があったブランチに対してジョブを自動で走らせることができます。スケジュール実行でもいいですが、「リモートからビルド」に設定して、git サーバから通知を送るようにしておくのがエコでいいと思います。保険で「Periodically if not otherwise run」を 4 時間くらいに設定しておけばより良いでしょう。

Jenkins2 Multibranch pipeline build trigger

まとめ

3 回にわたって紹介してきた Jenkins2 の構築ですが、今回でいったん終わりです。Jenkins2 は後方互換性が 100% 保証されているみたいなので、まだ更新されていない方はぜひ試してみてください。

 ツイート 1  シェア 0  Google+1 0  Hatena 3