Как получить название ветки с sla sh в Azure DevOps? - PullRequest
2 голосов
/ 28 января 2020

Azure Devops предлагает две переменные, содержащие информацию о текущем git имени ветви: $(Build.SourceBranchName) и $(Build.SourceBranch).

В то время как SourceBranch содержит полную ссылку на ветку, SourceBranchName Ожидается, что будет содержать только краткое имя ветви.

К сожалению, поведение немного неожиданно, когда имя ветви содержит sla sh (/):

+---------------------------------------------------------------------------------------------------------+
| Situation                     | Git branch name  | Build.SourceBranch          | Build.SourceBranchName |
|---------------------------------------------------------------------------------------------------------|
| branch name contains no slash | mybranch         | refs/heads/mybranch         | mybranch               |
| branch name contains slash    | release/mybranch | refs/heads/release/mybranch | mybranch               |
+---------------------------------------------------------------------------------------------------------+

Часть имени ветви перед sla sh не считается частью названия филиала. Мой коллега отметил, что это задокументированное поведение Azure Devops :

Git ответ на репо-ветвь или запрос на извлечение: последний сегмент пути в ссылке. Например, в refs /heads / master это значение является master. В refs / heads / feature / tools это значение - tools.

Я не уверен, что это поведение особенно полезно: я хочу оформить ветку и мне нужно, чтобы имя ветви включало include Сла sh. Кроме того, если часть перед sla sh будет удалена, вполне может возникнуть путаница с фактическим путем, поскольку имя может быть неоднозначным.

Мне нужно имя ветви , включая Sla sh. Есть ли простой способ получить это? Всегда ли мне нужно работать с полным реф, чтобы быть в безопасности?

Ответы [ 2 ]

1 голос
/ 29 января 2020

Когда вы строите PR, вы можете использовать System.PullRequest.SourceBranch и System.PullRequest.TargetBranch переменные.

System.PullRequest.TargetBranch

Ветвь это цель запроса на удаление. Например: refs/heads/master. Эта переменная инициализируется, только если сборка была запущена из-за Git PR, на который повлияла политика ветвления.

Использовать предопределенные переменные сборки

Кроме того, вы может также определить вашу собственную переменную на основе ваших потребностей, если вы хотите использовать полный или короткий путь.

Просто создайте сценарий bash, который присваивает переменной более короткое имя ветви.

# Bash script
BRANCH_NAME=$(echo "$(System.PullRequest.TargetBranch)" | awk -F/ '{print $NF}')
echo "##vso[task.setvariable variable=PullRequest_Target_Branch;]$BRANCH_NAME"

Затем вы можете ссылаться на $ (PullRequest_Target_Branch) в своем конвейере позже.

1 голос
/ 29 января 2020

Я всегда использую Build.SourceBranch в своих скриптах. Просто назначьте его новой переменной и удалите refs/heads/ с самого начала. Я использую только для CI и PR:

  1. Для CI. Я использую Build.SourceBranch переменную без refs/heads. Я работаю с PowerShell:

$ branchSource = "$ (Build.SourceBranch)"
$ branchSourcePath = $ branchSource -replace "refs /head /", ""

Для PR. Я использую переменную System.PullRequest.SourceBranch без refs/heads, потому что Build.SourceBranch содержит путь к удаленному PR. Замена такая же, как и в первом варианте, просто используйте правую переменную.

$ branchSource = "$ (System.PullRequest.SourceBranch)"
$ branchSourcePath = $ branchSource - заменить "ссылки / головы /", ""

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