2017-12-05 8 views
0

최근 XAML 빌드에서 v.Next 빌드로 전환했습니다. 분기별로 항상 하나의 빌드 정의를 유지했지만 새 시스템에는 단일 빌드 정의가 여러 분기에서 실행되고 요청을 끌어낼 수있는 기능이 있습니다.VSTS v.Next 빌드 정의 여러 분기

이것은 좋은 아이디어입니까? 조심해야 할 것은 무엇이며이를 설정하는 가장 좋은 방법은 무엇입니까? 마음에 와서

처음 몇 문제는 다음과 같습니다

1) 버전 번호. 이전 유지 관리 지점 버전 관리와 같은 시나리오를 1.0으로 어떻게 처리 할 수 ​​있습니까? , 2.0으로 마스터 버전. 및 dev 빌드 0.2라고 말합니다. * 그래서 인공물을 혼동하지 않습니까? 더 좋은 방법이 있습니까?

2) 리포지토리 트리가 변경되면 어떻게됩니까? 마스터가 한 폴더에서 .sln을 빌드하려고하지만 dev 브랜치가 다른 폴더로 옮긴 후 어떻게됩니까?

기타 우려 사항과 해결 방법은 무엇입니까?

답변

1

단일 분기 정의로 여러 분기를 시작하고 요청을 끌어 와서 VSTS를보다 유연하게 만들 수 있습니다. 당신이 빌드 definitio N의 특정 지점을 구축하려는 경우에는 특정 지점의 이름을 지정할 수 있습니다,

  • : 당신은 당신이 필요로하는 방법을 선택할 수 있습니다. master 브랜치 만 빌드하려는 경우 소스 가져 오기 단계 (수동 빌드 용)에서 master 브랜치를 지정하거나 브랜치 필터 (CI 빌드 용)에서 master 브랜치를 지정할 수 있습니다.
  • 빌드 정의 (CI 빌드의 경우)에 여러 분기를 빌드하려는 경우 트리거 탭에서 분기 필터에 분기를 지정할 수 있습니다.
  • 을 병합하기 전에 PR을 확인하려면 분기 정책에 대한 빌드 유효성 검사를 추가 할 수 있습니다.귀하의 우려를 들어

:

  1. 심지어 빌드 정의는 여러 가지를 트리거 할 수 있지만, 변경은이 지점에 밀어 후 특정 빌드를 들어, 특정 지점을 구축 할 수 있습니다. 그리고 실제로 어떤 브랜치가 빌드되어 있는지 감지하고 브랜치 버전 번호를 업데이트 할 수 있습니다.

    예를 들어, master 브랜치와 dev 브랜치 모두를 빌드 할 수있는 빌드 정의가있는 경우. 변경 사항을 master 분기로 푸시 한 후 빌드는 master 분기로 대기합니다. 그리고 브랜치 이름을 몇 가지 방법으로 얻을 수 있으므로 버전 번호를 그에 따라 높일 수 있습니다.

  2. 만 가지 빌드 정의에 트리거 할 수있는 지정뿐만 아니라 path filters. 트리거 모두, 당신은 경우에만 .sln 빌드를 실행하는 데 .sln 원하는 포함 folderAfolderB 있다고 가정 할 수있는 폴더를 지정할 수 없습니다 folderA에서 파일 변경 사항을, 그래서 당신은 가지 필터를 지정할 수 있으며 경로는 다음과 같이 필터 :

    enter image description here


상황 : 여러 분기가 빌드 정의에 의해 트리거 될 수 있으므로 PowerShell 작업을 추가하여 빌드중인 지점을 감지 할 수 있습니다. 아래 스크립트는 다음과 같습니다 :

$head=$(git rev-parse HEAD) 
$sha=$head.Substring(0,7) 
$branches=$(git branch -rv) 
for ($i=0;$i -lt $branches.Length; $i++) 
{ 
    if ($branches[$i] -match $sha) 
    { 
    $tbranch=$branches[$i] -split "\s+" 
    $local=$tbranch[1] -split '/' 
    $br=$local[1] 
    echo "You are building $br branch" 
    break 
    } 
} 
+0

실제로 "어떤 브랜치가 실제로 빌드되었는지 감지하고 그에 따라 브랜치 버전 번호를 업데이트 할 수 있습니다." 나는 내가이 패턴을 정말로 좋아할 것이라는 것을 내가 어떻게 이해했는지 의심 스럽다. –

+0

예, 원인 중. 내 대답의 마지막 부분에 어떤 지점이 있는지 감지하는 방법을 추가했습니다. 시도해 볼 수 있습니다. –

0

이 부분,

이 좋은 생각인가? 조심해야 할 것은 무엇이며이를 설정하는 가장 좋은 방법은 무엇입니까?

은 주제와 관련이 없으므로 (너무 광범위하고 주로 의견을 기반으로 함), 나는 그것을 무시하고 귀하가 설명한 두 가지 구체적인 시나리오에 대답합니다.

  1. 당신이 무엇을 요구하고 있는지 확실하지 않습니다. 릴리스 정의 환경은 분기 (아티팩트 트리거)에서 트리거하도록 설정할 수 있으므로 이전 분기에 대한 릴리스 요구 사항이 다르면 단일 릴리스 정의 내에서 다른 릴리스 정의 또는 대체 파이프 라인을 가질 수 있습니다.

  2. Visual Studio 빌드 단계에서 와일드 카드를 지정할 수 있으므로 지정할 수 있습니다 (예 : **/*.sln). 그러면 모든 폴더에서 .sln 파일을 찾을 수 있습니다.