azure-devopsarchitectureyamlazure-pipelinesazure-pipelines-yaml

Azure pipelines - system.debug variable overriden


I am trying to reference a task in an external yaml file and run it if debug mode is on (system diagnostics checkbox selected, which makes system.debug=true).

I tried the following lines of code:

- ${{ if eq(variables['system.debug'],true) }}:
  - template: ./steps/devops/print-directory.yaml
    parameters:
    displayName: "[Debug] List Pipeline Workspace files"
    folder: $(Pipeline.Workspace)

Somehow the system.debug variable is emptied before it enters that condition, and so the task is not exhibited during pipeline execution.

Is there a way of keeping the value of system.debug variable so that it enters the condition? Is there another way to access this variable, or address this problem ?

I've tried to declare a variable called system.debug in the pipeline:

variables:
  - name: system.debug
    value: true

And in this case, the task was correctly exhibited in the pipeline execution, which proves that the system variable is emptied at some point of the pipeline !


Solution

  • This is not possible. ${{ }} is a compile-time expression and system.debug is set at runtime.

    Take a look here on Developer Community

    Runtime variables cannot be referenced from template expressions (inside ${{ }}). Only variables defined within the YAML can be used there. This is not a behavior change. Runtime variables like system.debug can be used in expressions within the condition attribute of step however.