9

Visual Studio Online (XAML ビルド定義ではなく) の新しいスクリプト可能なビルド機能を使用しており、ビルド番号形式を使用してターゲット リポジトリの最新の Git コミット ID をビルド バージョン番号に含めようとしています。

次のビルド番号形式を使用しています。

$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceVersion)

これにより、バージョン番号が生成され1.0.1234.ます。つまり、SourceVersion 値が空白になり、ビルドをキューに入れるときに VSO でエラーが発生します。Build.また、同じ結果でプレフィックスを付けて変数を修飾しようとしました。テストするために、ビルド番号を次の形式に変更しました。

$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceBranch)

これにより、次の値が正しく得られます。1.0.1234.refs_heads_master

私は事前定義された変数の参照を使用しており、Build.SourceVersion はグローバル変数としてリストされています。

私は何か間違ったことをしていますか、バグに遭遇しましたか、それともこれは設計によるもので、ビルドがキューに入れられた時点では利用できませんか? これが設計によるものである場合、短い Git コミット ID をビルド番号形式に自動的に含める方法はありますか?

これは、VSO でビルド番号の形式を設定する場所です。 ここで、VSO でビルド番号の形式を設定します

これは、Git CommitId を明示的に指定しない場合に表示されるエラーです。

400: ビルド番号フォーマット文字列 $(MajorVersion).$(MinorVersion).$(BuildId).$(SourceVersion) はビルド番号 0.1.1 を生成しました。無効な文字が含まれているか、長すぎるか、「.」で終わっています。ビルド番号の最大長は 255 文字です。使用できない文字には、「"」、「/」、「:」、「<」、「>」、「\」、「|」、「?」、「@」、および「*」が含まれます。

4

3 に答える 3

2

$(SourceVersion)残念ながら、ビルド番号形式では使用できません。ただし、PowerShell を使用してビルド番号を に変更できると思います$(SourceVersion)。ビルド プロセスに PowerShell を含める必要があります。詳細はこちらのリンクをご確認ください。

また、PowerShell を次のように定義できます。

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.WorkItemTracking.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")
[System.Reflection.Assembly]::LoadWithPartialName("System.Net")

[String] $CollectionUrl = "https://vsoserver.visualstudio.com/defaultcollection"
[String] $BuildUrl = $env:BUILD_BUILDURI 

$netCred = New-Object System.Net.NetworkCredential("username","password")
$basicCred = New-Object Microsoft.TeamFoundation.Client.BasicAuthCredential($netCred)
$tfsCred = New-Object Microsoft.TeamFoundation.Client.TfsClientCredentials($basicCred)


$teamProjectCollection = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection($CollectionUrl,$tfsCred)

$buildServer = $teamProjectCollection.GetService([type]"Microsoft.TeamFoundation.Build.Client.IBuildServer")

$buildDetail = $buildServer.GetBuild([Uri]$BuildUrl)

$buildDetail.BuildNumber = $Env:BUILD_SOURCEVERSION 

$buildDetail.KeepForever = $true
$buildDetail.Save()
于 2015-09-17T10:38:50.883 に答える