Pull Deployment in Windows Environment

I am looking for a way to configure pull deployment, as shown in the traditional push deployment model for Windows.

Optimal situation:

  • Deploy the file (s) to the core server
  • The child server will check to see if the host has an update in a given amount of time or time.
  • If the main server contains the update, it will download the update and / or execute the script (something like nant?)

The solution should be as lightweight as possible and should run in a Windows environment.

I looked at Chef and SmartFrog , but are not suitable for this particular situation.

Edit: Deploying several software components. These are database scripts, Windows services, and a website. Each child will have its own unique script, as its requirements and authentication data are different from the rest.

Edit 2: So far, people have come up with great answers, but the final solution really needs to be safe, work inside, and everything happens at the same time. This is due to compliance, industry standards and versions (for example, the db server is not synchronized with the services). The final solution, which I mean, would be something like an FPT server on the main and Nant working on the children to execute the installation routines (starting, stopping services, installing sql scripts, registering). This is the closest thing currently available, but not ideal, since nant is push-based (executed only when someone or a program, such as cruisecontrol, runs a script). I am sure there must be a decision to make the PULL for Windows deploy correctly. Updating Windows and APT on Linux are great examples of pull deployment if you can deploy to multiple servers at the same time.

+4
source share
7 answers

You say you want to deploy Windows Software Deployment, but you are talking about build scripting languages ​​such as NAnt. If it were me, I would write the Windows Installer package using InstallShield and use the UpdateManager service so that clients can receive updates from your update server. These tools have long been proven and will be much safer than anything you invent.

+1
source

I don’t understand the 100% type of application to deploy, but if this Windows Forms application is distributed to clients / end users, have you looked at ClickOnce ? It has modes for automatically polling and displaying deltas from clients. But it seems that you are spreading to other servers?

0
source

A few years ago, I implemented a system that did what you are looking for.

For the client application, we used ClickOnce deployment, which just works fine. For Windows services and websites, we had to implement our own system, because we could not find anything that worked for us.

For the database, we tried replication (sql2005), this did not work, so it took a lot of time and processor power. We decided to backup and restore the data (all this was only on the client servers)

In a nutshell

1) The main server will contain several zip files with the new version of web services, websites and databases.

2) The client server server service daily checks the main server (using ftp) for new software versions.

3) When it is found - remove the Windows service and replace the files and reinstall them - replace the site files - replace the database

0
source

Windows Live Sync

Have you thought about Windows Live Sync?

It's free and all you have to do is set up two folders. One on your primary server and one on your child server.

After configuration, all files will be automatically synchronized.

The update should be very simple, as soon as you update your main folder, it will be automatically replicated at the child end.

It is completely fire and forgotten.

I use this system (one deployed on the server) with six "child" nodes, with 1000 files synchronized daily.

Change 1:

Having forgotten the mention, the files are encrypted and it uses a reverse connection, so there is a zero router / firewall configuration.

0
source

Is the current domain controller? So that you can "advertise" them? Is there nothing easier. Change this line for your path to see the user interface, but it should also be scriptable - on a worksheet in PowerShell.

"C: \ Windows \ SysWOW64 \ rundll32.exe" "C: \ Windows \ SysWOW64 \ shell32.dll", # 44 "C: \ Windows \ SysWOW64 \ CCM \ SMSRAP.cpl", Run the advertised programs

0
source

I have used a combination of .net cruise control and subversion for this precise use with great success in the past.

Subversion is safe and will act as the main server. Cruise control .net fully supports both subversion and nant. Of course, this can do a lot more. We had a very complex logic due to the industry in which we were located and its requirements (utility).

0
source

I had heard about this situation before when I was talking with someone, when I was in St. Louis on the "birthday" of my website. I wonder if it was you.

In any case, I used the web deployment tool (MSDeploy) for this . MSDeploy is more like a synchronization tool, and then everything else. The concept is that you have a source and dest, you want to synchronize them. If you are doing a typical push deployment, your assembly server will synchronize the output of some assembly with each target server. If you want to perform a pull deployment, simply drop the files you want into a shared location (you invoke this main server), then your client computer can synchronize itself with this main server.

Here are some more details that you mentioned in your question:

Deploying files to the core server The build server can use MSDeploy to deploy files to the core server.

The child server will check to see if the host has an update in a given amount of time or time. There is no direct support, but there are two things. One thing: you can run MSDeploy from a script (.cmd / PowerShell / MSBuild / etc), and it can determine if there is a newer version. I would do this by dropping the version file at the top level of your output folder. Then, when your script runs, just read which version is on the server. If a newer version is available, open a new new deployment. The second thing: MSDeploy supports incremental deployment, so even if you start a new deployment, it just won't make any changes. It's tricky when you start talking about database deployment, although in your case it’s probably not recommended, I would go with some taste of Thing one.

If the main server contains the update, it will download the update and / or execute the script. This is what msdeploy.exe is going to do for you.

Other related items

  • Incremental publishing: if your website contains 1000 files, but only 5 are modified, then only those that have been deployed
  • Configuration: MSDeploy supports parameterization, so when a client starts synchronization, you can specify specific values ​​for this client. With their help, you can change all types of files, including web.conig / .xml / text files, etc. You can even customize your IIS settings.
  • Authentication You can use regular auth windows, if you use IIS 7, you can create WMSvc and use them.
  • Security: WMSvc can be used for this.

Does this fit your needs?

0
source

All Articles