Добавлена переменная в тело функции, но переменная не оценивается
Это ожидаемое действие. Вот что вы делаете: share variable across stages
, который не поддерживается напрямую до сих пор.
Output variable
просто используется для распределения значений между шагами вместо ступеней .
Обход :
Если вы хотите использовать сгенерированную переменную на следующем этапе, можно обойти это решение - записать переменную в файл, используя артефакты конвейера.
Примеры шагов:
Здесь я передам одну переменную с именем resourceGroupName
следующему этапу.
1) Создайте папку, которая будет содержать переменные, которые вы хотите передать
mkdir -p $(Pipeline.Workspace)/variables
2) Записать содержимое переменной в файл StageUsed
:
echo "$resourceGroupName" > $(Pipeline.Workspace)/variables/StageUsed
3) In на следующем этапе добавьте одну работу до вашей InvokeAzureFunction
работы. Загрузите артефакт конвейера переменных, опубликованный на предыдущем этапе.
4) Перенесите каждый файл в переменную:
resourceGroupName=$(cat $(Pipeline.Workspace)/variables/StageUsed)
5) Сделайте переменная, отображаемая в текущем задании, и задайте для нее имя ссылки как Out
:
echo "##vso[task.setvariable variable=resourceGroupName;isoutput=true]$resourceGroupName"
6) Теперь вы можете получить доступ к переменной в своем задании InvokeAzureFunction
, вызвав зависимости .secondjob.outputs ['output.resourceGroupName']
Пример сценария:
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'