Как использовать предыдущее Azure имя конвейера yaml DevOps в запущенном конвейере? - PullRequest
1 голос
/ 12 июля 2020

У меня есть два Azure конвейера yaml DevOps, один для сборки, а затем один для развертывания (да, я знаю, что могу сделать оба в одном конвейере, но для моего варианта использования мне нужно разделить его).

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

Я пытаюсь сделать так, чтобы имя моего второго конвейера совпадало с именем первого конвейера чтобы упростить корреляцию между двумя.

Итак, если первый конвейер запущен и автоматически называется «1.0.0», я хочу, чтобы второй конвейер также назывался «1.0.0» при его запуске .

Мой первый конвейер (ниже) начинается следующим образом и имеет автоматически сгенерированное семанти c имя.

# Generate build name - see variables section below
name: '$(Version.MajorMinor).$(Version.Revision)$(Version.Suffix)'

# These are Continuous Integration Triggers for automatically starting a new pipeline run when there is a check in for any of the matching branches 
trigger:
- trunk
- feature/*
- task/*
- bug/*

# Use this section to set variables that are specific to the Microservice / Solution being processed
variables:
  Version.MajorMinor: 1.0                                         # Major = non-backward compatible version increment, Minor = backward compatible version increment 
  Version.Revision: $[counter(variables['Version.MajorMinor'],0)] # Increments automatically every build, resets if Version.MajorMinor is changed

  # Set the suffix of the version number depending on whether this is trunk, pr or other branch
  ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/trunk') }}: 
    Version.Suffix: ''      # trunk
  ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: 
    Version.Suffix: '-pr'   # pull request
  ${{ if and(ne(variables['Build.SourceBranch'], 'refs/heads/trunk'), ne(variables['Build.Reason'], 'PullRequest')) }}: 
    Version.Suffix: '-pre'  # pre-release

Запускается мой второй конвейер:

# Use the name of the first pipeline
name: '$(originalVersion)-test'
    
resources:
  pipelines:
  - pipeline: original             # reference to build pipeline
    source: 'DevOps - CI'
    branch: trunk 
    
variables:
  # variable contains the name of the build pipeline
  originalVersion: $[variables['resources.pipeline.original.runName']]

stages:
- stage: start   
  jobs:

  - job: LogJob
    displayName: 'Logging'
    steps:
    - checkout: none   
    - pwsh: |
        Write-Host "originalVersion: $(originalVersion)"
        Write-Host "pipelineID: $(resources.pipeline.original.pipelineID)"
        Write-Host "runName: $(resources.pipeline.original.runName)"
        Write-Host "runID: $(resources.pipeline.original.runID)"
        Write-Host "runURI: $(resources.pipeline.original.runURI)"
        Write-Host "sourceBranch: $(resources.pipeline.original.sourceBranch)"
        Write-Host "sourceCommit: $(resources.pipeline.original.sourceCommit)"
        Write-Host "sourceProvider: $(resources.pipeline.original.sourceProvider)"
        Write-Host "requestedFor: $(resources.pipeline.original.requestedFor)"
        Write-Host "requestedForID: $(resources.pipeline.original.requestedForID)"

      displayName: "PoSh: Dependant Pipeline Details"

Я добавил '-test' к имени второго конвейера для отладки, так как, когда конвейер запускается первым завершением, присвоенное ему имя просто '-test'.

Однако в журнал ging, он правильно распечатывает имя предыдущей сборки, в частности, в этих двух строках печатается '1.0.0'

    Write-Host "originalVersion: $(originalVersion)"
    Write-Host "pipelineID: $(resources.pipeline.original.pipelineID)"

, но использование этой переменной в свойстве 'name:' приводит к пустому значение.

В первом конвейере я могу использовать переменные в имени сборки, созданном из выражений (увеличивающийся номер версии), но во втором конвейере подстановка переменных, похоже, работает.

Кто-нибудь может определить, делаю ли я что-то глупое, или это ошибка / ограничение в Azure DevOps YAML?

1 Ответ

0 голосов
/ 12 июля 2020

Потому что значение name оценивается до создания variables. в качестве обходного пути вы можете добавить простой скрипт, который обновляет имя:

- script: echo "##vso[build.updatebuildnumber]$(originalVersion)"

Результат:

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...