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!