2

ここでブログに記載されているコードを使用して別のビルドを開始する 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(&quot;PreviousBuildNumber&quot;, &quot;1.1.1.1&quot;)]" 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>

それで、私の最初の質問...シーケンス変数内で戻り値なしでコード行を実行することは可能ですか?

私はこれらのテクノロジーにまったく慣れていないため、基本的なことを見逃している可能性があります。誰かが前のビルド番号を次のビルドに渡すために別のアプローチをとっている場合、それも大歓迎です。

ここまで来たら、どうもありがとう:-)

4

1 に答える 1