我正在尝试在阶段之间传递变量。我能够成功地将值传递到下一个阶段,但之后变量为空。我尝试了所有的方法来获得这个,但失败了
stages:
- stage: InitialStage
jobs:
- job: StandAlone
displayName: Required Stand Alone Job
steps:
- bash: |
echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes"
name: bash_test
- stage: SecondStage
jobs:
- job:
displayName: SecondStage
variables:
variable1: $[ stageDependencies.InitialStage.StandAlone.outputs['bash_test.doThing'] ]
steps:
- task: CmdLine@2
name: test
inputs:
script: |
echo "$(variable1)"
- stage: ThirdStage
jobs:
- job:
displayName: ThirdStage
variables:
variable1: $[ stageDependencies.InitialStage.StandAlone.outputs['bash_test.doThing'] ]
steps:
- task: CmdLine@2
name: test
inputs:
script: |
echo "$(variable1)"
阶段SecondStage的回声会给出值,但ThirdStage是空白的,我怀疑要么我们只能在即时阶段访问变量,要么我做错了什么,对此的任何帮助都将不胜感激。
选项1:
为了将变量传递到另一个阶段,您需要添加isOutput=true
请参见下面的示例;
- task: Bash@3
name: setprojectName
inputs:
targetType: 'inline'
script: |
echo "##vso[task.setvariable variable=projectNameGlobal;isOutput=true]$(echo $(Build.Repository.Name)| sed 's|.*/||')"
echo "##vso[task.setvariable variable=projectName]$(echo $(Build.Repository.Name)| sed 's|.*/||')"
projectName仅在填充变量的阶段可用,但projectNameGlobal在下一阶段也可用。
另请参阅文件
选项2:
## azure-pipelines.yml
stages:
- stage: one
jobs:
- job: A
steps:
- task: Bash@3
inputs:
filePath: 'script-a.sh'
name: setvar
- bash: |
echo "##vso[task.setvariable variable=skipsubsequent;isOutput=true]true"
name: skipstep
- stage: two
jobs:
- job: B
variables:
- name: StageSauce
value: $[ stageDependencies.one.A.outputs['setvar.sauce'] ]
- name: skipMe
value: $[ stageDependencies.one.A.outputs['skipstep.skipsubsequent'] ]
steps:
- task: Bash@3
inputs:
filePath: 'script-b.sh'
name: fileversion
env:
StageSauce: $(StageSauce) # predefined in variables section
skipMe: $(skipMe) # predefined in variables section
- task: Bash@3
inputs:
targetType: 'inline'
script: |
echo 'Hello inline version'
echo $(skipMe)
echo $(StageSauce)
在上面的选项中,您可以看到如何使用一个由任何先前阶段填充的变量