Web-development – How to update live web sites with code changes

configuration-managementdeploymentrelease-managementweb-developmentwebsites

I know this is a very basic question. If someone could humor me and tell me how they would handle this, I'd be greatful.

I decided to post this because I am about to install SynchToy to remedy the issue below, and I feel a bit unprofessional using a "Toy" but I can't think of a better way.

Many times I find when I am in this situation, I am missing some painfully obvious way to do things – this comes from being the only developer in the company.

  • ASP.NET web application developed on my computer at work
  • Solution has 2 projects:
    • Website (files)
    • WebsiteLib (C#/dll)
  • Using a Git repository
  • Deployed on a GoGrid 2008R2 web server

Deployment:

  1. Make code changes.
  2. Push to Git.
  3. Remote desktop to server.
  4. Pull from Git.
  5. Overwrite the live files by dragging/dropping with windows explorer.

In Step 5 I delete all the files from the website root.. this can't be a good thing to do. That's why I am about to install SynchToy…

UPDATE: THANKS for all the useful responses. I can't pick which one to mark answer – between using a web deployment – it looks like I have several useful suggesitons:

  1. Web Project = whole site packaged into a single DLL – downside for
    me I can't push simple updates – being a lone developer in a company
    of 50, this remains something that is simpler at times.
  2. Pulling straight from SCM into web root of site – i originally
    didn't do this out of fear that my SCM hidden directory might end up
    being exposed, but the answers here helped me get over that
    (although i still don't like having one more thing to worry about
    forgetting to make sure is still true over time)
  3. Using a web farm, and systematically deploying to nodes – this is
    the ideal solution for zero downtime, which is actually something I
    care about since the site is essentially a real time revenue source
    for my company – i might have a hard time convincing them to double
    the cost of the servers though.

–> finally, the re-enforcement of the basic principal that there needs to be a single click deployment for the site OR ELSE THERE SOMETHING WRONG is probably the most useful thing I got out of the answers.

UPDATE 2: I thought I come back to this and update with the actual solution that's been in place for many months now and is working perfectly (for my single web server solution).

The process I use is:

  1. Make code changes
  2. Push to Git
  3. Remote desktop to server
  4. Pull from Git
  5. Run the following batch script:

    cd C:\Users\Administrator

    %systemroot%\system32\inetsrv\appcmd.exe stop site "/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 start site "/site.name:Default Web Site"

As you can see this brings the site down, uses robocopy to intelligently copy the files that have changed then brings the site back up. It typically runs in less than 2 seconds. Since peak traffic on this site is about 2 requests per second, missing 4 requests per site update is acceptable.

Sine I've gotten more proficient with Git I've found that the first four steps above being a "manual process" is also acceptable, although I'm sure I could roll the whole thing into a single click if I wanted to.

The documentation for AppCmd.exe is here.
The documentation for Robocopy is here.

Best Answer

You should check out VS 2010's web deploy. If GoGrid supports it, the web deployment package is a good solution.

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

Related Topic