Search code examples
bashazure-devopsazure-pipelines

How Azure DevOps Pipeline condition evaluates parameters?


Given the following Azure DevOps pipeline template:

parameters:
  - name: AUTH_TYPE
    type: string

steps:
  - task: Bash@3
    displayName: Parameter print
    inputs:
      targetType: inline
      script: echo "AUTH_TYPE = '${{ parameters.AUTH_TYPE }}'"

  - task: Bash@3
    displayName: Variable print
    inputs:
      targetType: inline
      script: echo "AUTH_TYPE = '${{ variables.AUTH_TYPE }}'"


  - task: Bash@3
    displayName: OIDC auth
    inputs:
      targetType: inline
      script: echo OIDC authentication
    condition: ${{ eq(parameters.AUTH_TYPE, 'oidc') }}
  - task: Bash@3
    displayName: Password auth
    inputs:
      targetType: inline
      script: echo Password authentication
    condition: ${{ eq(parameters.AUTH_TYPE, 'password') }}

Calling:

# ...
variables:
  - group: pipeline-vars

steps:
  - checkout: shared-library
  - template: pipeline-templates/auth.yaml@shared-library
    parameters:
      AUTH_TYPE: $(AUTH_TYPE)

The problem is, the Parameter print outputs the AUTH_TYPE value correctly (oidc in the example) but the corresponding OIDC auth task condition evaluates to false (it is skipped in the pipeline run).

Can anyone help me what is wrong with this? I am totally new in Azure DevOps Pipelines and I currently struggling with understanding how the templates evaluated by the runtime.


Solution

  • Your template yaml looks good with slight modification, I have just test it and the OIDC auth condition works.

    But you can not pass the variable into template parameters. the template yaml be compiled to a big-yaml will accept the parameters at compile time, but variables values work in run-time.

    parameters:
    - name: AUTH_TYPE
      type: string
      default: 'oidc'
    
    variables:
    - name: var1
      value: ${{ parameters.AUTH_TYPE }} 
    
    steps:
    - task: Bash@3
      displayName: Parameter print
      inputs:
        targetType: inline
        script: echo "AUTH_TYPE = ${{ parameters.AUTH_TYPE }}"
    
    - task: Bash@3
      displayName: Variable print
      inputs:
        targetType: inline
        script: echo "AUTH_TYPE = ${{ variables.var1 }}"
    
    - task: Bash@3
      displayName: OIDC auth
      inputs:
        targetType: inline
        script: echo OIDC authentication
      condition: ${{ eq(parameters.AUTH_TYPE, 'oidc') }}
    - task: Bash@3
      displayName: Password auth
      inputs:
        targetType: inline
        script: echo Password authentication
      condition: ${{ eq(parameters.AUTH_TYPE, 'password') }}
    

    enter image description here