Introduction
With the advent of Azure DevSecOps, Microsoft has equipped developers with essential tools for integrating continuous integration (CI) and continuous delivery (CD) into their development workflows. Azure DevSecOps pipelines, a key feature of this service, can be constructed in two distinct ways: the widely used “classic” pipeline and the newer, YAML-based multi-stage pipeline, which is currently in its preview phase.
Classic Pipelines: An Overview
Classic pipelines in Azure DevSecOps are divided into two types: build and release pipelines. Build pipelines are employed for CI, performing tasks such as executing builds, running unit tests, and conducting static code analysis before code integration. Release pipelines take over for CD, deploying the build artifacts to different environments for testing and eventually pushing them to production after rigorous validation.
Despite their robustness, classic pipelines exhibit certain limitations. The GUI tooling for build and release pipelines lacks a unified interface, with different user experiences for each. While the build pipeline allows both GUI and YAML definitions, the release pipeline is restricted to GUI only.
The Rise of Multi-Stage Pipelines
To address these inconsistencies, Microsoft introduced multi-stage pipelines. This innovative approach allows engineers to define build, release, or combine pipelines within a single YAML document, leading to a more cohesive development experience. The advantages of adopting YAML for Azure DevSecOps pipelines are manifold, and here are the top 10 reasons to consider it for your next pipeline:
- Version History Tracking
With YAML, tracking the historical changes of your pipeline becomes effortless. Source control enables a comprehensive view of your pipeline’s evolution over time. - Easy Difference Analysis
Identifying when and why a build issue started is simpler with YAML. You can compare current and past definitions to quickly pinpoint and address problems. - Responsibility Attribution
YAML facilitates the identification of who made specific changes and who approved them, aiding in quicker issue resolution and maintaining focus on the original objectives. - Integration with Work Items
Linking changes in the pipeline to specific user stories or tasks provides clear context for each modification, eliminating guesswork about the reasons behind a change. - Effortless Rollback
If a recent change causes issues, YAML allows for a swift rollback to a previous stable version, ensuring minimal downtime. - Embracing Code for Everything
With your application, infrastructure, and now pipelines as code in the same repository, recreating past environments and deployments becomes a streamlined process. - Ease of Reuse and Sharing
Sharing and duplicating YAML pipelines is as easy as copying and pasting text, enabling efficient collaboration among team members. - Collaborative Modifications
YAML supports multiple engineers working on the same pipeline, with source control platforms providing tools to manage and merge any conflicts effectively. - Enhanced Peer Reviews
Just like application code, pipelines benefit from peer reviews. YAML pipelines can be scrutinized through pull requests, ensuring thorough team vetting before implementation. - Flexible Experimentation with Branching
Test out new ideas in separate branches with YAML pipelines. If an experiment fails, you can discard the branch without impacting the main pipeline.
Conclusion
Although still in preview, YAML-based pipelines offer significant benefits over the classic GUI-based approach, particularly for larger organizations. Their integration into source control, along with the numerous advantages listed above, make YAML an excellent choice for your next Azure DevSecOps pipeline project.