ここでブログに記載されているコードを使用して別のビルドを開始する TFS ビルド定義に取り組んでいます: 1 つのチーム ビルドが成功したときに別のチーム ビルドをキューに入れる
投稿の一番下にある最初の 2、3 のコメントに興味があります。基本的に、最初のビルド番号を次のビルドに渡したいだけです。
XAML テンプレートを変更して、 ...のIBuildRequest
代わりにを渡すのはかなり簡単でした。IBuildDefinition
<Sequence.Variables>
<Variable x:TypeArguments="mtbc:IBuildDefinition" Default="[BuildServer.GetBuildDefinition(BuildDetail.TeamProject, buildChainItem)]" Name="ChainedBuildDefinition" />
<Variable x:TypeArguments="mtbc:IBuildRequest" Default="[BuildServer.CreateBuildRequest(ChainedBuildDefinition.Uri)]" Name="ChainedBuildRequest" />
<Variable x:TypeArguments="mtbc:IQueuedBuild" Default="[BuildServer.QueueBuild(ChainedBuildRequest)]" Name="QueuedChainedBuild" />
</Sequence.Variables>
さらにトリッキーなのは、現在のビルド番号をProcessParameters
新しい の に追加することIBuildRequest
です。
上記のようなDefault
属性を使用してコード行を追加する方法はわかりますが、各行が何かを返す必要があるようです。<Variable>
しかし、実行したい行のいくつかは、新しい要素をProcessParameters
辞書に追加するときなど、戻り値なしでメソッドを呼び出すだけです。これが私が試したことです...
<Sequence.Variables>
<Variable x:TypeArguments="mtbc:IBuildDefinition" Default="[BuildServer.GetBuildDefinition(BuildDetail.TeamProject, buildChainItem)]" Name="ChainedBuildDefinition" />
<Variable x:TypeArguments="mtbc:IBuildRequest" Default="[BuildServer.CreateBuildRequest(ChainedBuildDefinition.Uri)]" Name="ChainedBuildRequest" />
<Variable x:TypeArguments="x:String" Default="[ChainedBuildRequest.ProcessParameters]" Name="NextProcessParameters" />
<!-- deserialize processparameters string into dictionary -->
<Variable x:TypeArguments="scg:IDictionary(x:String, x:Object)" Default="[WorkflowHelpers.DeserializeProcessParameters(NextProcessParameters)]" Name="DeserializedProcessParameters" />
<!-- *** add new parameter, but no return value, so will not work *** -->
<Variable x:TypeArguments="x:String" Default="[DeserializedProcessParameters.Add("PreviousBuildNumber", "1.1.1.1")]" Name="AddNewParameter" />
<!-- serialize back into a string -->
<Variable x:TypeArguments="x:String" Default="[WorkflowHelpers.SerializeProcessParameters(DeserializedProcessParameters)]" Name="SerializedProcessParameters" />
<!-- *** also no return value, so will not work *** -->
<Variable x:TypeArguments="x:String" Default="ChainedBuildRequest.ProcessParameters = SerializedProcessParameters" Name="UpdateProcessParameters" />
<Variable x:TypeArguments="mtbc:IQueuedBuild" Default="[BuildServer.QueueBuild(ChainedBuildRequest)]" Name="QueuedChainedBuild" />
</Sequence.Variables>
それで、私の最初の質問...シーケンス変数内で戻り値なしでコード行を実行することは可能ですか?
私はこれらのテクノロジーにまったく慣れていないため、基本的なことを見逃している可能性があります。誰かが前のビルド番号を次のビルドに渡すために別のアプローチをとっている場合、それも大歓迎です。
ここまで来たら、どうもありがとう:-)