.NET開発者中心 厳選ブログ記事

.NET開発者のためのJenkins入門
―― ブログ「present」より ――

t_nakamura
2011/11/17
2011/11/19 更新

「.NET開発者中心 厳選ブログ記事」シリーズでは、世界中にある膨大なブログ・コンテンツの中から、特にInsider.NET/.NET開発者中心の読者に有用だと考えられるブログ記事を編集部が発掘・厳選し、そのブログ記事を執筆したブロガーの許可の下、その全文を転載・翻訳しています。この活動により、.NET開発者のブログ文化の価値と質を高め、より一層の盛り上げに貢献することを目指しています。

本稿は、ブログ記事「present: .NET 開発者のための Jenkins 入門」に簡単な校正・加筆を行ったうえで転載したものです。

はじめに

 仕事でSubversionTracを使っていますが、残念ながら、「活用できている」とは言えません。「継続的インテグレーション(以下、CI)? 何それ、おいしいの?」という状態。そもそもCIするために、Tracなど、もろもろを導入したはずなんですけどね……。

 「CIを導入しなければ」と思い続けて結構な期間が経過しました。その間、定期的にリリース・ビルドを行っていたのですが、コミット忘れや修正し忘れにより、何度もビルド環境がぶっ壊されること(=正常にビルドが完了しなくなること)がありました……。そのたびに、問題となっているソース・コードを手作業で修正していたのですが、さすがに堪忍袋の緒が切れてCIの導入を開始しました。

 本稿は、あくまで、わたしの個別のケースでの使い方を説明しており、汎用的な用途での解説ではありません。汎用的な用途については、『Jenkins実践入門 〜ビルド・テスト・デプロイを自動化する技術(WEB+DB PRESS plusシリーズ)』という書籍が発売されているので、そちらを読むことをお勧めします。

CI導入で実現したいこと

 CI導入の目標として、ひとまず下記の事項が実現できればOKです。

  • Subversionのリポジトリを定期的に監視して、変更があったらビルドとテストを実行する
  • 失敗したら管理者にメールを送信する
  • ビルドをぶっ壊した人にメール送る

 そこで、CIツールは「Jenkins」、ソース・コード管理システムは「Subversion」、ビルド・システムは「MSBuild」を選択します。

Jenkinsの導入

 JenkinsとSubversionは、インストーラ・パッケージ「Trac Lightning」(旧称、Trac月)でインストールします。リンク先から「TracLightning-3.1.3.exe」などのファイルをダウンロードして実行します。起動したインストール・ウィザードの[コンポーネントの選択]ページで、「Javaアジャイルインストール(Trac+SVN+Maven+Jenkins)」を選択すれば、それらはインストールできます。

 わたしの場合は、Trac月からTrac Lightningへのアップグレードになったので、かなり苦労しました。興味がある方は下記の記事を読んでください。

MSBuildプラグイン導入

 JenkinsからMSBuildを呼び出せるようにします。MSBuildを呼び出すバッチ・ファイルを作成して、それをJenkinsから呼び出してもいいけど、せっかくMSBuildプラグインがあるので、それを利用させてもらいましょう。

 ビルド・サーバがインターネットにつながっている場合、Jenkinsのプラグイン・マネージャからMSBuildプラグインをインストールできます。今回はビルド・サーバがインターネットにつながっていないので、Jenkinsにプラグインをアップロードする方法でMSBuildプラグインを導入します。

 自分でMSBuildプラグイン(.hpiファイル)をソース・コードからビルドしてもいいですが、今回はネット上でダウンロードできる.hpiファイル(例えば「msbuild-1.7.hpi」)を拾ってきました。

MSBuildプラグインのインストール

 まずは、インストールしたJenkinsのサイトを表示します。[スタート]メニューから[すべてのプログラム]−[Trac]−[Jenkinsの起動]を実行すると。[Jenkinsの起動]というコマンド・プロンプトが立ち上がり、一連の起動処理が実行されます。その最初の方の実行内容で「C:\TracLight\jenkins>"java.exe" ……省略…… -jar jenkins.war --prefix=/jenkins ……省略…… --httpListenAddress=127.0.0.1 --httpPort=8010」のような出力が見られますが、その出力例で言えば「http://localhost:8010/jenkins/」というURLをWebブラウザで開けば、Jenkinsのサイトを表示できます。コマンド・プロンプトで「情報: Jenkins is fully up and running」と表示されて、すべての起動処理が完了したら(しばらく時間がかかります)、このURLを開きましょう。

 Jenkinsサイトで[Jenkinsの管理]−[プラグインの管理]−[高度な設定]を開いて、[プラグインのアップロード]フォーム(次の画面を参照)で先ほどダウンロードした.hpiファイルをアップロードします。

MSBuildプラグインのアップロード

 Jenkinsを再起動したら、プラグインが有効になります。再起動するには、[Jenkinsの起動]コマンド・プロンプトを閉じて、再度、開きます。

MSBuildプラグインの設定

 [Jenkinsの管理]−[システムの設定]から、[MSBuild追加]ボタンをクリックして、利用するMSBuildを登録します(次の画面を参照)。

MSBuildプラグインの設定

 この例では[MSBuild name]欄に「.NET Framework 4用」、[Path to MSBuild]欄に「C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe」を入力しています。最後にページ最下部にある[保存]ボタンをクリックするのを忘れないようにしてください。

 これでMSBuildプラグインの導入は完了です。

メール設定

 ビルド失敗時にメールを送信したいので、[Jenkinsの管理]−[システム設定]でSMTPサーバの指定をします(次の画面を参照)。

メール設定

 JenkinsをインストールしたサーバがSMTPサーバを兼ねている場合、[SMTPサーバー]欄は空欄でいいです。違う場合のみ指定します。

 最後に[保存]ボタンをクリックします。

ジョブを作成

 以上で設定は完了したので、ようやくジョブを作成します。

新規ジョブの作成

 Jenkinsサイトの左側にあるメニューから[新規ジョブ作成]をクリックすると、次の画面のような作成ページが表示されます。

 名前は一覧で見たときに「何をするジョブか」が分かる名前を付けます。今回はSampleプロジェクトの単体テストを行うので、「UnitTestSample」にしておきます。

 MSBuildやバッチ・ファイルを使うので、[フリースタイル・プロジェクトのビルド]を選択。最後に[OK]ボタンをクリックします。

新規ジョブの作成

プロジェクトのオプションを設定

 ワークスペース(Workspace)はそれなりに大きな容量を使うのですが、わたしの場合、Jenkinsをインストールしたドライブには空きが少ないので、別のドライブを使いたい。そこで、カスタム・ワークスペースを指定します。

 具体的には、新規ジョブ作成後のページで[高度な設定]ボタンをクリックして、次の画面のように[カスタムワークスペースの使用]チェックボックスにチェックを入れ、ワークスペースの作成先を入力します。

カスタム・ワークスペースの指定

 もちろんJenkinsインストール先のドライブに空きが十分にあるなら、この作業は不要です。

ソース・コード管理システムの設定

 同じく新規ジョブ作成後のページでSubversionリポジトリを指定します(当然ながら、Subversionのリポジトリは事前に作成しておきます)。

 具体的には、次の画面のように[ソースコード管理システム]グループの[Subversion]ラジオボタンを選択し、[リポジトリURL]欄にリポジトリのURL(この例では「http://testserver/svn/Sample/trunk」)を指定します。

ソース・コード管理システムの設定

 初めてジョブを作成される場合、リポジトリにアクセスするためのユーザー名とパスワードを聞かれるので、管理者のものを入力しておきます。

ビルド・トリガの設定

 1時間おきにリポジトリの変更をチェックするようにビルド・トリガを設定します。

 具体的には、次の画面のように[ビルド・トリガ]グループの[SCMをポーリング]チェックボックスにチェックを入れて、[スケジュール]欄に「0 * * * *」(=「毎時0分のスケジュール」を意味する)を入力します。

ビルド・トリガの設定

 スケジュールの指定方法はUNIX系OSのcronと同じです。右の[?]マークをクリックして、表示されるヘルプを読んでください。

ビルドの設定

 あらかじめ登録しておいたMSBuildを選択し、ビルドしたいソリューション・ファイルのパスを指定します。

 具体的には、[ビルド]グループの[ビルド手順の追加]コンボボックスから「Build a Visual Studio project or solution using MSBuild.」を選択し、[MsBuild Version]コンボボックスから「.NET Framework 4用」を選択(今回は「(Default)」を選択したままでもOK)、[MsBuild Build File]欄にVisual Studioソリューション・ファイル(.slnファイル)のパスを指定します。今回は特にコマンドライン引数を付けないので、[Command Line Arguments]欄は空欄のままで構いません。

ビルドしたいソリューション・ファイルのパスの指定

 また、ビルド後にMSTestコマンドを実行したいので、Windowsバッチ・コマンドを追加します。

 具体的には、再度、[ビルド手順の追加]コンボボックスから「Windowsバッチコマンドの実行」を選択し、[コマンド]欄に、MSTestを呼び出すコマンドを入力します(次の画面を参照)。

MSTestを呼び出すWindowsバッチ・コマンドの追加

 MSTestを呼び出すコマンドは、例えば下記のようになります。

rmdir /S /Q TestResults
mkdir TestResults
"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" /testcontainer:"SampleTest.dll" /resultsfile:TestResults\TestResults.trx
MSTestを呼び出すコマンドの例
上記で実施していることは、テスト・プロジェクトの.dllファイルをコマンド引数としてMSTestに渡しているだけです。

 MSTestの使い方はMSDNを参照してください。

ビルド後の設定

 ビルドに失敗したとき、ビルドを壊した人と管理者にメールを送るように設定します。

 具体的には、次の画面のように[ビルド後の処理]グループの[E-mail通知]チェックボックスにチェックを入れて、[宛先]欄に空白で区切って複数のメール・アドレスを入力します(この例では「user1@example.com user2@example.com」となっていますが、もちろんダミーです。実際には社内で使うメール・アドレスを入力してください)。さらに[ビルドを壊した個人にも別途メールを送信]チェックボックスにチェックを入れます。

ビルド後の設定

 最後に[保存]ボタンをクリックしてジョブ保存後に、左側のメニューから[ビルド実行]をクリックしてビルドを実行し、ビルドが成功すればCIの導入は完了です。

まとめ

 「Subversionのリポジトリからソース・コードをダウンロード」→「ビルド」→「テスト」の自動化が完成しました。ビルドに失敗したとき、ちゃんとメールが送られてきます。これでビルドが壊されて、リリース・ビルド時に大混乱することも少なくなりそうです。

 今回はビルドとテストを行うだけでしたが、MSTestのコード・カバレッジや、FxCopのコード解析の結果をレポートとして表示すると面白そうです(各リンク先は、Jenkinsでこれらを実現する方法を説明した解説記事です。こちらも併せて実施することをお勧めします)。ただし、MSTestのコード・カバレッジはVisual Studio 2010 Premium以上が必要です。

 Jenkinsを使えばいろいろとはかどりそうです。もちろんCruiseControl.NETなどでもいいですけどね。要は、さっさとCIを導入すればよかったということです。 End of Article

【筆者プロフィール】
t_nakamura

 Microsoft MVP for Visual C#。最近はHTML5やクラウドといったWebの最新テクノロジを追っています。


インデックス・ページヘ  「.NET開発者中心 厳選ブログ記事」

更新履歴
【2011/11/19】

 以下の内容を追記・修正しました。

追記 本稿は、あくまで、わたしの個別のケースでの使い方を説明しており、汎用的な用途での解説ではありません。汎用的な用途については、『Jenkins実践入門 〜ビルド・テスト・デプロイを自動化する技術(WEB+DB PRESS plusシリーズ)』という書籍が発売されているので、そちらを読むことをお勧めします。

追記 ビルド・サーバがインターネットにつながっている場合、Jenkinsのプラグイン・マネージャからMSBuildプラグインをインストールできます。今回はビルド・サーバがインターネットにつながっていないので、Jenkinsにプラグインをアップロードする方法でMSBuildプラグインを導入します。

スケジュールの指定方法が独特なので、
スケジュールの指定方法はUNIX系OSのcronと同じです。

追記 こちらも併せて実施することをお勧めします




Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH