Настройка номеров запуска или сборки

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Вы можете настроить нумерованный запуск конвейера. Значение по умолчанию для номера выполнения .$(Date:yyyyMMdd).$(Rev:r)

В Azure DevOps $(Rev:r) — это специальный формат переменной, который работает только в поле номера сборки. После завершения сборки, если ничего другого в номере сборки не изменилось, Rev целочисленное значение увеличивается на один.

$(Rev:r) сбрасывается при изменении части номера сборки. Например, если вы настроили номер сборки как $(Build.DefinitionName)_$(Date:yyyyMMdd).$(Rev:r), номер сборки будет сбрасываться при изменении даты на следующий день. Если номер сборки равен MyBuild_20230621.1, следующий номер сборки в MyBuild_20230621.2этот день. На следующий день номер сборки равен MyBuild_20230622.1.

Если номер сборки имеет 1.0.$(Rev:r)формат, номер сборки сбрасывается, когда 1.0.1 вы изменяете часть номера. Например, если номер последней сборки был1.0.3, и вы измените номер сборки, чтобы 1.1.$(Rev:r) указать изменение версии, следующий номер сборки .1.1.1

В YAML это свойство вызывается name и должно находиться на корневом уровне конвейера.

Примечание.

Элементы, указанные на корневом уровне файла YAML, являются свойствами конвейера .

Если оно не указано, выполнение получает уникальное целое число в качестве его имени. Вы можете дать вам гораздо более полезные имена, значимые для вашей команды. Можно использовать сочетание маркеров, переменных и символов подчеркивания. Свойство name не работает в файлах шаблонов.

name: $(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd).$(Rev:r)

steps:
  - script: echo '$(Build.BuildNumber)' # outputs customized build number like project_def_master_20200828.1

Сборки YAML пока недоступны в TFS.

Пример

Во время запуска запускается выполнение:

  • Имя проекта: Fabrikam

  • Имя конвейера: CIBuild

  • Branch (Ветвь): main.

  • Идентификатор сборки и выполнения: 752

  • Дата: 5 мая 2019 г.

  • Время: 9:07:03 вечера.

  • Один запуск завершился ранее сегодня.

Если указать этот формат номера сборки:

$(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd).$(Rev:.r)

Затем второй запуск в этот день будет назван: Fabrikam_CIBuild_main_20190505.2

Токены

В следующей таблице показано, как разрешается каждый маркер на основе предыдущего примера. Эти маркеры можно использовать только для определения номера выполнения; Они не работают нигде в конвейере.

Маркер Пример значения замены
$(Build.DefinitionName) CIBuild

Примечание. Имя конвейера не должно содержать недопустимые или пробелы.
$(Build.BuildId) 752

$(Build.BuildId) — это внутренний неизменяемый идентификатор, который также называется идентификатором запуска. Это уникально для всей организации.
$(DayOfMonth) 5
$(DayOfYear) 217
$(Hours) 21
$(Minutes) 7
$(Month) 8
$(Rev:r) 2 (третий запуск — 3 и т. д.)

Используйте $(rev:r), чтобы убедиться, что каждая завершенная сборка имеет уникальное имя. При запуске сборки, если в номере сборки ничего другого не изменилось, целочисленное значение ред. увеличивается по одному.

Если вы хотите отобразить нули префикса в номере, можно добавить дополнительные символы R . Например, укажите $(rev:rr), если вы хотите, чтобы номер ред. начиналось с 01, 02 и т. д. Если в рамках схемы нумерирования версий используется нумерованный с нуля, обратите внимание, что некоторые задачи конвейера или популярные инструменты, такие как пакеты NuGet, удалите начальные нули, которые вызывают несоответствие номера версии в созданных артефактах.
$(Date:yyyyMMdd) 20090824

Можно указать другие форматы дат, например $(Date:MMddyy)
$(Seconds) 3
$(SourceBranchName) main
$(TeamProject) Fabrikam
$(Year:yy) 09
$(Year:yyyy) 2009

Переменные

Вы также можете использовать определяемые пользователем и предопределенные переменные, имеющие область "Все" в вашем номере. Например, если вы определили My.Variable, можно указать следующий формат чисел:

$(Build.DefinitionName)_$(Build.DefinitionVersion)_$(Build.RequestedFor)_$(Build.BuildId)_$(My.Variable)

Первые четыре переменные предопределяются. My.Variableопределяется на вкладке переменных.

Выражения

Если вы используете выражение для задания номера сборки, вы не можете использовать некоторые маркеры, так как их значения не задаются во время вычисления выражений. К этим маркерам относятся $(Build.BuildId), $(Build.BuildURL)и $(Build.BuildNumber).

Вопросы и ответы

Насколько большим может быть номер выполнения и какие символы можно использовать?

Запуски могут составлять до 255 символов. Символы, которые не допускаются, включают ", :><'/, |, ?@и .* Вы не можете закончиться .с .

В каком часовом поясе выражаются значения времени сборки?

Часовой пояс — UTC.

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

Как ссылаться на переменную номера выполнения в скрипте?

Переменная номера выполнения может вызываться с $(Build.BuildNumber)помощью . Можно определить новую переменную, содержащую номер выполнения или вызвать номер запуска напрямую. В этом примере представляет собой новую переменную, $(MyRunNumber) содержащую номер выполнения.

# Set MyRunNumber
variables: 
  MyRunNumber: '1.0.0-CI+$(Build.BuildNumber)'


steps:
- script: echo $(MyRunNumber) # display MyRunNumber
- script: echo $(Build.BuildNumber) #display Run Number

Как динамически задать номер сборки с условиями?

Переменные можно использовать в составе номера выполнения. В этом примере переменная why изменяется в зависимости от Build.Reason и используется в составе номера выполнения.

variables:
  - name: why
    ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
      value: pr
    ${{ elseif eq(variables['Build.Reason'], 'Manual' ) }}:
      value: manual
    ${{ elseif eq(variables['Build.Reason'], 'IndividualCI' ) }}:
      value: indivci
    ${{ else }}:
      value: other

name: $(TeamProject)_$(SourceBranchName)_$(why)_$(Date:yyyyMMdd).$(Rev:.r)

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo '$(Build.BuildNumber)' ## output run number