The Azure Pipelines is the feature of Azure DevOps that allows you to automate your build and release processes, to unleash the full potential of CI/CD practices.
Pipelines can be simple or complicated but, it’s very likely that you need to specify some kind of input to a Pipeline just before starting it.
Classic Pipelines
This is where variables come to help when you’re using the classic version of Azure Pipelines. Inside the Variable tab you write variables and then you can set if it’s “settable at queue time”. This way, when you start the pipeline, a slice of UI will provide a prompt to complete. The input is treated as a string and you can’t do much more.

YAML Pipelines – This is where magic happens!
If you’re trying to achieve the same thing with YAML pipelines you can rely on the power of parameters. Actually, you can achieve more with YAML pipelines!
Runtime parameters let you have more control over what values can be passed to a pipeline. With runtime parameters you can:
https://docs.microsoft.com/en-us/azure/devops/pipelines/process/runtime-parameters
– Supply different values to scripts and tasks at runtime
– Control parameter types, ranges allowed, and defaults
– Dynamically select jobs and stages with template expressions
Because parameters are explicitly typed you can create a better user experience for users of your pipelines with a fully featured UI with check-boxes, radio-buttons and text areas. You can do this in 3 easy steps. Open your YAML definition and for each one of the inputs that you need:
- Create a parameter
- Specify a default value
- Specify allowed values
This an example of a YAML Pipeline definition that accepts a string
as an input to complete the famous “Hello World” greeting but, within a set of specific allowed values. Also, the default value is set to world
.
parameters: - name: myString displayName: string type: string default: 'world' values: - world - mondo pool: vmImage: 'ubuntu-latest' steps: - script: echo Hello, ${{ parameters.myString }}! displayName: 'Run a one-line script'
When you Run the pipeline the UI shows specific fields to collect your input (greetings in our example).

I suggest you to try with all the parameters type that the YAML schema provides. This is a complete example showing all the available options:
parameters: - name: myParameter displayName: greetings type: string default: 'world' values: - world - mondo - name: myNumber displayName: 'Number' type: number default: '1' values: - 1 - 2 - 3 - name: myBoolean type: boolean default: true - name: myObject type: object default: foo: FOO bar: BAR things: - one - two - three nested: one: apple two: pear count: 3 - name: myStep type: step default: script: echo my step - name: mySteplist type: stepList default: - script: echo step one - script: echo step two pool: vmImage: 'ubuntu-latest' steps: - script: echo Hello, ${{ parameters.myParameter }}! displayName: 'Run a one-line script'
The resulting UI is:

Isn’t this awesome?
The power of the community
Thanks to my friend Giulio Vian of getlatestversion.it for the heads-up about this feature. The official Microsoft doc lacks a detailed explanation of this specific usage of YAML Pipelines parameters!