我正在尝试使用调用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)" }
答案 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'