Introduction
In this blog we will understand parametrized YAML pipeline. Further we will setup parameterized pipeline for different scenario in demo.
If you are new to YAML pipeline you can follow below article which has detailed explanation of YAML pipeline from Basic with demo.
What is the Parameterized YAML pipeline
A pipeline which gives option to a user to provide/fill the information before running the pipeline.
User interface implementation in pipeline is the key of setting up Parameterized pipeline.
Why do we need Parameterized YAML pipeline
Create User Interface before running the pipeline/deployment
In Automation
In custom pipeline for build/Test Deploy
Parameterized YAML Pipeline Schema
A Glance of Keywords
Sample YAML Pipeline
Lets assume you are going to create YAML pipeline to Build an Application based on the Project selection. In this case we can create YAML pipeline with Parameter where end user can Select the Project and only Specific application can be Build.
parameters:
- name: ProjectName
type: string
displayName: "Select the Project Name to Build"
values:
- Payment
- Profile
- Admin
- onlinepayment
User Interface -> YAML pipeline
After creating the parameterize pipeline you can see the below User interface once you run the Pipeline.
Use of Parameters in YAML pipeline
Now once the parameter is defines how can we use them in the pipeline steps. Each Parameter name will be used as variable and it can be access through below format.
${{ parameters.<parameterName> }}
Sample YAML Pipeline
name: yamldemo_$(Date:yyyyMMdd)$(Rev:.r)
parameters:
- name: ProjectName
displayName: "Select Project Name to Build"
type: string
default: payment
values:
- payment
- profile
- admin
- onlinepayment
pool:
name: default
steps:
- task: VSBuild@1
inputs:
solution: '**\*.sln'
msbuildArgs: '/t:${{ parameters.ProjectName}}'
platform: 'any cpu'
configuration: 'release'
Scenario 1:
Lets assume if you are working on the DevOps Role and you want to setup Build/ Release Pipeline for QA and Dev Team. In this scenario you can configure the pipeline in User interface format so that QA and Dev team can use it and trigger the Build or deployment on Demand.
name: yamldemo_$(Date:yyyyMMdd)$(Rev:.r)
parameters:
- name: ProjectName
displayName: "Select Project Name to Build"
type: string
default: Payment
values:
- Payment
- Profile
- Admin
- onlinepayment
- name: EnvironmentType
displayName: 'Select the Envionment'
type: string
default: QA
values:
- QA
- Dev
- Security
- name: UnitTestRun
displayName: 'Do you want to Run Unit Test?'
type: boolean
default: true
- name: DeployCheck
displayName: "Do you want to Deploy?"
type: boolean
default: true
trigger: none
stages:
- stage: Build
jobs:
- job: Build
pool:
name: default
steps:
- task: VSBuild@1
inputs:
solution: '**\*.sln'
msbuildArgs: '/t:${{ parameters.ProjectName}}'
platform: 'any cpu'
configuration: 'release'
- ${{ if eq(parameters.UnitTestRun, true) }}:
- stage: UnitTestRun
jobs:
- job: rununitest
pool:
name: default
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
# Write your PowerShell commands here.
Write-Host "Unit test Setup"
- ${{ if eq(parameters.DeployCheck, true) }}:
- stage: Deploy
jobs:
- job: deployapp
pool:
name: default
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
# Write your PowerShell commands here.
Write-Host "Deploy Setup.."
Scenario 2:
As part of Automation, assume I have developed PowerShell Script which will be granting access to the Azure Resources and to grant access we need some info from End user.
In this case I will allowing user to provide this input during the Pipeline Run.
Parameter:
1. SubscriptionName
2. WebAppName
3. ResourceGroupName
4. UserAccount
5. AccessType
name: yamldemo_$(Date:yyyyMMdd)$(Rev:.r)
parameters:
- name: SubscriptionName
displayName: "Enter Subscription Name"
type: string
- name: WebAppName
displayName: 'Enter WebAppName'
type: string
- name: ResourceGroupName
displayName: "Enter ResourceGroupName"
type: string
- name: UserAccount
displayName: "Enter UserAccount for Access like:- test@xyx.com"
type: string
- name: AccessType
displayName: "Enter Access Type"
type: string
default: Contributor
values:
- Reader
- Contributor
- Owner
trigger: none
pool:
name: default
steps:
- task: PowerShell@2
displayName: "Grant Access to Azure Resource"
inputs:
filePath: '$(System.DefaultWorkingDirectory)\AccessAutomation.ps1'
arguments: '-SubscriptionName "${{parameters.SubscriptionName}}" -WebAppName "${{parameters.WebAppName}}" -ResourceGroupName "${{parameters.ResourceGroupName}}" -UserAccount "${{parameters.UserAccount}}" -AccessType "${{parameters.AccessType}}"'
Demo
For dynamic data structure how do we create a input field for the user to have a optional of multiple files selecting