问题
Consider the following working job from an azure yaml pipeline
- job: create_slot
dependsOn: setup
displayName: 'Create slot'
pool:
vmImage: 'windows-latest'
variables:
slotName: $[ dependencies.setup.outputs['slot.name'] ]
steps:
- bash: |
echo "Slot to be created: $(slotName)"
displayName: 'Show slot name'
- template: templates/create-slot.yml
parameters:
slot: $(slotName)
From the documentation I would expect that I can replace the marco $(slotName)
directly with the runtime expression $[ dependencies.setup.outputs['slot.name'] ]
, which results in the following:
- job: create_slot
dependsOn: setup
displayName: 'Create slot'
pool:
vmImage: 'windows-latest'
steps:
- bash: |
echo "Slot to be created: $(slotName)"
displayName: 'Show slot name'
- template: templates/create-slot.yml
parameters:
slot: $[ dependencies.setup.outputs['slot.name'] ]
But if you do this, the pipeline fails
From the error I get the impression that $[ dependencies.setup.outputs['slot.name'] ]
is treaded as a string. Is it possible what I'm trying here, maybe I have incorrect syntax.
回答1:
There's no syntax issue to call slot.name
on your create_slot
job, here the issue should cased by the script you used in setup
job. Since you did not share the scripts of setup
job, I post with mine below along with some key points of it.
In your setup
job, it should contain one script to generated output variable name
. Also, the task which hold the variable generation process should configure the reference name slot
.
Simple sample(Updated):
jobs:
- job: setup
steps:
- checkout: none
- task: PowerShell@2
inputs:
targetType: 'inline'
script: 'echo "##vso[task.setvariable variable=name;isOutput=true]Staging"'
name: slot
- job: create_slot
dependsOn: setup
variables:
slotName: $[ dependencies.setup.outputs['slot.name'] ]
steps:
- checkout: none
- bash: |
echo "Slot to be created: $(slotName)"
displayName: 'Show slot name'
Only this, the create_slot
job which depends on the setup
job can get the variable name by using the syntax $[ dependencies.Job1.outputs['slot.name'] ]
:
来源:https://stackoverflow.com/questions/61468448/pass-a-variable-to-template-in-an-azure-yaml-pipeline