Is Azure Pipeline Interactive? Can User Input be Used during runtime of Pipeline Stages?

299 Views Asked by At

I'm wondering if Azure Pipelines support interactive user input during execution. Specifically, can user input be utilized in next stage of the pipeline? Any insights or examples would be appreciated.

I've tried ManualIntervention & ManualValidation tasks in Azure pipeline, which should actually prompt user for inputs, but it's not. These are the possible ways listed official Microsoft page. Ref:https://learn.microsoft.com/en-us/azure/devops/pipelines/release/approvals/?view=azure-devops&tabs=yaml

2

There are 2 best solutions below

3
Scott Richards On BEST ANSWER

As others are suggesting, there is no built in way to parse variables in during a pipeline run, only variables created in yaml/code can be parsed to subsequent steps/jobs/stages.


To achieve something like you are describing, you can add approver gates on the stages that force a user with the correct privileges to click an approve button before the stage commences. There are several ways to include approvers on your pipeline runs. See here.

Before an approver clicks the approve button, then can modify variables stored in a third party vault, such as an Azure Key Vault. Once the stage begins, it will grab the updated variables.

To achieve this, you will need multiple stages in your yaml. You can get the pipeline to automatically wait for an approver at any stage by including a deployment job that has an approver gate on it. To configure this:

  1. Navigate to Pipelines -> Environments in Azure DevOps
  2. Create a New Environment. For resources, select None.
  3. Go to the Approvals and checks tab, and add a mandatory reviewer

enter image description here

This will force your pipeline to wait for approval in the middle of a run:

enter image description here

At this point, if any variables need to be edited, the approver can manually go into an Azure Key Vault and modify any variable values. This can easily be done by anyone with the correct RBAC roles by clicking on the variables.

enter image description here

You can then include pipeline steps to retrieve, then save those KeyVault variables as pipeline variable.

stages:
- stage: Stage1
  jobs:
  - job: Job1
    steps:
    - task: PowerShell@2
      displayName: Print all variables
      inputs:
        targetType: "inline"
        script: |
          Write-Host "Example script"

- stage: Stage2
  dependsOn: Stage1
  jobs:
  - deployment: Job2
    environment: ApprovalTest
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureKeyVault@2
            displayName: Get KeyVault secrets
            inputs:
              azureSubscription: $(serviceConnection)
              KeyVaultName: MyAzureKeyVault
              SecretsFilter: "*"

          - task: PowerShell@2
            displayName: Save KeyVault secrets
            inputs:
              targetType: "inline"
              script: |
                Write-Host "##vso[task.setvariable variable=var1]$(var1)"
                Write-Host "##vso[task.setvariable variable=var2]$(var2)"
                Write-Host "##vso[task.setvariable variable=var3]$(var3)"

0
Shamrai Aleksander On

The build process on build agents is not interactive. To pass information to your pipelines consider using Variables (Allow at queue time, Use output variables from tasks) or Parameters.