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.
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') }}