In this long read we explore how Microsoft is offering a full DevOps experience within its Azure product. Azure DevOps is a Microsoft Azure cloud service that enhances your application development life cycle and enables DevOps capabilities. This long read is sampled from Sjoukje Zaal, Stefano Demiliani, and Amit Malik, authors of the book Azure DevOps Explained.
In 2009 Patrick Debois coined the term “DevOps” to refer to a new paradigm in IT culture, involving the closer integration of development and operations alongside a commitment to Agile working. Short for development and operations, DevOps is a natural extension of Agile and continuous delivery approaches that merges development, IT operations, and quality assurance into a single set of processes:
Today the combination of Agile and DevOps has largely supplanted more waterfall-style methodologies, which proved difficult to reconcile with the fact that customers often don’t know exactly what their requirements are before they see working software. That uncertainty can result in changing requirements, leading to redesign, reimplementation, and reverification. This can dramatically increase the costs of a project.
In Agile development, all stakeholders, including developers, administrators, testers, and a representative of the customer, are part of the same team. Applications are delivered in functional components, and rather than creating schedules and tasks at the start of the project, the project is divided into smaller phases, called sprints. The duration of each sprint is defined up front and has a list of deliverables that are planned at the start of each sprint. All those deliverables are defined together with the customer and prioritized by business value by the customer. At the end of each sprint, when work is completed, the work is reviewed and evaluated by the team through daily builds and end-of-sprint demos.
This gives a number of advantages:
- By working directly with the project team throughout the whole project, the customer experiences a stronger sense of ownership;
- The customer has opportunities to see the work being delivered early on in the project and can make appropriate decisions and changes to it;
- Development is more business- and value-focused. This is a result of working closer with the customer and having a better understanding of their needs.
- An Agile way of working enables the rapid creation of a base version of the product, which can be built upon in subsequent iterations.
DevOps places particular emphasis on automation, including automation of deployment through continuous integration (CI) and continuous delivery (CD). CI is used in the development phase of a project and refers to building and testing code in a fully automated way. Every time you commit changes to the master branch, the changes will be validated and then packaged into a build artifact automatically. With CD, the delivery phase is automated. Every time a build artifact is available, the artifact is automatically deployed to the desired environment. When CI/CD is used by development teams, the code remains ready for production at any time. The only thing that teams must do to deploy a working application into production is trigger the transition from development to deploy. This will make the automated build artifact available for deployment. This triggering can be as simple as pressing a button.
Introducing Azure DevOps
Azure DevOps provides a wide variety of services for DevOps teams so that they can plan work, collaborate on code development, and build and deploy software and services. Most DevOps teams rely on several tools, and build custom toolchains for each phase in the application life cycle.
The following diagram shows the main phases of the application life cycle:
Application life cycle
In the following sections we’ll explain these phases and the corresponding Microsoft tooling and products in more detail.
During the planning phase, teams can use Kanban boards and backlogs to define, track, and lay out the work that needs to be done in Azure Boards. They can also use GitHub for this. In GitHub, an issue can be created by suggesting a new idea or stating that a bug should be tracked. These issues can be organized and assigned to teams.
The development phase is supported by Visual Studio Code and Visual Studio. Visual Studio Code is a cross-platform editor, while Visual Studio is a Windows- and Mac-only IDE. You can use Azure DevOps for automated testing and use Azure Pipelines to create automatic builds for building the source code. Code can be shared across teams with Azure DevOps or GitHub.
The delivery phase is about deploying your applications and services to target environments. You can use Azure Pipelines to deploy code automatically to any Azure service or on-premises environments. You can use Azure Resource Manager templates or Terraform to spin up environments for your applications or infrastructure components. You can also integrate Jenkins and Spinnaker inside your Azure DevOps Pipelines.
In this phase, you implement full-stack monitoring of your applications and services. You can also manage your cloud environment with different automation tools, such as Azure Automation, Chef, and more. Keeping your applications and services secure is also part of this phase. For this you can use features and services such as Azure Policy and Azure Security Center.
To support the full life cycle of analyzing, designing, building, deploying, and maintaining software and infrastructure products and services, Azure DevOps provides integrated features that can be accessed through any web browser.
Azure DevOps offers a combination of solutions and tooling that can be used to create unique and custom workflows throughout each of the application life cycle phases. These solutions will be described in the upcoming sections.
Continuous integration and continuous delivery (CI/CD)
With Azure DevOps you can automate the entire deployment process, from code commit to production. The trigger between the development and delivery phase is completely automatic. So, when code changes are validated and pass all the tests that are performed during the development phase, the changes will be published to production automatically as well. This means that customers will receive the new version, along with the improvements that accompany it, as soon as they are available.
Agile development support
Azure DevOps supports teams that adopt Agile development methods with planning, tracking, and reporting capabilities. This results in shorter release cycles and full visibility in the software development process. You can use Azure Boards, which will be covered in more detail in the next section, to manage backlogs and to define, assign, and track work items. You can also use advanced analytics and reporting and create custom dashboards to track progress.
A version control system, also known as a source control system, is an essential tool for multi-developer projects. It allows developers to collaborate on the code and track changes. The history of all the code files is also maintained in the version control system. This makes it easy to revert to a previous version of the code files should errors or bugs arise.
Azure DevOps supports two different types of source control: Git (distributed) and Team Foundation Version Control (TFVS). With Git, each developer has a copy of the source repository on their development machine. All branch and history information is included inside the source repository. Each developer works directly with their copy of the repository and all the changes are shared between the local and source repositories as a separate step. Changes can be committed on the local filesystem, and version control operations can be executed without a network connection. Branches can be created easily on the dev machine and later, they can be merged, published, or disposed by the developer independently. With TFVC, developers have only one version of each file on their local dev machines. All the others, as well as the historical data, are maintained only on the server. The branches are created on the server as well.
Infrastructure as Code
Teams can also manage the infrastructure in Azure DevOps. Infrastructure components that are used in a project, such as networks, virtual machines, and load balancers, can be managed using the same versioning features and capabilities that are used for source code.
Used together with continuous delivery, an Infrastructure as Code (IaC) model generates the same environment every time it is deployed. Without IaC, teams need to configure and maintain the settings of all the individual deployment environments manually, which is time-consuming and error-prone. The most plausible outcome is that, over time, each environment becomes a snowflake, which is a unique configuration that cannot be reproduced automatically. This inconsistency across environments will lead to issues during the deployment phase.
Configuration management refers to all the items and artifacts that are relevant to the project and the relationships between them. Those items are stored, retrieved, and uniquely identified and modified. This includes items such as source code, files, and binaries. The configuration management system is the one true source of configuration items.
Using Azure DevOps, resource configuration across the entire system can be managed by teams to roll out configuration updates, enforce desired states, and automatically resolve unexpected changes and issues. Azure offers multiple DevOps tools and capabilities for configuration management, such as Chef, Puppet, Ansible, and Azure Automation.
You can use Azure Monitor to practice full-stack continuous monitoring. The health of your infrastructure and applications can be integrated into existing dashboards in Grafana, Kibana, and the Azure portal with Azure Monitor. You can also monitor the availability, performance, and usage of your applications, whether they are hosted on-premises or in Azure. Most popular languages and frameworks are supported by Azure Monitor, such as .NET, Java, and Node.js, and they are integrated with DevOps processes and tools in Azure DevOps.
Discovering Azure DevOps services
In this section, we are going to introduce the different services that are offered by Azure DevOps. These services can be used to support teams throughout the whole life cycle of realizing business value for customers.
Azure Boards can be used to plan, track, and discuss work across teams using the Agile planning tools that are available. Using Azure Boards, teams can manage their software projects. It capabilities include native support for Scrum and Kanban. You can also create customizable dashboards, and it offers integrated reporting and integration with Microsoft Teams and Slack.
You can use Azure Boards to create and track user stories, backlog items, tasks, features, and bugs that are associated with the project.
The following screenshot shows an example of an Azure Board:
Azure Repos provides support for private Git repository hosting and for Team Foundation Server Control (TFSC). It offers a set of version control tools that can be used to manage the source code of every development project, large or small. When you edit the code, you ask the source control system to create a snapshot of the files. This snapshot is saved permanently so that it can be recalled later if needed.
Today, Git is the most used version control system among developers. Azure Repos offers standard Git so that developers can use the tools and clients of their choice, such as Git for Windows, Mac, third-party Git services, and tools such as Visual Studio and Visual Studio Code.
The following screenshot shows an example of the commits you can push to a repo in Azure:
You can use Azure Pipelines to automatically build, test, and deploy code to make it available to other users and deploy it to different targets, such as a development, test, acceptance, and production (DTAP) environments. It combines CI/CD to automatically build and deploy your code.
The following screenshot shows an example of a run for an Azure Pipeline:
Azure Test Plans
With Azure Test Plans, teams can improve their code quality using planned and exploratory services in Azure DevOps. Azure Test Plans offer features for planned manual testing, exploratory testing, user acceptance testing, and for gathering feedback from stakeholders. With manual testing, tests are organized into test plans and test suites by testers and test leads. Teams can begin testing from their Kanban boards or directly from the Work Hub. With user acceptance testing, the value delivered to meet customer requirements is verified. This is usually done by designated testers. Exploratory testing includes tests that are executed by the whole development team, including developers, product owners, and testers. The software is tested by exploring the software systems without the use of test plans or test suites. Stakeholder feedback gathering is done outside the development team by marketing or sales teams. Developers can request feedback on their user stories and features from Azure DevOps. Stakeholders can then respond directly to the feedback item.
The following screenshot shows an example of an Azure Test Plan:
Azure Test Plan
With Azure Artifacts, you can create and share NuGet, npm, Python, and Maven packages from private and public sources with teams in Azure DevOps. These packages can be used in source code and can be made available to the CI/CD pipelines. With Azure Artifacts, you can create multiple feeds that you can use to organize and control access to the packages.
The following screenshot shows an example of a feed in Azure Artifacts:
You can download extensions for Azure DevOps from the Visual Studio Marketplace. These extensions are simple add-ons that can be used to customize and extend your team’s experience with Azure DevOps. They can help by extending the planning and tracking of work items, code testing and tracking, pipeline build and release flows, and collaboration among team members. The extensions are created by Microsoft and the community.
The following screenshot shows some of the extensions that can be downloaded from the marketplace:
In this introduction we’ve learnt what DevOps is, and have seen how the Azure ecosystem is able to support teams throughout each phase of the application life cycle in a DevOps context. Source control, testing, hosting, sprint management, CI/CD: Azure DevOps provides services that support all these and more.
Implement real-world DevOps and cloud deployment scenarios using Azure Repos, Azure Pipelines, and other Azure DevOps tools
○ Improve your application development life cycle with Azure DevOps in a step-by-step manner
○ Apply continuous integration and continuous deployment to reduce application downtime
○ Work with real-world CI/CD scenarios curated by a team of renowned Microsoft MVPs and MCTs
Find out how you can leverage virtual machines and load balancers to facilitate secure and efficient networking.
○ Discover the latest networking features and additions in Microsoft Azure with this updated guide
○ Upgrade your cloud networking skills by learning how to plan, implement, configure, and secure your infrastructure network
○ Provide a fault-tolerant environment for your apps using Azure networking services.
Become a certified Azure Architect and learn how to design effective solutions that span compute, security, networking, and development.
○ Discover how you can design and architect powerful and cost-effective solutions on Microsoft Azure
○ Prepare to achieve AZ-303 certification with the help of mock tests and practice questions
○ Enhance your computing, networking, storage, and security skills to design modern cloud-based solutions