|
| 1 | +--- |
| 2 | +author: gloridelmorales |
| 3 | +ms.author: glmorale |
| 4 | +ms.date: 6/16/2025 |
| 5 | +ms.topic: include |
| 6 | +--- |
| 7 | + |
| 8 | +### Managed DevOps Pools - Image Deprecations |
| 9 | + |
| 10 | +Due to [Windows Server 2019 hosted image deprecation](/azure/devops/release-notes/2025/pipelines/sprint-256-update#windows-server-2019-hosted-image-deprecation-schedule) and [Ubuntu 20.04 deprecation](/azure/devops/release-notes/2025/pipelines/sprint-253-update#the-ubuntu-2004-pipeline-image-is-deprecated-and-will-be-retired-april-1), Managed DevOps Pools is deprecating the “Azure Pipelines – Windows Server 2019” image and Ubuntu 20.04 images. More details about the deprecations can be found [here](/azure/devops/managed-devops-pools/configure-images?view=azure-devops&branch=main&tabs=azure-portal#image-deprecation-schedule). You can read about life cycle of images offered by Managed DevOps Pools [here](/azure/devops/managed-devops-pools/configure-images?view=azure-devops&branch=main&tabs=azure-portal#image-lifecycle). |
| 11 | + |
| 12 | +### New Triggers page |
| 13 | + |
| 14 | +YAML pipelines provide you multiple powerful options to define when your pipeline should run. It's not always easy to reason if your pipeline is configured to run in response to an event, for example, a feeder pipeline completed. |
| 15 | + |
| 16 | +This sprint, were introducing a **Triggers** page that gives you an overview of what triggers you have defined in your pipeline. |
| 17 | + |
| 18 | +> [!div class="mx-imgBorder"] |
| 19 | +> [](../../media/257-pipelines-01.png#lightbox) |
| 20 | +
|
| 21 | +Imagine you have the following YAML pipeline defined in the `main` branch of a repo. Consider there's also a `feature` branch that has the same YAML pipeline code. |
| 22 | + |
| 23 | +```yaml |
| 24 | +trigger: |
| 25 | +- main |
| 26 | + |
| 27 | +schedules: |
| 28 | + - cron: 0 0 * * * |
| 29 | + always: true |
| 30 | + displayName: Nightly build |
| 31 | + branches: |
| 32 | + include: |
| 33 | + - main |
| 34 | + |
| 35 | +resources: |
| 36 | + pipelines: |
| 37 | + - pipeline: FabrikamFiber |
| 38 | + source: FabrikamFiber |
| 39 | + trigger: true |
| 40 | +``` |
| 41 | +
|
| 42 | +When you navigate to the **Triggers** page, you see the following |
| 43 | +
|
| 44 | +> [!div class="mx-imgBorder"] |
| 45 | +> [](../../media/257-pipelines-02.png#lightbox) |
| 46 | +
|
| 47 | +Notice the default branch of the pipeline, `main`, is preselected. |
| 48 | + |
| 49 | +You see there is a _Continuous integration trigger_ for this branch, and it's defined in the YAML file. |
| 50 | + |
| 51 | +When you navigate to the _Schedule triggers_, you see there are triggers defined, and you can see their details. |
| 52 | + |
| 53 | +> [!div class="mx-imgBorder"] |
| 54 | +> [](../../media/257-pipelines-03.png#lightbox) |
| 55 | + |
| 56 | +When you navigate to the _Resource triggers_ section, you see the defined resource triggers and their details. |
| 57 | + |
| 58 | +> [!div class="mx-imgBorder"] |
| 59 | +> [](../../media/257-pipelines-04.png#lightbox) |
| 60 | + |
| 61 | +You can switch branches, from `main` to `feature`, to see what triggers you defined for the `feature` branch. |
| 62 | + |
| 63 | +> [!div class="mx-imgBorder"] |
| 64 | +> [](../../media/257-pipelines-05.png#lightbox) |
| 65 | + |
| 66 | +> [!div class="mx-imgBorder"] |
| 67 | +> [](../../media/257-pipelines-06.png#lightbox) |
| 68 | + |
| 69 | +> [!div class="mx-imgBorder"] |
| 70 | +> [](../../media/257-pipelines-07.png#lightbox) |
| 71 | + |
| 72 | +In the _Resource triggers_ tab, when not on the default branch, you get a warning telling you the triggers defined for this branch are ignored. |
| 73 | + |
| 74 | +When trigger definitions were not correctly processed by the system, you get a warning and indications on how to solve the problem. |
| 75 | + |
| 76 | +> [!div class="mx-imgBorder"] |
| 77 | +> [](../../media/257-pipelines-07.png#lightbox) |
| 78 | + |
| 79 | +### StringList parameter type |
| 80 | + |
| 81 | +One of the top requested YAML pipelines features in the Developer Community is to [define parameters that contain a list of items](https://developercommunity.visualstudio.com/t/parameters-that-support-multiselect/1224839). |
| 82 | + |
| 83 | +Starting with this sprint, we've added a new parameter type, named `StringList`, that provides this capability. |
| 84 | + |
| 85 | +Say you want to allow those who queue pipeline runs to choose which regions they want to deploy a payload to. Now you can do this as shown in the example below. |
| 86 | + |
| 87 | +```yaml |
| 88 | +parameters: |
| 89 | +- name: regions |
| 90 | + type: stringList |
| 91 | + displayName: Regions |
| 92 | + values: |
| 93 | + - WUS |
| 94 | + - CUS |
| 95 | + - EUS |
| 96 | + default: |
| 97 | + - WUS |
| 98 | + - CUS |
| 99 | + - EUS |
| 100 | +
|
| 101 | +stages: |
| 102 | +- ${{ each stage in parameters.regions}}: |
| 103 | + - stage: ${{stage}} |
| 104 | + displayName: Deploy to ${{stage}} |
| 105 | + jobs: |
| 106 | + - job: |
| 107 | + steps: |
| 108 | + - script: ./deploy ${{stage}} |
| 109 | +``` |
| 110 | + |
| 111 | +When queuing this pipeline, you have the option of choosing multiple regions to deploy to, as shown in the following screenshot. |
| 112 | + |
| 113 | +> [!div class="mx-imgBorder"] |
| 114 | +> [](../../media/257-pipelines-08.png#lightbox) |
| 115 | + |
| 116 | +### See the full YAML code of a pipeline run |
| 117 | + |
| 118 | +YAML pipelines are composable. You may extend a template, to ensure your pipelines runs the necessary static analysis tools, and include templates to run common stages or jobs or tasks. |
| 119 | + |
| 120 | +Debugging such pipelines was not easy, because you couldn't see the full YAML code it was running. |
| 121 | + |
| 122 | +Say you have the following pipeline: |
| 123 | +```yaml |
| 124 | +parameters: |
| 125 | +- name: PoolName |
| 126 | + type: string |
| 127 | + default: Azure Pipelines |
| 128 | +- name: VmImage |
| 129 | + type: string |
| 130 | + default: ubuntu latest |
| 131 | +
|
| 132 | +extends: |
| 133 | + template: security-enforcing-template.yml |
| 134 | + parameters: |
| 135 | + jobs: |
| 136 | + - template: job.monitoring.yml |
| 137 | + - template: job.build.yml |
| 138 | + parameters: |
| 139 | + PoolName: ${{parameters.PoolName}} |
| 140 | + VmImage: ${{parameters.VmImage}} |
| 141 | +``` |
| 142 | + |
| 143 | +There are three templates used here. Each template may use conditional expressions based on parameter and variable values to determine the actual jobs or steps to run. |
| 144 | + |
| 145 | +Furthermore, when looking at old pipeline runs, you don't know if the pipeline's code is the same now as when the run ran. |
| 146 | + |
| 147 | +In this sprint, we're adding a new functionality that allows you to easily see the full YAML code of a pipeline run. |
| 148 | + |
| 149 | +> [!div class="mx-imgBorder"] |
| 150 | +> [](../../media/257-pipelines-10.png#lightbox) |
0 commit comments