Throughout this chapter, we have been looking at how we can encode infrastructure in script files and ARM templates that then allow us to automate deployments using those artifacts. This process is often referred to as Infrastructure as Code (IaC) and fits well with agile-based delivery mechanisms as it provides the ability to build solutions iteratively.
Another related discipline is immutable infrastructure, which dictates that no changes should be made to existing infrastructure. When changes are required, the amendments should be made to the code that describes the system, and the existing infrastructure should then be completely destroyed and then re-deployed using the update code. This not only enforces the use of IaC but it also ensures that any changes are always encoded.
If, therefore, we are building out systems using code, we can start to utilize software development tools and technologies. Together, the tools and processes we employ are called DevOps, which is a combination of development and operations.
There are a number of DevOps toolsets available in the marketplace, and Microsoft has their own, known as Azure DevOps.
Information note
Technically Microsoft has two DevOps platforms: Azure DevOps and more recently GitHub, which they acquired in 2018. Whereas GitHub is often used by open source developers who wish to freely distribute code, Azure DevOps is more often used by teams working on private projects, although, of course, it is never quite that straightforward as both platforms offer free and paid tiers and public and private projects.
Azure DevOps brings together a whole range of the following developer tools into one integrated platform:
- Azure Boards: Helps plan and track team workloads through a suite of agile and Scrum management tools such as backlog tracking and Kanban boards.
- Azure Repos: Offers source control of code using Git repositories or Team Foundation Version Control (TFVC).
- Azure Pipelines: Automated build and release integration with Azure and many other vendors to manage and control builds and deployments.
- Azure Test Plans: Tracking and management of tests against your solution.
- Azure Artifacts: Share pre-compiled code packages or libraries such as NuGet, Maven, and npm.
As we can see from this high-level list of tools, Azure DevOps provides a range of services to help manage the end-to-end development life cycles. From an architectural perspective, we are most concerned with the elements that might affect how we build our solution; therefore, we shall look at the two key elements around code storage and deployment, namely, Azure Repos and Azure Pipelines.
Leave a Reply