Можете ли вы использовать теги сборки в выражениях условий в многоступенчатых конвейерах devops - PullRequest
0 голосов
/ 29 апреля 2020

Можно ли использовать теги сборки, установленные для многоступенчатой ​​сборки конвейера, в разделе условий более поздней стадии?

    ##### task in build stage #####
    - task: YodLabs.VariableTasks.AddTag.AddTag@0
      displayName: Adding environment tag to build
      inputs:
        tags: |
          deploy
          $(DEPLOY_ENV)
  #### some later stage ####
  - stage: deploy
    displayName: deploy
    condition: |
      and(
        succeeded(),
        #Is there something I can put here to condition on tags
      )
    jobs:

Спасибо

1 Ответ

1 голос
/ 29 апреля 2020

Из того, что я знаю, это пока невозможно с YAML, потому что в YAML нет простого способа получить теги. Вы можете попробовать output variable

jobs:
- job: Foo
  steps:
  - script: |
      echo "This is job Foo."
      echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #The variable doThing is set to true
    name: DetermineResult
- job: Bar
  dependsOn: Foo
  condition: eq(dependencies.Foo.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true
  steps:
  - script: echo "Job Foo ran and doThing is true."

Вы также можете попробовать использовать метод обхода, который в этом случае:

  1. Извлечение тегов с использованием REST API в сценарии powershell PUT https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/tags/{tag}?api-version=5.1
  2. Затем присвойте свои теги выходным переменным, используя команды ведения журнала
  3. И, наконец, используйте выходную переменную в условии

EDIT

Таким образом, похоже, что это невозможно в данный момент, но должно быть доступно в ближайшее время. Пожалуйста, проверьте эту проблему GitHub .

Выходные переменные теперь могут использоваться на всех этапах конвейера на основе YAML. Это помогает вам передавать полезную информацию, такую ​​как решение go / no- go или идентификатор сгенерированного вывода, с одного этапа на другой. Результат (статус) предыдущего этапа и его заданий также доступен.

Выходные переменные по-прежнему создаются шагами внутри заданий. Вместо ссылки dependencies.jobName.outputs['stepName.variableName'], этапы относятся к stageDependencies.stageName.jobName.outputs['stepName.variableName']. Примечание: по умолчанию каждый этап в конвейере зависит от того, который находится перед ним в файле YAML. Поэтому каждый этап может использовать выходные переменные предыдущего этапа. Вы можете изменить график зависимости, который также изменит доступные выходные переменные. Например, если для этапа 3 требуется переменная из этапа 1, необходимо будет объявить явную зависимость от этапа 1.

Я пробовал сейчас:

stages:
- stage: A
  jobs:
  - job: JA
    steps:
    - script: |
        echo "This is job Foo."
        echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #The variable doThing is set to true
      name: DetermineResult

# stage B runs if A fails
- stage: B
  condition: eq(stageDependencies.A.JA.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true
  jobs:
  - job: JB
    steps:
    - bash: echo "Hello world stage B first job"

, но я получил эту ошибку:

Произошла ошибка при загрузке конвейера сборки YAML. Нераспознанное значение: 'stageDependencies'. Находится в позиции 4 в выражении: eq (stageDependencies.A.JA.outputs ['DetermineResult.doThing'], 'Yes'). Для получения дополнительной помощи см. https://go.microsoft.com/fwlink/?linkid=842996

Однако эта функция может скоро появиться у нас!

...