ステップバイステップの ASP.NET 自動ビルド/デプロイ
-
09-06-2019 - |
質問
ビルド/デプロイメントを自動化する方法は非常にたくさんあるため、Web 上のチュートリアルでサポートされているさまざまなシナリオをすべて解析するのは困難になっているようです。そこで、スタックオーバーフローの群衆に質問を提示したいと思いました...次の構成を使用して自動ビルドおよびデプロイメント システムをセットアップする最良の方法は何でしょうか。
- Visual Studio 2008
- Webアプリケーションプロジェクト
- クルーズコントロール.NET
私が最初に試したことの 1 つは、CCnet が出力を自動的に圧縮してサーバーにコピーすることでしたが、その場合は宛先で解凍するための手動作業が必要になります。ただし、すべてのファイルを個別にコピーしようとすると、大規模なアプリケーションの場合は時間がかかる可能性があります (ビルド サーバーはオフィスのデータセンターの外にあります...知っている)。
また、特に興味深いのは、dev、qa、uat、そしてもちろん prod があるため、複数の環境をどのようにサポートするかということです。
MSDデプロイ 非常に興味深いと思われますが、文献を間違って解釈していない限り、ビルドサーバーの出力からデプロイするシナリオには役立ちません。どちらかといえば、ビルド ファーム全体に 1 つのビルドをデプロイするのに便利なようです...ただし、ある環境から別の環境にデプロイする場合でも、構成設定や Web サービス URL などを手動で変更する必要があります。
解決
私は最近、会社で展開の自動化に数日間取り組みました。
CruiseControl、NAnt、MSBuild の組み合わせを使用して、アプリのリリース バージョンを生成します。次に、別のスクリプトが MSDeploy と XCopy を使用してライブ サイトをバックアップし、新しいファイルを転送します。
私たちのソリューションは、この質問への回答で簡単に説明されています Web アプリケーションのデプロイを自動化しますか?
他のヒント
と呼ばれる別の新しいビルド ツール (非常にインテリジェントなラッパー) があります。 NUBuild. 。軽量でオープンソースでセットアップが非常に簡単で、メンテナンスはほとんど不要です。私はこの新しいツールがとても気に入っており、プロジェクトの継続的なビルドおよび統合プロセス用の標準ツールにしました (75 人の開発者で約 400 のプロジェクトがあります)。やってみて。
- 使いやすいコマンドラインインターフェース
- すべての.NETフレームワークバージョンIEをターゲットにする機能1.1、2.0、3.0、3.5
- XMLベースの構成をサポート
- プロジェクトとファイルの両方の参照をサポートします
- 特定のプロジェクトの「完全な順序付けられたビルドリスト」を自動的に生成します - タッチメンテナンスなし。
- 円形の依存関係を検出および表示する機能
- 並列ビルドの実行 - 生成されたビルドリスト内のプロジェクトのどれを個別にビルドできるかを自動的に決定します。
- プロキシ アセンブリを処理する機能
- たとえば、ビルドプロセスの視覚的な手がかりを提供します「%完成」、「現在のステータス」などを示しています。
- XMLとテキスト形式の両方で詳細な実行ログを生成します
- Cruise-Control.net連続統合システムと簡単に統合されています
- 2.0 +バージョンをターゲットにするときにXmlloggerなどのカスタムロガーを使用できます
- エラーログを解析する機能
- ユーザー指定の場所に構築されたアセンブリを展開する機能
- ソースコードをソースコントロールシステムと同期する機能
- バージョン管理機能
持っていた 関連する質問 自動ビルドからデプロイ可能なファイルのセットを取得する方法について。Web 配置プロジェクト (リンクと古い質問のすべて) が私が必要なことを行ってくれることがわかりました。これらは VS および MSBuild アドオンです。
これは、ASP.NET に限らず、すべての開発に共通する問題です (もっと早く読んでおけばよかった)。開発者の 1 人である私のチームは、当然のことながら、 ビルドマスター 内部的にはリリース プロセス全体で使用でき、ほとんどのシナリオでは無料です。このツール内では、すべての標準 CI ビルドを実行してアーティファクトを作成し、特定のアプリケーションや環境に応じて、内部または外部でホストされている 40 台以上のサーバーのいずれかにこれらのアーティファクトをデプロイする自動プロセスを設定できます。 。
さまざまなテスト環境への展開について具体的に言及したため、これはツールの基本的な側面です。アイデアは、環境ワークフローをモデル化することです (例:統合 -> QA -> 実稼働) はすでに導入されており、基本的にソース管理から実稼働までビルドを推進します。ほとんどの場合、アーティファクトを環境にデプロイするデプロイメント アクションを追加するだけで簡単ですが、さらに複雑な場合もあります。
また、構成ファイルの変更はデプロイメントの一部であり、BuildMaster のもう 1 つの組み込みコンポーネントであるともさりげなく述べていました。私たちのアイデアは、ツール自体をすべての構成ファイルと展開の中心ハブとして使用し、展開計画の単純な「構成ファイルの展開」アクションで最新の変更が自動的に適用されるようにすることでした。
このプロセスに関して言及していなかった点の 1 つは、データベースのデプロイメントの側面です。ほとんどの ASP.NET アプリケーションには関連するデータベースが必要ですが、そうでない場合は単なる静的な HTML ファイルになる可能性があります。導入のたびにデータベース スキーマが適切なデータベース バージョンに更新されることが重要です。当然のことながら、BuildMaster 内にはこれを処理するモジュールもあります。このアイデアは、ツール自体内に DDL-DML スクリプトを保存し、スクリプトを実行することです。 1回だけ 環境ごとに、ビルドがデプロイされるときに、各環境のすべてのデータベースが最新であることが保証されます。他のスクリプト (例:ストアド プロシージャ、ビュー、トリガーなど) は本質的にコード ファイルであるため、ソース管理に属します。これらの DROP-CREATE-CONFIGURE タイプのスクリプトは、ほとんどの場合、単純な展開アクションで毎回実行できます。
ほとんどの開発者が考慮していない展開パズルのもう 1 つのピースは、プロセスの自動化です。多くの開発者は、これらのプロセスを手動で実行するために、サインオフを実行したり、変更要求フォームに記入したりする必要があります。繰り返しますが、これはすべて、BuildMaster 内の自動ワークフロー設定の一部として利用できます。すべての単体テストが合格しない限り QA 環境への昇格を許可しないブロッカーを設定したり、QA チームの誰かがビルドを承認し、問題追跡ツール内のすべての問題が解決/クローズされない限りステージング環境への昇格をブロックしたりすることができます。その特定のリリース。
回答から CC.NET を省略したことに気づきましたが、アプリケーションはすべて BuildMaster を通じて構築およびデプロイされているため、もう必要ありません。ただし、アーティファクトをドロップ場所から簡単に取得して、後の環境にデプロイすることもできます。
多くの人が .NET プロジェクトに CC を使用しているようですが、なぜ Jenkins や Sonarqube を使用しないのでしょうか?必要なものはすべて揃っています。これをすべて 3 日でセットアップしました。Win 2008 サーバー R2、MSSQL、Jenkins、VIsual SVN、および Sonarqube を持っています。
すべてうまく機能し、プロジェクトのすべてのメトリクスを取得できます。Sonarqube は Gallio、Gendarme、FXcop、Stylecop、NDepths、PartCover を使用してメトリクスを取得します。SonarQube は多くの設定を行わずにこれを自動的に行うため、これはすべて非常に簡単です。
私もあなたのためにいくつかの写真を投稿して、それを感じてください。これは、Jenkins ウィッチのビルドと Sonar メトリクスの取得、および IIS に自動的にデプロイするための別のジョブです。
そして、Sonarqube、私のプロジェクトのすべてのメトリクス。これはシンプルな MVC4 アプリですが、非常にうまく機能します。
もっと詳しい情報が必要な場合は、より具体的にできますが、少なくともジェンキンスを検討する必要があると思います。CC の方が自分に合っている場合は、少なくとも、選択する前に適切な代替手段を検討したことになります。
このセットアップ全体では、アプリのビルドと展開にも MSBuild を使用します。