Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Our shop has a TeamCity server that produces deployment packages. The packages are either ASP.NET web apps, Windows services, or miscellaneous binaries (that just get copied to the network somewhere). The packages are all simple zip files. This is all working fine but right now the act of deploying involves a developer manually unzipping the package and copying it to the right place, starting/stopping Windows services if necessary, dealing with synchronization processes to push files to all servers in a web farm, etc. I'm working on figuring out the best way to automate all this.

There is a new tool called Octopus which looks to be exactly what we need. However, for various reasons (cost, immaturity of product), we can't use it. At the other end of the spectrum, obviously I could script all this out with MSBuild. But what are my other options? Are there tools similar to Octopus out there? Are there open source equivalents? How are other shops solving this?

share|improve this question

closed as not constructive by Jim G., MichaelT, Kilian Foth, Bart van Ingen Schenau, Dynamic May 18 '13 at 20:03

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

I would like to note that for people looking at this question in the future who are curious about potential solutions like this in Java, I have used WebStart with moderate success for pushing client applications to thousands of computers after a deploy. It comes standard with the JRE. –  maple_shaft Dec 1 '11 at 17:37
Similar question stackoverflow.com/questions/11735389/… –  Michael Freidgeim Sep 20 '12 at 12:32

5 Answers 5

up vote 13 down vote accepted

The Go project from ThoughtWorks is a similar tool to Octopus that provides Continuous Delivery. Puppet is another system that handles automated deployment

share|improve this answer
Interesting. I wasn't aware of either of those. I will check them out. –  RationalGeek Dec 1 '11 at 14:49
Is Puppet available for Windows? Looks like it's Linux-only from what I can tell. –  Ryan Hayes Dec 1 '11 at 15:03
You're right it does look like it's a linux only tool. Such a pity. –  Mike Brown Dec 1 '11 at 19:38
Chef plays nicely with Windows. It might be useful if you were interested in Puppet: opscode.com/blog/2011/05/24/chef-hearts-windows –  Dave Konopka Feb 24 '12 at 16:06

I can say that Octopus Deploy + TeamCity has literally changed our life. We now can't imagine life without them. Octopus is rock solid and does exactly what we need.

We have about 15 different application components and about 40 EC2 servers, in three tiers (dev, qa, production). We do CI/testing with TeamCity, which spits out NuGet packages; then Octopus Deploy sends those up to the servers. It's a beautiful tool which I can't recommend enough.

share|improve this answer

Web Deploy is very good for building a package which you can deploy repeatedly across different environments, so that by the time you deploy to production, you know the process works.

This can easily be scripted in a batch or Powershell script, so it can be integrated with a Jenkins build and the Promoted Builds plugin (one-click deployment).

It can also be hooked into the Web Farm Framework, which allows you to automate switching servers out of rotation while you deploy to them (assuming your load balancer supports it).

And that's all for free, though it does take some time to get right.

share|improve this answer

You can build up a chain of dependent builds using TeamCity. For example with a web project:

  1. Run your main build that produces the deployment artifacts
  2. If 1 passes then a different dependent build configuration runs which copies all the files up to the live server and does all the things like stopping the app pools, etc, etc.
  3. If 2 passes then a dependent build runs a set of smoke tests against that specific server
  4. If 3 fails then a dependent build rolls back the deployment

In a more complex environment you could roll up 2-4 into a single build that also scripts looping through servers one at a time and pulling them out of the load balancer and so forth.

Although not as clean and friendly as tools that support this directly, it's not especially complex to set up - some powershell scripts or maybe something written using Robot Framework can handle this sort of thing fairly easily.

share|improve this answer

Try Appveyor. It provides PowerShell cmdlets for deploying apps that could be easily used in your automation scripts.

share|improve this answer
would you mind explaining more on what it does and why do you recommend it as answering the question asked? "Link-only answers" are not quite welcome at Stack Exchange –  gnat Aug 21 '13 at 23:45

Not the answer you're looking for? Browse other questions tagged or ask your own question.