Lesson300 words
Migrating classic pipelines to YAML
Migrate a pipeline from classic to YAML
Why migrate
YAML lives with the application code and follows the repository's branching structure. Treat it as code: review pipeline steps, dependencies, permissions, and changes before merge.
Behavioral differences
| Classic release | YAML | |
|---|---|---|
| Multiple jobs in one stage | Run in sequence | Eligible to run in parallel unless dependsOn is set |
| Job dependencies | Not supported | dependsOn |
| Task groups | Supported | Not supported — use templates |
| Definition lives in | The UI | The repository |
Actual YAML concurrency also needs available agents and organization-level parallel-job capacity; otherwise eligible jobs queue. Because jobs can run on different agents, restore every required ordering or shared-state dependency explicitly.
Start with the right export
- Classic build designer supports full YAML export as a starting draft.
- Classic release does not support full-definition YAML export; export each task individually and assemble the YAML pipeline.
A risk-controlled migration
- Inventory stages, tasks, artifacts, variables, schedules, triggers, service connections, approvals, and resource authorizations.
- Export the Classic build definition or the Classic release tasks as supported.
- Reconstruct task groups as YAML templates; restore required
dependsOnedges. - Redefine variables in YAML or pipeline settings. Use variable groups when values are shared, protect secrets, and review YAML's default UTC schedule behavior.
- Keep Classic serving production while validating YAML with equivalent inputs in nonproduction or dry run. Compare artifacts, behavior, controls, schedules, variables, dependencies, and authorizations.
- Perform a controlled cutover, retire Classic, and consider disabling creation of new Classic pipelines.
The validation path must not execute duplicate non-idempotent production effects.
Primary sources
- https://learn.microsoft.com/en-us/credentials/certifications/resources/study-guides/az-400
- https://learn.microsoft.com/en-us/azure/devops/pipelines/release/from-classic-pipelines
- https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/pipelines-get-started
- https://learn.microsoft.com/en-us/azure/devops/pipelines/process/phases
- https://learn.microsoft.com/en-us/azure/devops/pipelines/release/task-groups
- https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables
- https://learn.microsoft.com/en-us/azure/devops/pipelines/licensing/concurrent-jobs
- https://learn.microsoft.com/en-us/azure/devops/pipelines/security/overview