コードを変更してライブWebサイトを更新するにはどうすればよいですか?


21

これは非常に基本的な質問です。誰かが私にユーモアを与え、彼らがこれをどのように処理するかを教えてくれたら、私はとてもうれしいです。

SynchToyをインストールして以下の問題を修正しようとしているため、これを投稿することにしました。

この状況にいると、何度も痛みを伴う明白な方法を見逃しています。これは、会社で唯一の開発者であることに起因しています。

  • 職場のコンピューターで開発されたASP.NET Webアプリケーション
  • ソリューションには2つのプロジェクトがあります。
    • ウェブサイト(ファイル)
    • WebsiteLib(C#/ dll)
  • Gitリポジトリを使用する
  • GoGrid 2008R2 Webサーバーに展開

展開:

  1. コードを変更します。
  2. Gitにプッシュします。
  3. サーバーへのリモートデスクトップ。
  4. Gitからプルします。
  5. Windowsエクスプローラーでドラッグ/ドロップして、ライブファイルを上書きします。

ステップ5では、Webサイトのルートからすべてのファイルを削除します。これは良いことではありません。だから、SynchToyをインストールしようとしています...

更新:すべての有用な応答に感謝します。答えをマークするものを選択することはできません-Web展開を使用する間に-いくつかの有用な提案があるように見えます:

  1. Webプロジェクト=単一のDLLにパッケージ化されたサイト全体-単純な更新をプッシュすることはできません-50人の会社の孤独な開発者であるため、これは時々より単純なもののままです。
  2. SCMからサイトのWebルートに直接移動します-私はもともと、SCMの隠しディレクトリが公開されることを恐れてこれをしませんでしたが、ここでの回答はそれを乗り越えるのに役立ちました(私はまだ1確認するのを忘れることを心配することは、時間の経過とともにまだ真実です)
  3. Webファームを使用し、ノードに体系的に展開する-これは、ダウンタイムがゼロの理想的なソリューションです。これは、サイトが本質的に会社のリアルタイムの収益源であるため、実際に私が気にしていることです。ただし、サーバーのコストは2倍になります。

->最後に、サイトのシングルクリック展開が必要であるか、または他に何か間違っている必要があるという基本原則の強化は、おそらく私が答えから得た最も有用なものです。

更新2:私はこれに戻って、今何ヶ月もの間存在し、完全に機能している実際のソリューションで更新すると思った(私の単一のWebサーバーソリューション)。

私が使用するプロセスは次のとおりです。

  1. コードを変更する
  2. Gitにプッシュ
  3. サーバーへのリモートデスクトップ
  4. Gitからプル
  5. 次のバッチスクリプトを実行します。

    cd C:\ Users \ Administrator

    %systemroot%\ system32 \ inetsrv \ appcmd.exe停止サイト "/site.name:Default Web Site"

    robocopy Documents \ code \ da \ 1 \ work \ Tree \ LendingTreeWebSite1 c:\ inetpub \ wwwroot / E / XF connectionsconfig Web.config

    %systemroot%\ system32 \ inetsrv \ appcmd.exe開始サイト "/site.name:Default Web Site"

ご覧のとおり、これによりサイトがダウンし、robocopyを使用して、変更されたファイルをインテリジェントにコピーしてからサイトをバックアップします。通常、2秒未満で実行されます。このサイトのピークトラフィックは1秒あたり約2リクエストであるため、サイトの更新ごとに4リクエストが欠落しても許容されます。

Gitに精通しているので、上記の最初の4つの手順が「手動プロセス」であることも受け入れられることがわかりましたが、必要であればすべてを1回のクリックで処理できると確信しています。

AppCmd.exeのドキュメントはこちらです。Robocopyのドキュメントはこちらです。


6
serverfaultにより適しています。
カールビーレフェルト

リモートデスクトップを使用する代わりに、サーバーへのSSHを検討する必要があります。これにより、必要に応じてデプロイをスクリプト化できます。
マルフィスト

5
この質問はここに滞在してもいいと思います。ウェブサイトの展開は、システム管理者の仕事よりも開発者の関心事のように思えますが、会社によって異なる可能性があります。それでも、開発者に焦点を当てた限り、すべての答えは。
アダム・リア

1
@Malfist-WindowsサーバーへのSSHの正確な方法は?
ワイアットバーネット

@WyattリモートマシンでSSHサーバーを実行することにより、Linuxボックスでの場合とほぼ同じです。
アダムリア

回答:


3

VS 2010のWebデプロイを確認する必要があります。GoGridがサポートしている場合、Web展開パッケージが適切なソリューションです。

http://weblogs.asp.net/scottgu/archive/2010/07/29/vs-2010-web-deployment.aspx


Web配置を使用すると、修正プログラムのオプションが失われますか?私は...緊急事態のためのオプションを持っているようなので、外の正式なプロセスが、私が何かをしたくない人の多くがあります知っている
アーロンAnodideに

いいですね 私の会社では、変更を追跡できないため、人々にそうしてほしくないことを知っています。個人的なサイトの場合、私は本当にそのオプションを持つことが本当に好きです。
ネイト

3

以前の雇用主では、コードの変更を展開するために、ロードバランサーを設定していました1つのWebサーバーへのサービスを停止します。最初のWebサーバー上のセッションの有効期限が切れるまで20分かかる場合があります。展開用のzipファイルを解凍して、そのWebサーバーのコードを更新し、最初のWebサーバーの直接IPアドレスを押すことで問題なく動作することを確認します。それがうまくいくと確信したら、ロードバランサーを設定して、現在更新されているウェブサーバーにアクセスし、別のサーバーでセッションが期限切れになるのを待ってから、そのサーバーを更新します(すべてが更新されるまで続きます)。彼らが問題なくチェックアウトしたら、ロードバランサーがその仕事をやり直すように設定します。これは、ピーク時の季節負荷時に最大10台のWebサーバーがロードバランサーに接続されていると複雑になりました(したがって、ライブWebサイトをシャットダウンできなかったため、1つずつ更新するには数時間かかることがありました-顧客はサイトへ)。

ASP.NETでは、名前の付いたファイルをWebサイトのルートディレクトリにドロップするとApp_Offline.htm、そのWebサイトがアンロードされ、DLLS(およびその他)を更新できるようになります。IISは、「アプリケーションオフライン」というタイトルのページを提供します。ファイルが削除、名前変更、または削除されると、Webアプリケーションが再起動し、IISはそのWebサイトにWebページを提供します。これは、VS内からWebサイトを公開するときにVisual Studioが行うことです。


2

通常、私がやることは、すべてをSVNリポジトリに保管することです。いくつかの変更が終了したら、開発サイトでコミットし、本番環境でチェックアウトします。すべての同期を維持し、高速で簡単です。チェックアウトが面倒な場合は、ApacheをWebDAVでセットアップすることができます。


.svnディレクトリがライブサイトに存在することを心配していますか?
アーロンアノディード

実際には、apacheは通常、これらのフォルダーへのアクセスを拒否するように設定されています。
マルフィスト

IISは、デフォルトで.svn(または.gitまたは.hg)も拒否します。
ワイアットバーネット

悪意のあるユーザーがディレクトリへのアクセスを取得した場合、そのユーザーはクリアな状態のすべてのコードへのアクセスを取得します。
oleksii

5
悪意のあるユーザーがファイルシステムにアクセスした場合、さらに心配することがあります。
マルフィスト

2

私のWebアプリごとに、3つのブランチを持つgitリポジトリがセットアップされています。ライブ、ベータ、機能。Liveはもちろんライブサイトです。ベータ版は、バグを修正したり、実装の直前に機能の最終テストを行うために使用されるサイトです。それからあなたが言ったように、単純なgit pushを実行し、git pullをライブで取得して情報を取り込みます。機能は「次のバージョン」の機能強化に使用されます。


同じことが、ほぼすべてのソース管理システムで機能します。
-deadalnix

2

あなたは、継続的デリバリーの問題を解決しようとしています。最初は手動の手順から始めますが、すぐに問題に気付くでしょう。これらは最も一般的なものです:

  1. コードはPCで動作しますが、本番では動作しません
  2. 新しい変更は古いコードを壊します
  3. 漸進的な変更により、デプロイがますます難しくなり、アタッチする新しいライブラリ、適用するパッチなどが得られます。

TeamCity(または同様のツール)をご覧ください。


2

自動化されたビルドおよびデプロイスクリプトを使用する

最適な方法は、MsBuildやNantなどの自動ビルドおよび展開スクリプトを使用することです。

その理由は、1つのコマンドを入力してWebサイトを展開し、その後1つのコマンドを入力してロールバックするだけだからです。そして十分に徹底していれば、データベーススキーマの移行も含まれます。(Migrator.Net)

SVNまたはGITを使用して展開しない主な理由の1つは、環境が運用とステージングの間で変化する可能性があることです。NANTスクリプトでは、ターゲットとする環境専用の.configファイルをビルドすることができます。これにより、本番環境で構成設定を入力するのを忘れずに済みます。

また、プロセス全体が自動化されるため、1つのコマンドになり、任意の数の手動プロセスが1つの単純なプロセスになります。


1

まず、Webプロジェクトを使用する必要があります。あなたが尋ねる違いは何ですか?

Webプロジェクトは、すべてのC#クラスファイル(コードビハインドを含む)を単一のDLL(セキュリティ、および移動する1つのファイルであるという事実)に結合します。

次に、アプリケーションを公開してから、リモートデスクトップを使用して、公開フォルダー内のすべてのファイルをドラッグし、上書きするように設定するだけです(新しいファイルで古いファイルが置き換えられます)。

公開すると、アプリケーションに必要なすべてのファイルが1つのフォルダーに配置されます。


1

私の現在の雇用主はpuppetを使用して展開しています。(同じ問題に対処するソフトウェアパッケージさらにあります。)

私の以前の雇用主は、カスタムジョブ制御システムを使用して、ソフトウェアの展開、再起動などを処理していました。

私が以前持っていた雇用主には、データをSubversionからサーバーにコピーしてローリングリスタートを実行するカスタムスクリプトがありました。

それまでに私が見たいくつかの場所には、デプロイメントを管理するためのファイルがありました。彼らは通常、ロードバランサーから半分のウェブサーバーを切断し、待機し、その半分を停止し、コードをロールアウトして再起動し、ロードバランサーを反転させ、待機し、残りの半分を停止してから再起動し、ロードバランサーを戻すなどの戦略を使用しましたアップ。

私が働いてきたすべての場所で、コードの展開は単一のコマンドであったか、単一のコマンドであるという欠如が修正すべき問題として認識されていました。


1

通常、当社のWebサイトでこの問題を解決するために使用するのは、ジャンクションと呼ばれるSystems Internalsに含まれるツールです。

このツールを使用すると、あるディレクトリから別のディレクトリへのリンクを作成できます。サーバーのアプリルートには3つのフォルダーが含まれています。赤、青、現在。IISは、常にファイルをチェックするように構成されています。

junction current現在のフォルダーが現在指しているフォルダーを示すコマンドを発行できます。たとえば、現在ブルーを指していたとします。私たちがすることは、新しい展開のために赤でファイルをキューに入れ、すべての構成が準備ができていることを確認することです。

準備ができたら、コマンドjunction current redを発行して、ポイントを変更することができます。

このソリューションを非常に優れたものにする2つのことがあります

1)フォルダー内の変更をキューに入れる時間は、世界中にあります。急ぐ必要はなく、唯一のダウンタイムはアプリプールがスピンアップするときです。(このステップを事前にコンパイルする方法もあります。)

2)展開で問題が発生した場合、ロールバックするために必要なことは、変更を元に戻すのではなくコマンドを発行することだけです。私たちの場合のコマンドはjunction current blue

うまくいけば、私たちのやり方が新しい解決策に光を当てることができます。


0

私がやったこと、そしてあなたがこれの範囲を持っているかどうかはわかりませんが、ここに行きます。開発者はコードをQAブランチにチェックインし、システムエンジニアがQA環境にロードします。QAに合格すると、本番ブランチに昇格します。この場合、ロードバランサーのオッズとイーブンのサーバーに接続されているすべてのサイトが少なくとも2つあり、2つのサーバーの1つがオフラインになります。iisが停止され、サイトがアーカイブされ、新しいサイトがその後、必要なiisの変更をiisが再起動し、次のサーバーに移動します。私たちの場合、これはすべてC#を使用してスクリプト化されていましたが、過去にはvbスクリプトを使用して行われていました。それがお役に立てば幸いです。乾杯

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.