Как получить ветку git при фиксации с тегом при запуске Azure pipeline?

#tags #azure-pipelines #branch #commit #git-branch

#Теги #azure-конвейеры #ветка #фиксация #git-branch

Вопрос:

В Azure Pipeline возможно использование предопределенных переменных сборки (DevOps Services) Сборка.Исходная ветвь и сборка.SourceBranchName но их значения при фиксации регистра с тегом являются тегами.

В документе. https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devopsamp;tabs=yaml#build-variables-devops-services записывается

  • Когда ваш конвейер запускается тегом: refs/tags/your-tag-name
  • Имя ветки в запускающем репозитории, для которого сборка была поставлена в очередь. Ветка Git repo или запрос на извлечение: Последний сегмент пути в ссылке. Например, в refs / heads / master это значение равно master . В ссылках / heads / feature / tools это значение равно tools .
  • это мое наблюдение: но в случае фиксации с тегом это последний сегмент пути сборки.SourceBranch, так что ваш-tag-name

Ответ №1:

Как описано в документе. Если конвейер запускается тегом. Затем переменные строятся.Исходная ветвь и сборка.SourceBranchName будет именем тега.

Однако вы можете использовать команды git ( git branch -r --contains $(Build.SourceBranchName) | grep -v $(Build.SourceVersion) ) для получения имени ветки, на которое указывает тег.

Если вы хотите использовать имя ветки в качестве переменной, вы можете определить переменную с помощью команд ведения журнала ( echo "##vso[task.setvariable variable=CurrentBranch]$branch" ). Для примера ниже:

 - powershell: |
     #get the branch name
     $branch = git branch -r --contains $(Build.SourceBranchName) | grep -v $(Build.SourceVersion)
     
     #define varialbe CurrentBranch to hold the value.
     echo "##vso[task.setvariable variable=CurrentBranch]$branch" 

- powershell: echo "$(CurrentBranch)"  #use the branch name in the following steps by referring to $(CurrentBranch)