Azure devops 在环境批准/检查中访问生成管道输出变量
我正在尝试使用Invoke Azure函数构建自动环境批准。我需要传递一个在前一个构建阶段创建的变量。我已将变量添加到函数体中,但未对变量求值: 创建输出变量的任务(在前一阶段)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)”
-任务: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'