在环境批准/检查中访问构建管道输出变量

时间:2020-03-26 16:03:27

标签: azure-devops azure-pipelines

我正在尝试使用调用Azure功能建立自动环境批准。我需要传递在上一个构建阶段中创建的变量。我已将变量添加到函数主体中,但未评估该变量:

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

SequenceEqual

Azure功能的主体:

    - task: CmdLine@2
      inputs:
        script: |
          # Debug output (value visible in logs)
          pulumi stack output resourceGroupName
          echo "##vso[task.setvariable variable=resourceGroupName;isoutput=true]$(pulumi stack output resourceGroupName)"
       workingDirectory: 'infra'

日志:

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

1 个答案:

答案 0 :(得分:1)

将变量添加到函数主体,但变量不是 评估

这是预期的操作。在这里您正在做的是share variable across stages,到目前为止,尚不直接支持。

Output variable仅用于在步骤之间而不是在阶段之间共享值。

解决方法

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

示例步骤:

在这里,我将一个名为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'