テストを科学する

Jenkinsのプラグインのお話第二弾です。よろしければ、前回の記事と合わせてご覧ください。

Jenkinsのプラグイン開発の方法については本家のWikiが詳しいので、ここで全て解説はしません。
ただ、Jenkinsのソースコードは膨大ですので、ある機能を拡張したいときにどういう道筋をたどれば良いか分からなくなってしまうことがあるかと思います。今回は、実際にプラグインを作ったときの進め方を追いながらJenkinsの中を探検する方法を紹介したいと思います。

まず、作りたい機能を決めます。
今回の場合は、「古いビルドの破棄」機能を拡張してステータス指定のオプションを付けられるようにします。また、高度な設定では従来破棄されていた古いビルドに対しても間隔を指定して保存できるようにします。

では、この機能はどうすれば実現できるのでしょうか?
実際にJenkinsのソースコードで該当部分を見てみたいですが、このままではどこから調べれば良いかがちょっとわかりません。

そんなとき便利な方法は、ブラウザの言語設定を英語にしてみることです。JenkinsのUI上の文言は(多言語化対応されていれば)ブラウザの言語設定に合わせて変化しますので、設定を変えるとメニューの名前も英語になります。

「古いビルドの破棄」は「Discard Old Builds」になりましたので、これをヒントにソースコードを検索してみます。JenkinsのソースコードはGitHub上で公開されていますので、GitHubの検索機能を使ってみましょう。
検索窓に「Discard Old Builds repo:jenkinsci/jenkins」と入力し、検索対象を「Code」にするとJenkinsのコードの中から該当する箇所を検索することができます。

多言語化対応用のファイルが続きますが、しばらく見ていくとconfigure.jellyというファイルが見つかります。これが、JenkinsのJOBの設定画面を定義しているファイルです。

さらに、関連するJavaのコードを探します。少々強引ですが、ここではjellyファイルに書いてあるLogRotatorというのが怪しいのではないかと見当をつけて再度検索してみます。

それらしいファイルが見つかりましたので、Javaファイル本体を見てみます。確かに、ビルド履歴を削除しているらしきコードが見つかりましたのでこの部分を参考にできることがわかります。

では、この機能をそのまま拡張することは可能なのでしょうか?Jenkinsには拡張ポイントと呼ばれるプラグインで変更可能なポイントがいくつも定義されており、拡張ポイントとなっているクラスはExtensionPointインタフェースを実装しています。今回はどうやら拡張できなさそうということがわかりましたので、全くの別機能として組み込むことにします。

古いビルドの破棄はJobのビルドが終わったタイミングで行えば十分なので、「ビルド後の手順」として組み込むためにRecorderクラスをextendしたクラスを作成します。perform()メソッドで実際にビルドを破棄する処理を行いますが、ここで書く具体的な処理は先程のLogRotatorクラスを参考にすることができます。同様に画面側の処理を書くconfig.jellyも先ほど最初に検索したジョブ画面のconfigure.jellyを参考に作れば一通り動くプラグインの完成です。あとは、文言を多言語化したり単体テスト(重要です!)を書いたりして全体を整え、リリースします。

このように、既存コードや既存のプラグインから似ている処理を見つけることさえできれば後はサクサクとプラグインを作成することができます。

いかがでしたでしょうか?
今後も、このブログでは新しく作成したプラグインやJenkinsのTipsなどを随時お伝えしていきます。

弊社ではお客様の開発環境にJenkinsを導入し、CI環境を構築・運用するお手伝いをしています。Jenkinsには600を超えるプラグインがありますので大抵のことは実現できるのですが、時々お客様のご要望を直接解決できる機能が存在しないという場合もあります。
今回はそういった場面に際して新しいプラグインを作成して公開しましたので、ご紹介いたします。

ビルド履歴を適宜削除したい

リリース成果物を作ったり、テスト中に作成したキャプチャ画像を保存したりするようなジョブでは、Jenkinsサーバのディスク容量を圧迫しないために古いビルドを破棄したくなる場合があります。Jenkinsにはデフォルトで「古いビルドの破棄」という機能があり、「直近1週間以内のビルドだけを保持する」「直近15個のビルドだけを保持する」といった設定が可能です。

さらに、最新の成功ビルドに関しては無条件で保存されるようになっています。

「確実に使えるビルドを残しておく」という観点ですとこの機能は有効なのですが、テスト会社である弊社から見ますとどちらかと言えばテストに失敗したビルドを解析のために残しておきたいという場合があります。また、古いビルドを全部残しておく必要はないけれど頻度を落として少しは残しておきたいという場合もあります。

そんな要求に応えるために作ったのが「Discard Old Build plugin」です。

Discard Old Build pluginの内容

このプラグインをインストールすると、ジョブの設定画面の「ビルド後の手順」の中に「古いビルドの破棄」という項目が現れます。

最初の2項目はJenkinsのデフォルトの機能と全く同じで、ビルドを保存する日数と個数を設定することができます。新しく追加されているのはステータスを選ぶチェックボックスです。ここで何もチェックしなければすべてのステータスの履歴が、1つ以上チェックすればチェックされたステータスの履歴だけが保存されるようになります。

「高度な設定…」ボタンを押すと、さらに設定項目が追加で現れます。

ここでは、上の設定で「破棄」と判断された古いビルドのうちどれを残すかというポリシーを決めることができます。設定できる項目は
・ビルドの保存間隔(日数)
・ビルドの保存間隔(個数)
・保存するステータス
の3つです。

この設定と上の基本的な設定を組み合わせることで、以下のような設定が可能です。
【例1】
直近10個のビルドは必ず残し、それより古いものについては15ビルド毎に1個ずつ残す設定です。

【例2】
直近30日間のビルドは必ず残し、それよりも古いものについては不安定・失敗のビルドのみ残す設定です。

最後に

似たような機能を持つプラグインとして非常に高機能な「Build Keeper Plugin」がありますが、よりお手軽に&日本語で使えるものとして新しいプラグインを作成しご紹介しました。

Jenkinsのプラグインの機構はとても洗練されており、ほんの少しのコードを書くだけで簡単にプラグインを作成することができます。今回のプラグインも、Javaで書いたロジックは1クラスだけでした。ただ、既存のソースコードが膨大なので何かを変えようと思ったときにどんなコードを書けば良いのかを調べるのには少しコツがいります。
その辺りについて、次回の記事でご紹介したいと思います。

Jenkinsの生みの親である川口耕介さんが所属しているCloudBees社から、昨年後半に行われたJenkinsの利用状況調査の結果が公開されました。ユーザ数の増加状況、主な使用言語、要望の内容などが記載されていますので一部ご紹介します。

Jenkinsはいまや「開発に欠かせないツール」

「Jenkinsはあなたのチームの開発プロセスに必要不可欠なツールですか?」という問に対しては、実に83%のユーザが「Yes」と回答しています。Jenkinsは単なる開発補助ツールというだけではなく、開発の基幹システムとして活躍していることが分かります。

大企業での利用も増加

今回の調査に回答した721社のうち、従業員数が1000人を超える企業の割合は13.5%にのぼり、前回(2011年)の8%より大幅にアップしています。また、回答者の職種は依然として「開発者」がトップですが、「ビルドマネージャー」「アーキテクト」「QA」といった回答も目立ちます。
興味のある開発者がこっそりと使い始める「野良Jenkins」から、組織全体で使われるツールへとこの一年で変貌を遂げつつあると言えるのではないでしょうか。

インストール数ベースの調査でも昨年一年間で32,160インストールから53,393インストールと66%もの増加が確認されていますが、この大幅な増加の背景には大企業での利用の増加があるのかもしれません。

安定利用への強い要望

「今後のJenkinsの開発について優先度をつけてください」という質問では、ドキュメントやサンプルの充実・新たなプラグインの開発を抑えて「品質向上・タイムリーなバグ修正」という項目がトップに出ています。ここでも、Jenkinsが現在の開発プロセスの中で非常に重要な役割を果たしていることが伺えます。

その他にも、具体的にどのようなツールと組み合わせて使用しているかなど詳細な調査結果が公開されていますので興味のある方はぜひご覧ください。

 


※SHIFTは、CloudBees社と提携しJenkins Enterprise(有償版Jenkins)の販売代理店として、またCIの啓蒙活動のパートナーとして活動しています。

■Jenkinsまつりとは

Jenkinsの開発者でいらっしゃる川口耕介さんをご存知の方は多いと思いますが、実はSHIFTは川口さんが在籍されているCloudBees社と提携してJenkins Enterpriseという有償版Jenkinsの販売代理店をさせていただいています。そのご縁もあって、今回川口さんの来日に合わせて最初から最後までJenkinsづくし、むしろ川口さんづくしのイベント「Jenkinsまつり」を10月22日に開催いたしました。

このエントリーでは、Jenkinsまつりの動画をご紹介しつつ各パートに関して簡単なご紹介をしたいと思います。

■開催概要・まとめなど

■川口さんのご講演

普段様々な勉強会・セミナーで講演をされている川口さんですが、今回は少し目先を変えて海外でお仕事をされるようになったきっかけ、Jenkinsが生まれるまで、Jenkinsに対する想いなどを語って頂きました。

  • 前半

  • 後半

「福利厚生としてのオープンソース開発」のような名言も飛び出し、また川口さんのJenkinsに懸ける熱い想いが伝わる素晴らしいプレゼンでした。pluginによる機能追加を主体とすることで誰もが自由に機能を追加できる、誰でも一国一城の主になれる仕組みを作り開発者のモチベーションを上げるという流れはとても自然でうまい考え方だと感じました。

■パネルディスカッション「日本と欧米の開発スタイルについて」

事前に実施したアンケート結果を元に、ゲストの@oota_kenさん、@wadatkaさんにも加わって頂き昨今の開発事情に関してディスカッションを行いました。

  • 前半

  • 後半

事前アンケートの結果はこちらからご覧いただけます。

たくさんの話題が出たのでここでは一部しかご紹介できませんが、印象に残ったのは海外のSIerのお話です。これはご存知ない方も多かったと思うのですが、アメリカではSIerという存在がなく受入側の企業が要件定義をするのですがフランスなどその他の国では日本と同じくSIerが存在するそうです。中には納品のときにJenkinsも含めてまるごと納品するという企業もあるそうで、運用までフォローする素晴らしい取り組みだと感じました。

■Jenkinsのさらに高度な機能のご紹介

最後のパートでは、CloudBees社で開発されているJenkins Enterpriseの紹介を川口さんからしていただきました。Jenkins Enterpriseは、OSS版のJenkinsにエンジニアのサポートサービスと数々のEnterprise独自プラグインを加えたものです。Folder pluginやTemplates pluginなど、大規模開発を強力にサポートするプラグインをデモを交えて紹介していただきました。

  • 前半

  • 後半

会場のお客様にはJenkinsを利用されたことがない方も多く、そういった方にはかなり高度な内容となってしまったのですが普段から使い込んでいる方からは鋭い質問も出ていました。OSSである以上、有料版で提供しているのと似た内容のプラグインが無償で公開される場合ももちろんあります。CloudBeesでは、OSSのプラグインの動向も気にしつつ常に最先端の機能を提供するよう尽力されているようです。

■最後に

全体で4時間ほどの長時間のセミナーとなりましたが、沢山のお客様にお集まり頂きたいへん有意義な会となりました。また、出ずっぱりで大活躍してくださった川口さんにもこの場を借りて改めてお礼申し上げます。

今後も折に触れこのような場を設けていきたいと思います。

こんにちは、@nkns165です。SHIFTでCIなんでも屋さんとして働いています。
だいぶ日が空いてしまいましたが、10月19日にNTTデータさんで行われた第6回Jenkins勉強会に参加してきました。

これまで何度かイベントの受付等をお手伝いさせていただいていたのですが、
今回はLT発表の時間も頂いたので資料をご紹介します。

私は普段、Jenkinsを導入したことがない・もしくはインストールしたけれどあまり使い込んでいないというお客様のところにお邪魔してJenkinsを活用できる環境作りをお手伝いしています。沢山のお客様の声を聞く中で、放置されてしまいがちなパターン・うまく活用できているパターンについて思うところを少しだけお話しました。
とても短い資料ですが、ご一読頂けると嬉しいです。

今後も、イベントの情報・CIに関する技術的な情報をご紹介していきたいと思いますのでよろしくお願いいたします!

ソフトウェアテストに関するお悩みなど、まずはお気軽にお問い合わせください。

  • お問い合わせフォーム【お問い合わせはコチラ】
  • 電話でのお問い合わせ【0120-142-117】