第2回 MySQL ConnectorでDBに接続連載:MonoでOSSなASP.NET MVCアプリ(3/3 ページ)

» 2013年07月23日 12時31分 公開
[井口圭一,HEROZ株式会社]
前のページへ 1|2|3       

Jenkinsで継続的インテグレーション(CI: Continuous Integration)

 MonoによってVisual Studioで作成したアプリがほぼそのままLinux上で動作できるとはいえ、ファイル・パスやライブラリのバージョンなどによって、挙動に差異も発生し得る。そういった差異による動作不具合をなるべく防ぎ、発生しても手戻りを小さくするためには、小まめにLinux上で動作確認をするのが一番だ。だからといって、そのたびにサーバにデプロイしていたのでは、効率が悪い。そのような問題を解決してくれるのが、継続的インテグレーション・ツールだ。

 継続的インテグレーション・ツールは、定期的に(もしくは、バージョン管理ツールを使っている場合はコミットしたタイミングで)、最新版のソースを自動的にビルド&テストし、その結果を報告してくれる。本稿で使用するJenkinsは、Javaで作成された継続的インテグレーション・ツールだが、ビルド・コマンドを指定できるので、Mono環境でも問題なくビルド可能だ。

Monoでコンパイル

 Jenkinsにビルド・コマンドを設定する前に、Monoにより手動でビルドできることを確認しておこう。

 Monoでは、xbuildコマンドを使用することで、Visual Studioのプロジェクト・ファイルやソリューション・ファイルをビルドすることができる。ただ、残念ながらそのままでは最新のVisual Studio 2012のプロジェクトをビルドできないので、少々細工が必要となる。まずは次のコマンドを実行してほしい。

# ln -s  /usr/local/lib/mono/xbuild/Microsoft/VisualStudio/v9.0 /usr/local/lib/mono/xbuild/Microsoft/VisualStudio/v10.0


xbuildコマンドのv9.0用の設定をv10.0にリンクするためのコマンド例

 一度、v9.0用の設定をv10.0にコピー(厳密にはリンク)してやることで、取りあえずビルドは通るようになる。もちろん正式な対応ではないし、これによってどのような弊害が出るかも分からないので、早い正式対応を待ちたいところだ。環境さえ整えば、次のコマンド例のようにプロジェクト・ファイルを指定することで、ビルドが行える。

# /usr/local/bin/xbuild sampleapp2.csproj


プロジェクト・ファイルを指定してビルドが行うためのコマンド

Jenkinsの設定

 Mono環境でのビルドが確認できたら、実際にJenkinsをインストールして設定してみよう。Jenkinsは活発に更新されているので、最新版はプロジェクトのページを確認してほしい。本稿では以下のコマンドを実行した。

yum install java-1.7.0-openjdk
wget http://pkg.jenkins-ci.org/redhat/jenkins-1.514-1.1.noarch.rpm
rpm -i jenkins-1.514-1.1.noarch.rpm
service jenkins start


Javaをインストールし、さらにJenkinsのダウンロード&インストール&サービス起動を行うためのコマンド

 上記のコマンドの実行が完了すると、サーバの8080ポート(つまり「http://〜:8080/」)でJenkinsが起動するはずだ。

 Jenkinsのダッシュボードが表示できたら、[新規ジョブ作成]でMonoアプリを登録してみよう(参考:「.NET開発者のためのJenkins入門」)。本稿の例では「sampleapp」というジョブを作成した。

 ソース・コード管理などは使用している環境に合わせて設定してほしい。特に使っていなければ、「なし」として設定すればよい。本稿の例では「Subversion」を設定した。

 Monoでビルドする場合は、[ビルド手順の追加]から「シェルの実行」を選択する。ここで、上記のxbuildコマンドを実行するスクリプトを指定すればよい。筆者の環境では、下記のpost-commitスクリプトを作成して、Subversionのコミットがあると、(下記のスクリプトが実行されることにより)Jenkinsが動き出すように設定している。

#!/bin/sh
/usr/bin/wget http://localhost/jenkins/job/sampleapp/polling -O /dev/null -q >> /tmp/nc_postcommit.log


Subversion側で実行するpost-commitスクリプト
このスクリプトでは、Jenkins上の「sampleapp」ジョブのSCMポーリングのREST APIにGETアクセスして、取得した内容は切り捨てたうえで、ログ出力をしている。

 上記のスクリプトが実行されることにより、下記の「ビルド&デプロイ&テストを実施するスクリプト」がJenkinsによって実行される。

#!/bin/sh

# ビルド
cd /var/lib/jenkins/jobs/sampleapp/workspace/trunk
/usr/local/bin/xbuild /property:DEBUG=0 sampleapp2.csproj
if [ $? -gt 0 ]; then exit 1; fi

# ビルド結果をApacheにデプロイ
echo Deploying...
cd /var/lib/jenkins/jobs/sampleapp/workspace/trunk
cp -r sampleapp/bin sampleapp/Views sampleapp/Contents sampleapp/Global.asax /var/www/sampleapp
echo Waiting for reload...
sleep 3

# Homeページにアクセスできるかテスト
echo Testing...
export baseUrl="http://localhost/sampleapp";

wget -O /dev/null "$baseUrl/Home"
if [ $? -gt 0 ]; then exit 1; fi

echo Done.


Jenkins側でxbuildコマンドを実行するbuild.shスクリプト

 ここからさらにテスト項目を充実させることで、デグレードを避けながら開発を進めるための環境を構築できる。Jenkinsに限らず、テスト系なども含めて豊富なツール類を柔軟に組み合わせて環境を構築できることもMonoを利用するメリットになるのではないだろうか。


 以上、MonoとMySQL Connectorというオープンソース環境を駆使して、Linux上に本格的なASP.NET MVCアプリを運用する方法を、前後編に分けて解説した。特にLinuxサーバを運用しているが、.NETが得意な開発者がいる会社には、本稿の手法は勧めである。そのような方に本稿の内容が一助となれば幸いだ。

「連載:MonoでOSSなASP.NET MVCアプリ」のインデックス

連載:MonoでOSSなASP.NET MVCアプリ

前のページへ 1|2|3       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。