I'm writing an Azure Pipeline where I use the targetBranchName of a pull request to define the test environment I'm going to use. Since targetBranchName has no value before execution, I created a "prepare" stage where I capture the value of the variable to use in further stages.
- stage: prepare
jobs:
- job: variables
steps:
- checkout: none
- powershell: Write-Output "##vso[task.setvariable variable=TARGET;isOutput=true;isReadOnly=true]$(system.pullRequest.targetBranchName)"
Then, in a later stage, I want to use the output variable BRANCH_NAME to find whether the stage should run and if so to load the appropriate group variables. I also would like to capture the value of the output variable in a job variable so that I can refer to it with a more "convenient" name.
The stage condition seems to be working when tested with manually set values for TARGET in the prepare job, but I can't actually see the value of TARGET, so I added a "print" step and it shows no value for TARGET.
I'm not shure about where is my mistake, if in how I refer to the output variable to copy its value (stage vs. stageDependencies) or if the syntax for recovering the value of a variable in dependencies/stageDependencies ($(), $[] or ${{}}).
- stage: deploy_to_cint
dependsOn: prepare
condition: and(succeeded('prepare'), in(dependencies.prepare.outputs['variables.environment.TARGET'], 'env1', 'env2'))
variables:
- name: TARGET
value: $(dependencies.prepare.outputs['variables.environment.TARGET'])
- group: 'EnvironmentCredentials-$(TARGET)'
jobs:
- job: debug
steps:
- bash: echo This is running for $(TARGET).