【 この記事は、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 アプリの設定方法
継続的インテグレーションでは、対象となるコードが格納されたバージョン管理システム (VCS) のリポジトリからコードを取得するのが基本になります。Bamboo では、あらかじめこのタスクが Defalut Job に含まれていますので、設定で取得先を選択してあげるだけで済みます。
次に、取得したコードをビルドすることになります。Bamboo では、ASP.NET のビルドを行うためのタスクを2種類用意しています。アドオンの適用など不要です。
「MSBuild」を選択することで、MSBuild を実行することができます。
もしくは、「Visual Studio」を用いることで、devenv を使ったビルドを実行することができます。
さて、Bamboo では、ビルド環境 (エージェント) にて利用できる Visual Studio や MSBuild のバージョンやそれらの場所を自動認識してくれます。
上図は、私のデモ環境で自動認識して設定されているものです。これがあるため先述のタスクとして「Visual Studio」を選んだ場合は、以下のように必要最小限の項目を入力するだけでビルドを実行することができるようになります。
Executable に Visual Studio がバージョンごとにしっかりと識別されていて選択が可能になっていることがわかります。また、Platform にて、アーキテクチャを指定することができます。
MSBuild の場合は、以下のようなタスクの設定となります。
今回は、こちらの 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 にデプロイに必要なファイルが生成されます。
これで、ASP.NET のビルドは OK です。実にシンプルな指定で行えるのがわかりますね。
次に、テストの実行を見ていきます。ビルド後のタスクとしてテストの実行を追加します。
タスクとして、「MSTestRunner」「NUnit Runner」があります。これらを使うことでテストを実行することができてしまいます。今回は、MSTestRunnerで見ていきましょう。
ここでも、エージェントで起動可能な Visual Studio のバージョンが自動認識されているのがわかります。今回はこれを使います。
設定する箇所は、どのテストアセンブリを実行してテストするかを入力する、ただそれだけです。
ReWorkstyle\ReWorkstyle.Web.Tests\bin\Release\ReWorkstyle.Web.Tests.dll
これですみます。あとは、特定のテストだけを実行したいといった場合は、テストメタデータも入力してください。
ちなみに、上記でビルドの際は、Bamboo の変数を使って書きましたが、テストアセンブリの指定のように、ビルド作業用ディレクトからのパスだけ書いてもきちんとワークします。
たったこれだけで、ASP.NET アプリの継続的インテグレーションが行えてしまいます。
Bamboo での継続的インテグレーションの実施結果
結果は、ブラウザで見ることができます。
テスト結果もこのように一件一件の結果で見ることができます。この結果を踏まえて JIRA と連携していれば、バグを起票したりすることもできます。
ビルド成果物にもアクセスできます。これ以外にも、VCS でのコミット履歴、このビルドに含まれるバグやタスク (JIRA との連携)、もちろん、ビルドログも見ることができます。
ASP.NET の自動デプロイ
ASP.NET のデプロイは前述のようにさまざまなやり方があります。ここでは、Web Deploy パッケージを利用した方法をお伝えします。
先のように、継続的インテグレーションでのビルド時に、Web Deploy パッケージを作成するようにしておけば、それをスクリプトで流してあげるだけで、IIS に Web アプリをデプロイできます。とても便利です。
Bamboo では、Deploy プロジェクトでタスクを追加してあげる。たったそれだけでテスト環境や本番稼働環境へ自動デプロイをすることができるようになります。
Bamboo での ASP.NET のデプロイの指定方法
Bamboo のデプロイは、各環境ごとにタスクを設定することができます。また、環境ごとにトリガーを指定できるので、たとえば、継続的インテグレーションですべて成功したら、テスト環境へ自動的にデプロイをするなど設定できます。私のデモ環境では、そういう設定をしており、本番稼働環境へは、手動で行うようにしています。すべての一連の流れを自動化することも容易ですが、あえてそういうデモにしています。
デプロイのタスクも充実していますが、残念ながら IIS へのデプロイを直接こなすタスクは既定では用意されていません。その代り、「Script」では、コマンド実行だけでなく、PowerShell もインラインで記述できるようになっています。しっかりと考えられていますね。
スクリプトは、inline エディタまたは、ファイルを指定する方式が選べます。今回は、インラインエディタにて。
cd ReWorkstyle\ReWorkstyle.Web\obj\Release\Package
ReWorkstyle.Web.deploy.cmd /Y
Web Deploy パッケージのあるフォルダに移動して、コマンド一発実行ですね。たったこれだけでデプロイできます。
ASP.NET デプロイの結果を見る
デプロイの結果は、実は、継続的インテグレーションとも関係しているため、継続的インテグレーションの結果にも記載されます。これで、このビルドがどの環境にデプロイされているのか、していないのかがより明確になるわけです。
Staging や Production といったデプロイ対象の環境視点からもレポートを見ることができます。
過去の履歴、デプロイされているビルドID、それがどの Git ブランチから取得し、ビルドされたものなのか、いつ行われたものなのかといった基本事項が示されています。
また、過去のデプロイにロールバックすることも容易です。Rollback をクリックします。
ロールバックの画面では、このロールバックで戻ってしまう変更をレポートしてくれています。 JIRA と連携することで、どのバグがタスク (≒機能) がもとに戻るのか明確です。安心してロールバックさせることができます。
もちろん、デプロイ視点から各環境に何がデプロイされているかもみることができます。
ここから、デプロイも行えます。
デプロイするビルドを選択してデプロイすることも可能です。影響もレポートされつつのデプロイですから安心ですね。
デモ動画
一連の継続的インテグレーションからステージングへの自動デプロイ、さらに本番稼働環境へのデプロイを動画でも理解できるようにしました。こちらも会わせてご覧ください。
Visual Studio と Bamboo
Atlassian IDE Connector for Visual Studio により開発者は、Visual Studio の中から継続的インテグレーションの状況を見ることができます。また、ここからビルドをキックすることもできます。ビルドレポートも成功/失敗がアイコンでわかりやすく表現されているだけではなく、過去の履歴もみれますし、テスト結果も、一件一件見ることができます。
まとめ
今回は、ASP.NET の継続的インテグレーションと自動デプロイについて見てきました。いつまでも Visual Studio の IDE から「発行」なんてやっていないでしっかりとした戦略の元で安心安全な開発サイクルとデプロイサイクルをしてください。
また、Bamboo と Visual Studio や、ASP.NET は縁遠いと思われがちですが、今回の投稿で親和性がとても高いところも見ていただきました。マルチデバイス&クラウドな時代ですので、エージェントがいろいろなプラットフォームに対応していて、それらをまとめて管理できる Bamboo の良さも感じていただければ幸いです。
こちらの記事もおすすめ!:
- Bamboo on Windows 環境の構築手順
- Stash と Bamboo による理想的な継続的インテグレーション
- [JIRA][Confluence] 管理者アクセス時のパスワードの入力を無効にする方法
- 継続的インテグレーションとデプロイメント #Bamboo
- Visual Studio から JIRA / Bamboo にアクセスする IDE Connector for Visual Studio
【 この記事は、389人に読まれています】
.netで継続的インテグレーション。。。 http://t.co/LD0dGTHeYh
http://t.co/ZBsZSssmWy Web アプリケーションの継続的インテグレーションとデプロイ自動化 #aspnetjp #dotnetjp | Re:WorkStyle http://t.co/bMaftA2qLN