2015-09-16 7 views
7

Visual Studio Online(XAMLビルド定義ではありません)で新しいスクリプト作成機能を使用しています。ビルドバージョン番号を取得しようとしています。 Build Number Formatを使用してターゲット・リポジトリーを作成します。VS.SoでBuild.SourceVersionが空です。vNext Build

私は次のビルド番号の形式を使用しています:1.0.1234.の生成バージョン番号になり

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

- すなわちSourceVersion値は、ビルドをキューイングする際VSOにエラーが発生した、空白です。私は同じ結果を持つBuild.という接頭辞を付けて変数の修飾を試みました。テストするために、私は次の形式にビルド番号が変更されました:

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

これは正しく私がPredefined Variables参照を使用しているとBuild.SourceVersionがグローバル変数としてリストされている1.0.1234.refs_heads_master

の値になり。

私は何か間違ったことをしていますか?これはバグが発生したか、これは設計上のもので、ビルドがキューに入れられた時点で利用できませんでしたか?これが仕様であれば、短いGit Commit IDをBuild Number Formatに自動的に含める方法はありますか?

私はVSOにビルド番号の書式を設定する場所です: This is where I set the build number format in VSO

これは私が明示的にGit CommitIdを指定していないときに私は見誤りである:

400:ビルド番号形式文字列 $(MajorVersion)$(MinorVersion)$(BuildId)$(SourceVersion) ビルド番号0.1.1を生成しました。無効な文字が含まれていますが、長すぎるか、「。」で終わっています。ビルド番号の最大長は255 文字です。 '<'、 '>'、 '\'、 '|'、 '?'、 '@'、 '*'のような文字は使用できません。

+0

は、私が何を達成することができます'$(MajorVersion)。$(MinorVersion)。$(Build.BuildId)。$(Build.SourceVersion)'で説明されています。 VSOとTFS 2015の両方をオンデマンドで検証しました。出力は '1.0.20.41f2983578f720695227a7a8a41ed3d7437efc30'のようになります。それはあなたの側でその奇妙な行動を引き起こすタイプミスではないと確信していますか? –

+0

@YanSklyarenko、私は常に$(MajorVersion)を使用する場合、 "ビルド番号形式(型InvalidMacroInBuildNumberException)で指定されたマクロ$(Build.SourceVersion)を展開できません。" $(MinorVersion)。$(Build.BuildId)ビルド番号の形式を定義する$(Build.SourceVersion)。さらに、SourceVersion変数は、このビルドに含まれている最新のバージョンコントロールの変更です。 CommitIdまたはチェンジセット番号(たとえばCS1234)。「41f2983578f720695227a7a8a41ed3d7437efc30」のようにはなりません。私は何か重要なことを忘れましたか –

+0

@Vicky、hmm、それは別のことだと思います。例外( 'InvalidMacroInBuildNumberException')はビルド番号形式が無効であることを意味します。私は、メジャーを期待しています。マイナー。ビルド。すべてをIDやハッシュではなく数字に見直します。 $(Build.SourceVersion)のマクロ部分は機能しますが、ビルド番号には使用できません。他のコメント - GitのコミットIDは長いハッシュ、 'CS1234'はTFVCチェンジセットのフォーマットです。 –

答えて

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() 
+0

これは便利です。あらかじめ定義された変数を使用して解決策が見つからない場合、私はそれを念頭に置いておきます。 – GaryJL

+0

これは唯一可能な解決策だと私は言うだろう。 –

+0

こんにちは@Yan、私はあなたのソリューションを使用していますが、エラーが発生し、System.InvalidOperationException:基本認証は、サーバーへの安全な接続が必要です。この行の上で右クリックしてください。IBuildDetail buildDetail = buildServer.GetBuild(BuildUrl); –

2

I $(Build.SourceVersion)を使用することができましたが、ビルドがコミット時に自動的にトリガーされた場合のみ(連続的な統合時)。あなたが実行したときので、それが空判明 -

$(BuildDefinitionName)_$(date:yyyyMMdd)_$(Build.BuildId).$(Build.SourceVersion)$(rev:.r) 
+0

私は同じ問題を抱えていましたが、解決しましたか? – MonDeveloper

+0

@MonDeveloperはい、上記のフォーマット文字列を使用すると、CIトリガービルドに自動的に塗りつぶします。ビルドを手動でキューイングするときにソースバージョンを指定することも可能であるようです(詳しくはWillの答えを参照してください)。 – NeoGarRiGus

1

NeoGarRiGus:

Build queue screenshot私が構築し、次の番号の形式を使用してい

:それは、私は手動でそれをキューに入れた場合にのみ、空であることが判明します手動でビルドするには、ソースバージョンフィールドに値を入力する必要があります。CIのときに自動的にDevのチェックの中に価値を入力ができますが、手動でビルドをキューに入れるときに、ソースバージョンを入力することができますポップアップで空白のフィールドがあります:

Source Version Field in VSTS