Deeper Windows Azure support
Improve Azure integration in the following ways:
1) Make it easier to create NuGet packages from CSPKGs
2) Ability to unpack the CSPkg and make changes to configuration files inside the package
3) More options around the Staging/Production swap.
Info on #2 here: https://github.com/OctopusDeploy/Issues/issues/538
Re: #3, we'd provide these options:
- Deploy to staging
- Deploy to production
- Deploy to staging, then promote to production
- Deploy to staging, then promote, then delete staging
https://github.com/OctopusDeploy/Issues/issues/379
(Currently the last one requires duplicating the step)
Also, we'll make it possible to choose whether to start/stop a service:
Let's say I stop the staging instances of my cloud services at Azure. Then when I upgrade they get upgraded, but are still stopped. Would be nice for the built-in deployment in Octopus to have an option to start them. A similar feature would be to wait until new cloud services are created (now it's done in the background and no feedback on when it's completed)
Also, make certificate and subscription info available in the PowerShell scripts:
https://github.com/OctopusDeploy/Issues/issues/382
Come to think of it, currently we add/remove the subscription all the time. 99% of the time people reuse the same Tentacle for their Azure deployments; let's just add it once at the start of deployment if it doesn't exist, and leave it there.
Also look at:
https://github.com/OctopusDeploy/Issues/issues/718
And also:

Octopus 3.0 shipped today with better support for Windows Azure cloud services and Azure web applications. Give it a try and let us know what you think!
-
Eric Wyler commented
++ to Ryan Anthony's idea, we've run into the same issue and had to roll our own code to pull the output of a previous Azure deployment step and select subscriptions and whatnot in a custom PS script.
FWIW I think #2 is a hairy idea to implement - cracking open a binary to modify it means you now no longer have the assurance that you are deploying the same binary to all environments (in fact, you've guaranteed you aren't). If an issue crops up with a deployment to one environment, you can no longer isolate the issue to the configuration alone as the binary could have changed as well. You could argue that the web.config isn't really part of the binary, but if it's in the cspkg, I would classify it as such.
-
Ryan Anthony commented
In addition, I'd like to see a "Run a PowerShell script for Azure" step type that does a similar job that BootstrapDeployToAzure.ps1 does when you do a "Deploy to Windows Azure", only it just runs a custom script.
We have a situation where we are pushing the same cloud service to multiple regions (all behind Azure Traffic Manager), and would like to Swap all of the Cloud Services once they are all running (i.e. WaitForRoleInstancesReady).
-
Hakan Lindestaf commented
Not sure if this was covered elsewhere, but a way to speed up Azure deployment (with multiple instances) would be not trigger all updates, but not wait for the result until the last step (like an async-checkbox on the steps that are started in the background). I have several instances (different cloud services) that I have to do sequentially today because there's no other option in Octopus, but if I could trigger them all and then wait for them all to finish then I could significantly cut my overall deployment time.
-
David Peden commented
For variable substitutions, you'll want to consider the fact that a single web role can contain multiple sites. For proper support, you'd need to add another axis to your scope or some other strategy for defining distinct substitutions per site for a given role.
-
David Pfeffer commented
Supporting something like https://github.com/MRCollective/AzureWebFarm.OctopusDeploy natively would be fantastic. We're currently building out tooling around this at FunnelFire, because Azure deployments are slooooow and using Octopus to do the deploy would be much faster, not to mention better for release management.
-
Henrik Poulsen commented
Support for Azure Pack would be nice as well.
-
John Korsnes commented
Some other nice features we have added manually by modifying DeployToAzure.ps1 is:
- Wait until all instances are ready before executing the swap. We don't want to swap our staging to production if they are not a) Reporting state Ready b) IIS is warmed up. We've solved this a) polling the Azure instances for their state and b) doing http requests against the staging slot on a set of URLs, so that the first user does not get the usual warmup penalty hit.
A bit like this fork of DeployToAzure.ps1, but we added smoke tests to the staging slot as well.
-
Andrew Armstrong commented
+1 to both
I'd also love to see a "shutdown staging after X minutes" option.