programing

Azure DevOps에서 슬래시가 있는 지점 이름을 얻는 방법

bestprogram 2023. 4. 22. 10:57

Azure DevOps에서 슬래시가 있는 지점 이름을 얻는 방법

Azure Devops는 현재 git 브랜치 이름에 대한 정보를 포함하는 두 가지 변수를 제공합니다.$(Build.SourceBranchName)그리고.$(Build.SourceBranch).

하는 동안에SourceBranch에는 브런치에 대한 완전한 참조가 포함되어 있습니다.SourceBranchName에는 짧은 브랜치 이름만 포함됩니다.

안타깝게도 브랜치 이름에 슬래시가 포함되어 있는 경우 이 동작은 약간 예기치 않습니다./):

+---------------------------------------------------------------------------------------------------------+
| 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               |
+---------------------------------------------------------------------------------------------------------+

슬래시 앞의 분기 이름 부분은 분기 이름의 일부로 간주되지 않습니다.동료는 이것이 Azure Devops의 기록된 동작이라고 지적했습니다.

Git repo 분기 또는 풀 요청:참조의 마지막 경로 세그먼트.예를 들어, refs/heads/master에서 이 값은 master입니다.refs/heads/feature/tools에서 이 값은 도구입니다.

이 동작이 특별히 도움이 될지 잘 모르겠습니다.브런치를 체크 아웃 하고 싶은데, 슬래시를 포함할 브랜치명이 필요합니다.또한 슬래시 앞의 부분이 제거되면 이름이 모호할 수 있으므로 실제 경로에 대한 혼란이 발생할 수 있습니다.

슬래시를 포함한 지점 이름이 필요합니다.쉽게 구할 수 있는 방법이 없을까요?안전을 위해 항상 전체 심판과 함께 일해야 합니까?

나는 항상 사용한다Build.SourceBranch내 대본에서.새 변수에 할당하고 제거만 하면 됩니다.refs/heads/처음부터요.CI 및 PR에만 사용합니다.

  1. CI를 위해서요.Build.SourceBranch없는 변수refs/headsPowerShell을 사용하고 있습니다.

$branchSource = "$(빌드).소스 브랜치)"
$branchSourcePath = $branchSource - 대체 "refs/heads/", "

  1. PR용.사용하고 있다System.PullRequest.SourceBranch없는 변수refs/heads왜냐면Build.SourceBranch에 리모트 PR에 대한 경로를 나타냅니다.첫 번째 옵션에서 올바른 변수를 사용하는 것과 같습니다.

$branchSource = "$(시스템).PullRequest(PullRequest(풀 요구)소스 브랜치)"
$branchSourcePath = $branchSource - 대체 "refs/heads/", "

이 형제를 써라

variables:
  BRANCH_NAME: $[replace(variables['Build.SourceBranch'], 'refs/heads/', '')]

이렇게 사용(편집 오타)

$(BRANCH_NAME)

PR을 기반으로 구축하면System.PullRequest.SourceBranch그리고.System.PullRequest.TargetBranch변수입니다.

System.PullRequest.타깃 브랜치

풀 요청의 대상이 되는 브랜치.예를 들어 다음과 같습니다.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)를 참조할 수 있습니다.

아직 이에 대한 적절한 해결책이 없다니 말도 안 된다.

여기 우리가 가진 것이 있습니다. 제가 검색한 몇 가지를 조합한 결과입니다.이것은 지점 및 홍보용입니다.

variables:

  ${{ if startsWith(variables['Build.SourceBranch'], 'refs/heads/') }}:
    BRANCH_NAME: $[ replace(variables['Build.SourceBranch'], 'refs/heads/', '') ]
    DOCKER_IMAGE_TAG: $[ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), '/', '_') ]

  ${{ if startsWith(variables['Build.SourceBranch'], 'refs/pull/') }}:
    BRANCH_NAME: $[ replace(variables['System.PullRequest.SourceBranch'], 'refs/heads/', '') ]
    DOCKER_IMAGE_TAG: $[ replace(replace(variables['System.PullRequest.SourceBranch'], 'refs/heads/', ''), '/', '_') ]

BRANCH_NAME슬래시가 포함됩니다. ★★★★★★★★★★★★★★★★★.refs/heads/mybranch 되다mybranchrefs/heads/feature/mybranch 되다feature/mybranch.

DOCKER_IMAGE_TAG 「이것」, 「이것」을 가 있습니다./_의 경우 " " "

아래의 azure-pipelines.yml에서 사용할 수 있습니다.

branch=$(Build.SourceBranch)
export branch=$(echo "${branch}" | sed 's/refs\/heads\///g')

언급URL : https://stackoverflow.com/questions/59956206/how-to-get-a-branch-name-with-a-slash-in-azure-devops