During the first decade of the 21st century, agile methodologies changed the way developers design, build and test software. Since then, we have seen the adoption of cloud platforms by consumer internet companies and the acceleration of deployment frequencies from yearly to hourly (what Kent Beck calls Software G Forces). In response, agile has evolved into a movement known as DevOps, where developers and IT Professionals work together more closely, sharing goals, processes and tools.

At Microsoft, we have been practicing DevOps internally for years, and have gradually built and integrated many of the tools and processes that are needed to adopt a DevOps approach into our products and services. At Microsoft Techdays, Patrick Chanezon recently gave an overview of how to use Microsoft platforms and open source tools together to implement a DevOps approach.

DevOps full

DevOps was also one of the most important themes at our //Build 2014 and TechEd conferences this year. Here’s a recap of a few of the announcements we made:

· Scott Guthrie gave an early preview of the new Microsoft Azure portal during his keynote. Check out Brian Keller’s blog for an in-depth explanation of how to build your dream DevOps dashboard with the new Azure Preview Portal

· Microsoft Open Technologies and the Azure team worked with Chef and Puppet to make it very easy to use with Azure. See the Build Puppet Keynote demo, and Mark Russinovich Chefconf 2014 demo. You can also check out the new Microsoft Open Technologies DevOps landing page, which provides details not only about how to leverage Chef and Puppet, but also how to use Vagrant, Salt, Jenkins and other open source DevOps technologies with Microsoft platforms.

· Throughout his keynote at TechEd, Brad Anderson called out the importance of DevOps: as part of his discussion about IT Pros in a mobile-first, cloud-first world; during announcements for Visual Studio and Visual Studio Online where he reinforced the importance of closer collaboration between developers and operations to benefit business and the customer; and with the Ibiza demo, which was truly one of the great DevOps highlights.

· Infrastructure as code is critical in implementing a DevOps approach and Microsoft Azure Resource manager allows you to describe a complex system made up of many Azure resources – such as a website, a database, and a message queue – as one declarative resource template expressed in a simple JSON based syntax. You can also specify parameters when deploying the template. Checkout the demo here.

Speaking of the Azure Resource Manager template, below is an example taken from the WordPress.WordPress.0.2.0-preview. One of the first things you’ll notice is that the WordPress template specifies an Azure Website, where WordPress will execute, and a ClearDB-hosted MySQL service instance from the Azure marketplace, to host the WordPress database. The file also includes many application specific parameters, in this case Wordpress configuration parameters:

"resources": [
    {
      "apiVersion": "2014-04-01",
      "name": "[parameters('databaseName')]",
      "type": "SuccessBricks.ClearDB/databases",.
      "plan": {
        "name": "[parameters('databaseSku')]"
      },
      "location": "[parameters('databaseLocation')]",
      "tags": {
        "provision_source": "RMS"
      }
    },
    {
      "apiVersion": "2014-04-01",
      "name": "[parameters('hostingPlanName')]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[parameters('siteLocation')]",
      "properties": {
        "name": "[parameters('hostingPlanName')]",
        "sku": "[parameters('sku')]",
        "workerSize": "[parameters('workerSize')]",
        "numberOfWorkers": 0
      }
    },

Where it gets interesting is that you can also specify things like scaling policies automatically. This is where the IT professional and developer should collaborate on parameters needed to tune production deployment.

"profiles": [
          {
            "name": "Default",
            "capacity": {
              "minimum": "1",
              "maximum": "2",
              "default": "1"
            },
            "rules": [
              {
                "metricTrigger": {
                  "metricName": "CpuPercentage",
                  "metricResourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                  "timeGrain": "PT1M",
                  "statistic": "Average",
                  "timeWindow": "PT10M",
                  "timeAggregation": "Average",
                  "operator": "GreaterThan",
                  "threshold": 80.0
                },
                "scaleAction": {
                  "direction": "Increase",
                  "type": "ChangeCount",
                  "value": "1",
                  "cooldown": "PT10M"
                }
              },
              {
                "metricTrigger": {
                  "metricName": "CpuPercentage",
                  "metricResourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                  "timeGrain": "PT1M",
                  "statistic": "Average",
                  "timeWindow": "PT1H",
                  "timeAggregation": "Average",
                  "operator": "LessThan",
                  "threshold": 60.0
                },
                "scaleAction": {
                  "direction": "Decrease",
                  "type": "ChangeCount",
                  "value": "1",
                  "cooldown": "PT1H"
                }
              }
            ]
          }
        ],

The IT professional can simply deploy the template, with PowerShell, or the Azure Cross-Platform CLI, specifying the parameters they want for their deployments.

azure group create MyGroupName "MyDataCenter" -y WordPress.WordPress.0.2.0-preview
 -d MyDeployment -e params.json

More details are available on the Microsoft Azure website.

With Microsoft specific technologies like Visual Studio Online, Microsoft Azure, System Center, and PowerShell, as well as integrations with the most widely used tools from the open source ecosystem, such as Chef, Puppet, Vagrant and Jenkins, the Microsoft Cloud OS platform allows organizations to adopt a DevOps approach in public, private or hybrid cloud environments, using the tools they want.

For IT professionals in operations who are interested in growing their career in this direction, Volker Will started a series of blog posts about People, Processes and Products, titled "The Three Musketeers of DevOps". And for developers, Brian Keller’s blog is a good starting point.