ASP.NET Web アプリケーションの継続的インテグレーションとデプロイ自動化 #aspnetjp #dotnetjp


【 この記事は、389人に読まれています】

このエントリーをはてなブックマークに追加
 

ASP.NET Web アプリケーションの継続的インテグレーションとデプロイは、実は結構洗練されています。ただ、あまり触れられることが多くないのと、いまだに Visual Studio からの手動でのデプロイ (発行) をやっているのか・・・。なので、ここで一つのやり方を載せておきたいと思います。

ASP.NET では、デプロイに Web Deploy (MSDeploy) を使うケースが一般的ではないでしょうか。ほかにもいろいろな方法があるのですが、これが一番リーズナブルだと思います。特に、Web Deploy パッケージ化は、デプロイするための要素を ZIP アーカイブし、それを使いデプロイできるのでお勧めです。

 

ASP.NET の継続的インテグレーション

 

ASP.NET の継続的インテグレーションでは、必ずテスト プロジェクトも作成し、テストをしっかりと書きましょう。Visual Studio 2013 では、ASP.NET Web アプリケーションのプロジェクトを作成時に、テスト プロジェクトも一緒に作ることができるのでそれも利用しましょう。

ここでは、Atlassian Bamboo を使ってシンプルな構成で継続的インテグレーションを行う方法を示します。

Bamboo での ASP.NET アプリの設定方法

image
継続的インテグレーションでは、対象となるコードが格納されたバージョン管理システム (VCS) のリポジトリからコードを取得するのが基本になります。Bamboo では、あらかじめこのタスクが Defalut Job に含まれていますので、設定で取得先を選択してあげるだけで済みます。

次に、取得したコードをビルドすることになります。Bamboo では、ASP.NET のビルドを行うためのタスクを2種類用意しています。アドオンの適用など不要です。

image
「MSBuild」を選択することで、MSBuild を実行することができます。

image
もしくは、「Visual Studio」を用いることで、devenv を使ったビルドを実行することができます。

さて、Bamboo では、ビルド環境 (エージェント) にて利用できる Visual Studio や MSBuild のバージョンやそれらの場所を自動認識してくれます。

image
上図は、私のデモ環境で自動認識して設定されているものです。これがあるため先述のタスクとして「Visual Studio」を選んだ場合は、以下のように必要最小限の項目を入力するだけでビルドを実行することができるようになります。

image
Executable に Visual Studio がバージョンごとにしっかりと識別されていて選択が可能になっていることがわかります。また、Platform にて、アーキテクチャを指定することができます。

MSBuild の場合は、以下のようなタスクの設定となります。

image
今回は、こちらの MSBuild での継続的インテグレーションをやりたいと思います。まず、MSBuild のバージョンを含めて指定します。今回は、Visual Studio 2013 付属の MSBuild にしています。

Project File にてソリューションを入力しています。Bamboo 独自の変数が使えるため、以下のように入力すればいいです。

${bamboo.build.working.directory}\ReWorkstyle\ReWorkstyle.sln

${Bamboo.build.working.directory} が変数です。VCS からコードを取得するディレクトリとなりますので、そこからのパスを考慮してその先を記述すれば OK です。

次に、Options の設定です。ここがポイントになります。今回は、ビルド後に、Web Deploy パッケージを作りたいので、それに応じたオプションを設定しています。

/t:Build /p:Configuration=”Release” /p:DeployOnBuild=true

/t で実行する Target を指定し、/p で各種のプロパティを設定しています。

“Configuration” は、Debug や、Release を指定します。”DeployOnBuild” は、ビルド時に Web Deploy パッケージを作成するプロパティです。これを true にしておきましょう。

この指定を行うことで、ビルド時に、ASP.NET のプロジェクト下の obj\Relase\Package にデプロイに必要なファイルが生成されます。

image
これで、ASP.NET のビルドは OK です。実にシンプルな指定で行えるのがわかりますね。

次に、テストの実行を見ていきます。ビルド後のタスクとしてテストの実行を追加します。

image
タスクとして、「MSTestRunner」「NUnit Runner」があります。これらを使うことでテストを実行することができてしまいます。今回は、MSTestRunnerで見ていきましょう。

image
ここでも、エージェントで起動可能な Visual Studio のバージョンが自動認識されているのがわかります。今回はこれを使います。

設定する箇所は、どのテストアセンブリを実行してテストするかを入力する、ただそれだけです。

ReWorkstyle\ReWorkstyle.Web.Tests\bin\Release\ReWorkstyle.Web.Tests.dll

これですみます。あとは、特定のテストだけを実行したいといった場合は、テストメタデータも入力してください。

ちなみに、上記でビルドの際は、Bamboo の変数を使って書きましたが、テストアセンブリの指定のように、ビルド作業用ディレクトからのパスだけ書いてもきちんとワークします。

たったこれだけで、ASP.NET アプリの継続的インテグレーションが行えてしまいます。

 

Bamboo での継続的インテグレーションの実施結果

 

結果は、ブラウザで見ることができます。

image
テスト結果もこのように一件一件の結果で見ることができます。この結果を踏まえて JIRA と連携していれば、バグを起票したりすることもできます。

image
ビルド成果物にもアクセスできます。これ以外にも、VCS でのコミット履歴、このビルドに含まれるバグやタスク (JIRA との連携)、もちろん、ビルドログも見ることができます。

 

ASP.NET の自動デプロイ

 

ASP.NET のデプロイは前述のようにさまざまなやり方があります。ここでは、Web Deploy パッケージを利用した方法をお伝えします。

先のように、継続的インテグレーションでのビルド時に、Web Deploy パッケージを作成するようにしておけば、それをスクリプトで流してあげるだけで、IIS に Web アプリをデプロイできます。とても便利です。

Bamboo では、Deploy プロジェクトでタスクを追加してあげる。たったそれだけでテスト環境や本番稼働環境へ自動デプロイをすることができるようになります。

 

Bamboo での ASP.NET のデプロイの指定方法

image
Bamboo のデプロイは、各環境ごとにタスクを設定することができます。また、環境ごとにトリガーを指定できるので、たとえば、継続的インテグレーションですべて成功したら、テスト環境へ自動的にデプロイをするなど設定できます。私のデモ環境では、そういう設定をしており、本番稼働環境へは、手動で行うようにしています。すべての一連の流れを自動化することも容易ですが、あえてそういうデモにしています。

image
デプロイのタスクも充実していますが、残念ながら IIS へのデプロイを直接こなすタスクは既定では用意されていません。その代り、「Script」では、コマンド実行だけでなく、PowerShell もインラインで記述できるようになっています。しっかりと考えられていますね。

image
スクリプトは、inline エディタまたは、ファイルを指定する方式が選べます。今回は、インラインエディタにて。

cd ReWorkstyle\ReWorkstyle.Web\obj\Release\Package

ReWorkstyle.Web.deploy.cmd /Y

Web Deploy パッケージのあるフォルダに移動して、コマンド一発実行ですね。たったこれだけでデプロイできます。

 

ASP.NET デプロイの結果を見る

 

image
デプロイの結果は、実は、継続的インテグレーションとも関係しているため、継続的インテグレーションの結果にも記載されます。これで、このビルドがどの環境にデプロイされているのか、していないのかがより明確になるわけです。

image
Staging や Production といったデプロイ対象の環境視点からもレポートを見ることができます。

image
過去の履歴、デプロイされているビルドID、それがどの Git ブランチから取得し、ビルドされたものなのか、いつ行われたものなのかといった基本事項が示されています。

また、過去のデプロイにロールバックすることも容易です。Rollback をクリックします。

image
ロールバックの画面では、このロールバックで戻ってしまう変更をレポートしてくれています。 JIRA と連携することで、どのバグがタスク (≒機能) がもとに戻るのか明確です。安心してロールバックさせることができます。

もちろん、デプロイ視点から各環境に何がデプロイされているかもみることができます。

image
ここから、デプロイも行えます。

image
デプロイするビルドを選択してデプロイすることも可能です。影響もレポートされつつのデプロイですから安心ですね。

 

デモ動画

 

一連の継続的インテグレーションからステージングへの自動デプロイ、さらに本番稼働環境へのデプロイを動画でも理解できるようにしました。こちらも会わせてご覧ください。

アトラシアンツールによる継続的デリバリー (11:33 から再生) 

 

Visual Studio と Bamboo

image
image
Atlassian IDE Connector for Visual Studio により開発者は、Visual Studio の中から継続的インテグレーションの状況を見ることができます。また、ここからビルドをキックすることもできます。ビルドレポートも成功/失敗がアイコンでわかりやすく表現されているだけではなく、過去の履歴もみれますし、テスト結果も、一件一件見ることができます。

 

 

まとめ

 

今回は、ASP.NET の継続的インテグレーションと自動デプロイについて見てきました。いつまでも Visual Studio の IDE から「発行」なんてやっていないでしっかりとした戦略の元で安心安全な開発サイクルとデプロイサイクルをしてください。

また、Bamboo と Visual Studio や、ASP.NET は縁遠いと思われがちですが、今回の投稿で親和性がとても高いところも見ていただきました。マルチデバイス&クラウドな時代ですので、エージェントがいろいろなプラットフォームに対応していて、それらをまとめて管理できる Bamboo の良さも感じていただければ幸いです。

こちらの記事もおすすめ!:

【 この記事は、389人に読まれています】


About Tomoharu Nagasawa (@tomohn)

アトラシアンのエバンジェリスト。 ALM, アジャイルなどの開発プラットフォームの訴求を中心に活動している。認定スクラムマスター、E-Agility 協議会 実行委員、ASTER テストツールWG、『アジャイルソフトウェアエンジニアリング』の監訳、Agile Ultimate Stories I-1,2,3 など寄稿、共同執筆多数。


2 thoughts on “ASP.NET Web アプリケーションの継続的インテグレーションとデプロイ自動化 #aspnetjp #dotnetjp

Comments are closed.