Introducing Azure DevOps key concepts
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
Azure DevOps, evolved from Visual Studio Team Services (VSTS), is Microsoft’s comprehensive suite of development and operations services. This SaaS solution, complemented by an on-premises version known as Azure DevOps Server, supports the entire application lifecycle from planning to deployment. It offers a broad range of tools for project management, code collaboration, continuous integration, and continuous delivery, making it an essential platform for DevOps teams aiming to streamline their workflows and accelerate software delivery.
The term Azure DevOps might cause confusion, as it is sometimes mistakenly referred to as “Azure” or “DevOps.” It is important to note that Azure DevOps is distinct from Azure, Microsoft’s cloud computing service, and specifically focuses on facilitating DevOps practices. Offering flexibility, Azure DevOps integrates seamlessly with various Microsoft and third-party tools, allowing teams to customize their development toolchains. Whether for small projects or complex systems, Azure DevOps delivers the scalability and versatility required for modern software development services.
Most DevOps teams rely on several tools and build custom toolchains for each phase in the application life cycle.
Azure DevOps Application Lifecycle
The following diagram shows the phases that are defined in the application life cycle:
In the following sections, we will explain these phases and the corresponding Microsoft tooling and products in more detail.
- Plan: During the planning phase, teams can leverage Azure Boards, a service within Azure DevOps that provides tools for work tracking, including boards and backlogs. This enables the definition, tracking, and organization of work that needs to be completed. Teams can outline their tasks using Azure Boards to create a visual representation of their workflow and priorities. Additionally, for those integrating with GitHub, an issue can be raised to suggest innovative ideas or track bugs. These issues can then be systematically organized and assigned within teams, ensuring clear communication and task management. Azure Boards is designed to facilitate agile project management, allowing teams to efficiently plan, execute, and monitor their work throughout the software development lifecycle.
- Develop: The development phase is facilitated by a variety of integrated development environments (IDEs) and editors, among which Visual Studio Code and Visual Studio are prominent examples used by .NET developers. Visual Studio Code serves as a cross-platform editor, offering versatility across different operating systems, whereas Visual Studio provides a comprehensive development environment, available for Windows and Mac users. Beyond these, developers have the freedom to choose from a wide array of IDEs that best suit their project’s needs and their personal preferences.
For automating testing and building processes, Azure DevOps introduces Azure Pipelines, enabling the creation of automated builds to compile the source code efficiently. Furthermore, code collaboration and sharing among teams are streamlined through Azure DevOps and GitHub, providing robust platforms for version control and project management. This diverse toolkit ensures that developers can maintain productivity and flexibility, adapting their workflow to the specific demands of their projects.
- Deliver: The deliver phase encompasses deploying applications and services to their intended environments, which may include cloud platforms, on-premises infrastructures, and also target devices for desktop or mobile applications. Azure Pipelines facilitates the automation of code deployment across various environments, including any Azure service, on-premises setups, and even to desktop or mobile platforms. For provisioning and managing infrastructure, Azure Resource Manager templates or Terraform can be employed to efficiently prepare environments for your applications, whether they are cloud-based, desktop, or mobile. Additionally, Azure DevOps Pipelines offer the flexibility to integrate with external tools like Jenkins and Spinnaker, enhancing the deployment process with powerful automation and orchestration capabilities. This approach ensures that delivery is seamless and adaptable, catering to the diverse needs of modern software development projects.
- Operate: In the operational phase, establishing comprehensive monitoring and alerting systems is crucial to ensure the health and performance of your applications and services across the entire technology stack. “Full stack” monitoring means tracking the functionality and efficiency of all components, from the user interface down to the backend databases and infrastructure, to identify and resolve issues promptly.
While Azure DevOps facilitates continuous integration and delivery, it’s important to note that its use is not limited to Azure-hosted applications. Developers can deploy applications to a variety of environments, including non-Azure cloud services, on-premises servers, and even to desktop or mobile platforms.
After explaining the fundamental stages of Plan, Develop, Deliver, and Operate, it is essential to comprehend how these phases align with broader development methodologies, specifically Continuous Integration/Continuous Delivery (CI/CD), Agile development support, Version control, and Infrastructure as Code. These methodologies are not merely extra procedures but rather essential components of the DevOps lifecycle, improving effectiveness, cooperation, and the quality of the product.
Continuous integration and continuous delivery (CI/CD)
In the Azure DevOps environment, IT professionals can automate all aspects of the DevOps process through Continuous Integration (CI) and Continuous Delivery (CD), with the option for Continuous Deployment as an additional step. These practices serve as the foundation for modern software development, ensuring efficiency, reliability, and speed in the delivery of applications.
Continuous Integration (CI) is a technique employed during the application development phase. It involves automatically building and testing code whenever a change is made to the main branch, ensuring seamless integration of new code changes with the existing codebase. This practice’s objective is to quickly identify and resolve integration errors, thereby maintaining software quality and enabling development teams to deliver software at a faster and more dependable pace.
When modifications are made to the primary branch, now called “main” to align with updated industry terminology, they undergo automatic validation. This validation process involves compiling the code to identify any errors and conducting automated tests to ensure that the changes do not disrupt or degrade the application. Once the validation is successful, the code can be built and optionally packaged into a deployable artifact. This artifact represents a version of the code that can be transferred to different environments for further testing or release.
Continuous Delivery (CD) builds upon Continuous Integration (CI) by automating the deployment of applications to specific environments, such as test or staging environments. CD streamlines the necessary steps for deploying a build artifact to these environments, allowing teams to verify that their application can be deployed at any given time. However, unlike Continuous Deployment, Continuous Delivery does not automatically deploy the application to production. Instead, it prepares all the required deployment steps so that the release to production can be easily triggered manually, for example, by pressing a button. This approach grants teams’ greater control over the timing and manner of changes being released.
Continuous Deployment is an extension of Continuous Delivery that automates the deployment of applications to production without the need for manual intervention. With Continuous Deployment, any change that successfully passes through all stages of the production pipeline is automatically released to customers. This allows for a quick feedback loop with end users. Continuous Deployment is particularly beneficial for teams that have confidence in their testing and release processes and want to speed up the release cycle even more.
In summary, Continuous Integration involves automatically building and testing code with each commit to ensure that the software is always ready for release. Continuous Delivery automates the process leading up to the release but still requires manual triggering for deployment. Continuous Deployment takes it a step further by automatically deploying every change to production, eliminating the need for manual intervention in the release process.
Agile development support
Azure DevOps enhances the effectiveness of Agile development approaches by providing a wide range of capabilities for planning, monitoring, and reporting. This results in more streamlined release cycles and complete transparency throughout the software development process. It is important to note that while Azure DevOps can also be used for project management, its main strength lies in supporting Agile practices. Azure Boards, which will be further discussed later, is a crucial tool for managing sprints, including tasks like backlog management and the allocation and monitoring of work items. Moreover, the platform offers advanced analytics, reporting features, and the ability to create personalized dashboards for tracking development progress.
Version control
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 go back to a different version of the code files in case of errors or bugs.
Azure DevOps supports two diverse types of source control: Git (distributed) and Team Foundation Version Control (TFVC). With Git, each developer has a copy of the source repository on their development machine. All branch and history information are 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 of by the developer separately. 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 utilize Azure DevOps for managing infrastructure tasks, streamlining the handling of components like networks, virtual machines, and load balancers. By employing version control features like those used for source code, teams can effectively manage infrastructure elements. This integration enables the adoption of Infrastructure as Code (IaC) practices, with languages such as ARM Templates, Bicep, CloudFormation, and Terraform, which ensure consistent and repeatable environment deployments.
Incorporating IaC with continuous delivery practices enables the automatic creation of identical environments with each deployment. This approach eliminates the need for manual configuration and deployment of individual environment settings and infrastructure, which is time-consuming and prone to errors. Without IaC, the result is the development of unique “snowflake” environments with irreproducible configurations, leading to inconsistencies and deployment challenges. By utilizing IaC, teams can avoid these issues, ensuring consistency across all deployment environments and reducing deployment-related problems.
Configuration Management
Configuration Management involves the supervision and upkeep of all the vital components and artifacts necessary for a project. Its main goal is to ensure these elements are stored, accessible, and uniquely identifiable systematically. This process allows for the tracking and modification of various elements, including source code, documentation, and executable binaries. Essentially, Configuration Management serves as the definitive repository for these configuration items, guaranteeing their integrity and traceability throughout the entire project lifecycle.
Azure DevOps empowers teams to effectively manage and synchronize resource configurations across their entire infrastructure. It enables the implementation of configuration changes, the enforcement of desired states, and the automatic rectification of any discrepancies or issues that may arise. While Azure DevOps provides a comprehensive suite of tools for efficient configuration management, it seamlessly integrates with external tools like Azure Automation to enhance its capabilities. However, it is important to note that although tools such as Chef, Puppet, and Ansible can be used alongside Azure services, they are independent entities and not directly affiliated with Azure or Azure DevOps. This integration allows for a more robust and flexible approach to configuration management.
Monitoring
Azure Monitor offers comprehensive and continuous monitoring for your entire technology stack, providing valuable insights into the well-being of both your infrastructure and applications. It seamlessly integrates with popular dashboards like Grafana and Kibana, as well as the Azure portal, allowing you to have a unified view of your system’s health. This powerful tool supports the monitoring of application availability, performance, and usage metrics, and can be used in various hosting environments, including on-premises and Azure cloud services.
It’s important to note that Azure Monitor is not the only application performance management (APM) tool available in the Azure ecosystem. However, its deep integration with Azure services makes it stand out. While focusing on Azure Monitor in the context of Azure DevOps doesn’t mean you can’t use other APM tools, it emphasizes the seamless connectivity and valuable insights that Azure Monitor provides for applications developed and deployed in Azure or elsewhere.
Azure Monitor provides support for various programming languages and frameworks, such as .NET, Java, and Node.js. This ensures compatibility with the most widely used technologies in modern development environments. The ability to integrate monitoring directly into the DevOps lifecycle is essential, as it offers real-time feedback on performance problems and operational health within Azure DevOps workflows. This integration plays a crucial role in enabling a more agile and responsive DevOps process. It allows teams to swiftly identify and resolve issues as part of their continuous integration and deployment (CI/CD) pipelines.