Получите доступ к выходной переменной конвейера сборки в Среде утверждения / проверки - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь создать автоматическую c Среду утверждения с помощью Invoke 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'

Тело для функции Azure :

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

Журнал:

    2020-03-26T15:57:01.2590351Z POST https://azure-function-url
    Request body: {
       "ResourceGroup": "$(resourceGroupName)"
    }

1 Ответ

1 голос
/ 27 марта 2020

Добавлена ​​переменная в тело функции, но переменная не оценивается

Это ожидаемое действие. Вот что вы делаете: 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...