Azure devops 在环境批准/检查中访问生成管道输出变量

Azure devops 在环境批准/检查中访问生成管道输出变量,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我正在尝试使用Invoke Azure函数构建自动环境批准。我需要传递一个在前一个构建阶段创建的变量。我已将变量添加到函数体中,但未对变量求值: 创建输出变量的任务(在前一阶段) -任务:CmdLine@2 投入: 脚本:| #调试输出(在日志中可见的值) pulumi堆栈输出resourceGroupName echo“##vso[task.setvariable=resourceGroupName;isooutput=true]$(pulumi堆栈输出resourceGroupName)”

我正在尝试使用Invoke Azure函数构建自动环境批准。我需要传递一个在前一个构建阶段创建的变量。我已将变量添加到函数体中,但未对变量求值:

创建输出变量的任务(在前一阶段)

-任务:CmdLine@2
投入:
脚本:|
#调试输出(在日志中可见的值)
pulumi堆栈输出resourceGroupName
echo“##vso[task.setvariable=resourceGroupName;isooutput=true]$(pulumi堆栈输出resourceGroupName)”
工作目录:“infra”
Azure函数的正文:

    { "ResourceGroup": "$(resourceGroupName)" }
日志:

已将变量添加到函数体中,但变量未 评估

这是预期的行动。在这里,您要做的是跨阶段共享变量,直到现在还不直接支持

只用于在步骤之间共享值,而不是阶段之间共享值

解决问题

如果您想在下一个阶段使用生成的变量,您可以考虑使用的变量是将变量写入文件,利用管道工件。

示例步骤:

在这里,我将把一个名为
resourceGroupName
的变量传递到下一个阶段

1)创建一个包含要传递的变量的文件夹

   mkdir -p $(Pipeline.Workspace)/variables
2)将变量的内容写入文件
StageUsed

 echo "$resourceGroupName" > $(Pipeline.Workspace)/variables/StageUsed
3)在下一阶段,在
InvokeAzureFunction
作业之前添加一个作业。下载前一阶段发布的变量管道工件

4)将每个文件传输到一个变量中:

 resourceGroupName=$(cat $(Pipeline.Workspace)/variables/StageUsed)
5)在当前作业中公开变量,并将其引用名称设置为
Out

echo "##vso[task.setvariable variable=resourceGroupName;isoutput=true]$resourceGroupName"
6)现在,您可以通过调用dependencies.secondjob.outputs['output.resourceGroupName']来访问
InvokeAzureFunction
作业中的变量

示例脚本:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

stages:
  - stage: FirstStage
    jobs:
      - job: firstjob
        pool:
          vmImage: 'Ubuntu-16.04'
        steps:
          - bash: |
              resourceGroupName="value"
              mkdir -p $(Pipeline.Workspace)/variables
              echo "$resourceGroupName" > $(Pipeline.Workspace)/variables/resourceGroupName

          - publish: $(Pipeline.Workspace)/variables
            artifact: variables

  - stage: SecondStage
    jobs:
      - job: secondjob
        pool:
          vmImage: 'Ubuntu-16.04'
        steps:
          - download: current
            artifact: variables
          - bash: |
              resourceGroupName=$(cat $(Pipeline.Workspace)/variables/resourceGroupName)
              echo "##vso[task.setvariable variable=resourceGroupName;isoutput=true]$resourceGroupName"
            name: output
          - bash: |
              echo "$(output.resourceGroupName)"

      - job: ServerJob
        dependsOn: secondjob
        pool: server
        variables:
          resourceGroupName: $[dependencies.secondjob.outputs['output.resourceGroupName']]
        steps:
          - task: AzureFunction@1
            inputs:
              function: 
              method: 'POST'
              body: '$(sdf)'
              waitForCompletion: 'false'
trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

stages:
  - stage: FirstStage
    jobs:
      - job: firstjob
        pool:
          vmImage: 'Ubuntu-16.04'
        steps:
          - bash: |
              resourceGroupName="value"
              mkdir -p $(Pipeline.Workspace)/variables
              echo "$resourceGroupName" > $(Pipeline.Workspace)/variables/resourceGroupName

          - publish: $(Pipeline.Workspace)/variables
            artifact: variables

  - stage: SecondStage
    jobs:
      - job: secondjob
        pool:
          vmImage: 'Ubuntu-16.04'
        steps:
          - download: current
            artifact: variables
          - bash: |
              resourceGroupName=$(cat $(Pipeline.Workspace)/variables/resourceGroupName)
              echo "##vso[task.setvariable variable=resourceGroupName;isoutput=true]$resourceGroupName"
            name: output
          - bash: |
              echo "$(output.resourceGroupName)"

      - job: ServerJob
        dependsOn: secondjob
        pool: server
        variables:
          resourceGroupName: $[dependencies.secondjob.outputs['output.resourceGroupName']]
        steps:
          - task: AzureFunction@1
            inputs:
              function: 
              method: 'POST'
              body: '$(sdf)'
              waitForCompletion: 'false'