Можно ли использовать переменную в свойстве ref ресурса: репозиторий для Azure DevOps YAML? - PullRequest
0 голосов
/ 27 июня 2019

У меня есть две ветки Git AzureDevOps:

master
feature/mybranch

У меня есть многоступенчатый конвейер сборки, определенный в yaml, где некоторые шаги шаблонизированы в отдельные файлы .yml.

В моем внешнем azure-pipelines.yml я ссылаюсь на репозиторий, где мой шаблон .yml жив:

resources:
  repositories:
    - repository: templates
      type: git
      name: MyProject/MyRepo

, когда я собираю ветку 'master', все хорошо, так как по умолчанию репозиторий будет выглядеть вrefs /heads / master.

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

Следующее работает и позволяет мне сделать это:

resources:
  repositories:
    - repository: templates
      type: git
      name: MyProject/MyRepo
      ref: refs/heads/feature/mybranch

Однако, когда я объединяю это с мастером, яочевидно, что не нужно, чтобы ref: все еще указывал на ветвь функции, поэтому я хотел бы динамически генерировать значение ref: * с помощью переменной.

Я пытался использовать ref: $(Build.SourceBranch), где$(Build.SourceBranch) должно расшириться до 'refs/heads/feature/mybranch'

Ноэто не работаетОшибка:

62638: "/azure-pipelines.yml: Could not get the latest source version for repository MySolution hosted on Azure Repos using ref refs/heads/$(Build.SourceBranch)."

1 Ответ

1 голос
/ 28 июня 2019

Можно ли использовать переменную в свойстве ref ресурсов: репозиторий для Azure DevOps YAML?

На этот вопрос ответ Да, возможно.

О том, почему вы получаете это сообщение об ошибке, просто указанная вами переменная ($(Build.SourceBranch)) неверна.Вы должны использовать $(Build.SourceBranchName).

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

ref: refs/heads/master

Это может заставить вас подумать, что это то же самое, что и значение $(Build.SourceBranch).Это выглядит так же, я знаю, но по-другому.Фактически, для сервера он будет читать именно имя ветви, а не путь ветви, что мы можем четко определить с помощью классического редактора:

enter image description here

В соответствии с классическим типом редактора, мы можем знать, что здесь мы должны ввести точное имя ветви.

Так, как определено Предопределенные переменные , значение $(Build.SourceBranch) является путем перехода,но для $(Build.SourceBranchName) оно представляет собой точно название ветви.

Итак, если вы хотите выполнить успешно, вам нужно использовать: $(Build.SourceBranchName).И это работает на моей стороне.

Надеюсь, что это также может помочь вам избежать сообщения об ошибке.

Редактировать:

Полный сценарий, которыйу меня работает это:

resources:
  repositories:
    - repository: templates
      type: git
      name: MyApp/MyconApp
      ref: $(Build.SourceBranchName)
...