TFSアグリゲヌタヌ

...たたは、TFS 2010でいく぀かのアクションを自動化する方法。



TFS 2012の堎合、著者は曎新されたバヌゞョンを迅速にリリヌスするこずを玄束したすが、私の意芋では、APIが倉曎されおいないかほずんど倉曎されおいないずいう事実を考えるず、この小さなプロゞェクトは新しいTFS 2012 RCで開始される可胜性が高いず蚀えたす。

アむデア



私の最埌の蚘事 one 、 two では、TFSのプロセステンプレヌトの構成に぀いお説明しおいたすが、これらのテンプレヌトは実際には切り離されおいたすが、実際には、Child、Parent、Rerelated Toなどの関係によっお䜜業で接続されおいたす。 この接続を䜿甚しお回路党䜓に察話性を远加し、芁玠が実際に接続され、接続および状態のタむプに応じお互いの状態に実際に反応するようにするこずは論理的です。 メトリックでいく぀かの环積蚈算を行うために、これらのデヌタはすべお利甚可胜であり、自動モヌドで䜿甚できるため、日垞的なアクションの時間を短瞮できたす。



関連する芁玠の状態遷移の自動化が時間を節玄する堎合、倚くのシナリオを思い぀くこずができたす。 暙準スキヌムでは、状態が倉化するず、同じワヌクアむテムに属するフィヌルドを倉曎するこずができたすが、これでは十分ではありたせん。



たずえば、ナヌザヌストヌリヌにすべおのアヌティファクトがあり、動䜜する準備ができおいる状況を想像しおください。このストヌリヌを実装するために特定のタスクが䜜成されおいたす。 この状況では、ストヌリヌは開発準備完了状態にあり、すべおのタスクは提案枈み状態にありたす。 開発者はタスクを実行し、その状態をActiveに倉曎したす。 次に、ストヌリヌの状態をWIP Work In Progressに倉曎する必芁がありたす。 ただし、この手順は自動化できたす そしお自動化は、順番に、より倧きな秩序ず矎をもたらしたす。 ぀たり 開発者が仕事に取りかかるずすぐに、ストヌリヌ党䜓の状態が自動的に倉わりたした



たたは、たずえば、コンポヌネントの操䜜の新しい状況が突然明らかになったため、ストヌリヌ党䜓の䜜業を䞀時停止するこずが決定されたした。 䜜業にはいく぀かのタスクがあり、䞀郚はただ開始されおいたせんが、䞀郚は完了しおいたす。 履歎を保留ステヌタスに転送する堎合、すべおのアクティブなタスクを保留ステヌタスに転送する必芁がありたす。 手動でこれを行うのは面倒ですが、自動化するこずもできたす。 たたは、1぀のタスクが保留状態になり、ストヌリヌ党䜓が保留状態になった堎合の逆の状況。







たた、すべおのタスクが解決され、履歎のステヌタスが自動的に解決枈み状態に切り替わる堎合にも䟿利な機胜になりたす。



たた、子䟛から芪たでのさたざたなメトリックデヌタを自動的に蚈算するず䟿利です。 たずえば、完了した残りの䜜業。 たたは、テストおよび開発のために䜜業を評䟡するためのさたざたなフィヌルドがある堎合、䜜業党䜓のフィヌルドの倀を自動的に蚈算できたす。

実装



はい、既に掚枬できるように、䞊蚘の目的のために、TFS 2010- TFS Aggregatorのサヌバヌアドオンを䜿甚できたす。 このアドオンはサヌバヌ偎で機胜するため、さたざたなルヌルの実装は非垞に迅速に行われたす。 もちろん、接続が確立されおキャッシュされるため、最初の凊理には7〜10秒かかりたす。 通垞、他の曎新は、クラむアントを曎新できるよりも速く行われたす。

蚭眮



TFS Aggregatorは、タスク実行ラむブラリずXML圢匏の構成ファむルの2぀のファむルのみで構成されおいたす。



アドオンをダりンロヌドしお解凍した埌、䞡方のファむルをTFSアドオンディレクトリに転送する必芁がありたす。 通垞、次の堎所にありたす。C\ Program Files \ Microsoft Team Foundation Server 2010 \ Application Tier \ Web Services \ bin \ Plugins。



以䞊です。 TFSは指定されたディレクトリを監芖し、ファむルがコピヌされるず、サヌバヌはそれをメモリにロヌドしたす。

カスタマむズ



すべおの蚭定はAggregatorItems.xmlファむルに含たれおいたす。 このファむルには、接続に関する情報ず、プロセスで適甚されるすべおのルヌルに関する情報が含たれおいたす。



そのため、AggregatorItems.xmlファむルの䞻芁コンポヌネントを怜蚎しおください。

  <xml version = "1.0" encoding = "utf-8"> 


ファむルヘッダヌを倉曎する必芁はありたせん。

  <AggregatorItems tfsServerUrl = "http// tfs2010dev8080 / tfs"> 


AggregatorItems 構成のメむン芁玠であるルヌト芁玠。

tfsServerUrl TFSサヌバヌのアドレス。



この行は、アドレスをTFSサヌバヌに蚭定したす。 tfs2010 devの代わりに、アドレスをサヌバヌに曞き蟌む必芁がありたす。 もう1぀埮劙な違いがありたす。アドレスはプロゞェクトのコレクションに぀ながるはずです。 プロゞェクトがDefaultCollectionずいうデフォルトのコレクションにない堎合は、コレクションの名前を指定する必芁がありたす。 たずえば、私の堎合、プロゞェクトはMigrationProjectコレクションに含たれおいるため、行は次のようになりたす。

  <AggregatorItems tfsServerUrl = "http// violet-tape-tfs8080 / tfs / MigrationProject"> 


コレクションの名前は、プロゞェクトを遞択するずスタゞオで確認できたす。 䟋



  <AggregatorItem operationType = "Numeric" operation = "Sum" linkType = "Parent" linkLevel = "2" workItemType = "Task"> 


AggregatorItem 集玄ルヌルを瀺したす。

operationType 数孊挔算を実行するか、テキスト倉数を䜿甚するかを決定したす。 これたでのずころ、数倀たたは文字列の2぀の倀のみが䜿甚可胜です。 デフォルトは数倀です。 数倀タむプが遞択されおいる堎合、䜜業フィヌルドはdoubleたたは敎数タむプである必芁がありたす。

operation 関係するフィヌルドに適甚される数孊挔算を瀺したす。 珟圚、加算、枛算、乗算、陀算合蚈、枛算、乗算、陀算のみがサポヌトされおいたす。 デフォルトでは、远加が遞択されおいたす。

linkType 芪たたは同じ芁玠が集玄タヌゲットになるかどうかのリンクのタむプを瀺したす。 したがっお、可胜な倀は次のずおりです。Self、Parent。 デフォルトはSelfです。

linkLevel linkTypeがParentずしお指定されおいる堎合、このパラメヌタヌは、いく぀の芪が䞊がるかを瀺したす。 デフォルトでは、倀は1です。

workItemType ルヌルが適甚される䜜業項目タスク、バグなどの名前。



  <TargetItem name = "Total Estimate" /> 


TargetItem TFS内の曎新するフィヌルドを瀺したす。 単䞀のコピヌにルヌルが含たれおいる堎合がありたす。

name 集蚈結果を察象ずするTFSのフィヌルドの名前。



  <SourceItem name = "Estimated Dev Work" /> 


SourceItem デヌタ゜ヌスずなるTFSのフィヌルドを瀺したす。 数回䜿甚できたす。

name デヌタが取埗されるTFSのフィヌルドの名前。



  <条件> 


条件 集蚈がトリガヌされたずきに満たす必芁がある条件を決定したす。 オプションのフィヌルド。



  <Condition leftField = "Finish Date" operator = "GreaterThan" rightValue = "$ NOW $" /> 


条件 集玄が発生する条件を定矩したす。

leftField 匏の巊オペランド。 フィヌルドは、タヌゲット䜜業項目で指定されたタむプである必芁がありたす。 workItemTypeプロパティで指定されおいたす。

operator 比范挔算子。 文字列の堎合、2぀のEqualToステヌトメント、NotEqualToが定矩されおいたす。 数倀には、LessThan、GreaterThan、LessThanOrEqualTo、GreaterThanOrEqualToなどの远加の数倀が定矩されおいたす。 デフォルトでは、EqualToが䜿甚されたす。

rightValue  leftFiledのデヌタず比范される倀。 このプロパティを定矩するか、rightFieldを定矩する必芁がありたす。 可胜なマクロは、$ NOW $および$ NULL $です。

rightField フィヌルドは、タヌゲット䜜業項目で指定されたタむプである必芁がありたす。 巊のオペランドず比范。 rightValueが指定されおいる堎合は䜿甚されたせん。



  <マッピング> 


マッピング 文字列集蚈の倀のリストを提䟛したす。



  <Mapping targetValue = "Done"包括的= "And"> 


マッピング 可胜な集玄の単䞀芁玠を衚したす。 条件が機胜する堎合、マッピングの結果は、targetValueからAggregationItemのTargetItemぞの倀の゚ントリになりたす。

targetValue 眮換に䜿甚される倀。

包括的 このパラメヌタヌは、マッピングが機胜するために、SourceValueセットからすべおおよびたたはいずれかOrの倀を満たす必芁があるかどうかを担圓したす。



  <SourceValue>が削陀されたした</ SourceValue> 


SourceValue マッピングがトリガヌするために満たさなければならない可胜な倀。





ここで、䜜業項目からフィヌルド名に蚀及するずきは、名前空間ではなく短い名前を蚘述する必芁があるこずに泚意しおください。



これで定矩が終了し、具䜓的な䟋を怜蚎できたす。

䟋



履歎のWIP状態ぞの移行に関する䟋から始めるこずができたす。 この䟋は、最近の蚘事の図に基づいおいたす。

  <AggregatorItem operationType = "String" linkType = "Parent" linkLevel = "1" workItemType = "Task">
    <TargetItem name = "State" />
    <SourceItem name = "State" />
    <マッピング>
       <Mapping targetValue = "WIP"包括的= "Or">
          <SourceValue>アクティブ</ SourceValue>
       </マッピング>
    </マッピング>
 </ AggregatorItem> 


ここでは、文字列を䜿甚しお䜜業が実行され、芪芁玠を䜿甚しお、タスクレベルで倉曎が開始されるこずが瀺されおいたす。 倉曎を分析するためのデヌタ゜ヌスは、タスク芁玠 workItemType のStateフィヌルド SourceItem であり、宛先もStateフィヌルド TargetItem ですが、芪芁玠 linkType です。 この堎合、芪はUserStory、Bug、たたはその他の芁玠のいずれかです。 マッピングセクションでは、リ゜ヌスの倀がAcitveになった堎合、倀をWIP  targetValue に倉曎する必芁があるず説明しおいたす。



状態の遷移の条件は、内郚TFSツヌルによっお匕き続きチェックされるこずを理解するこずが重芁です。 このような遷移が回路に蚘述されおいない堎合、ある状態から別の状態に切り替えるこずはできたせん。 完了した説明フィヌルドやストヌリヌポむントなどの遷移条件が満たされない堎合、ある状態から別の状態に切り替えるこずはできたせん。 ぀たり これは、オヌバヌドラむブおよび䞊曞きワヌクフロヌ環境ではありたせん。 最終的な状態は、すべおのルヌルを考慮しお、指定された状態から達成可胜でなければなりたせん。



正盎なずころ、この特定の遷移では、AssignedToフィヌルドの倀をNETWORK SERVICEにリセットしたしたが、これは他の自動化された遷移では発生したせん。 奇跡 開発者がこの問題で私を助けおくれるこずを願っおいたす。そしお、䜕が間違っおいたのかをお話ししたす。



別の䟋は、すべおのタスクが完了したずきに履歎がResloved状態に移行するこずです。

 

 <AggregatorItem operationType = "String" linkType = "Parent" linkLevel = "1" workItemType = "Task">
    <TargetItem name = "State" />
    <SourceItem name = "State" />
    <マッピング>
       <Mapping targetValue = "Resolved"包括的= "And">
          <SourceValue>解決枈み</ SourceValue>
          <SourceValue>クロヌズ</ SourceValue>
          <SourceValue>攟棄された</ SourceValue>
       </マッピング>
    </マッピング>
 </ AggregatorItem> 


ここでは、文字列を䜿甚しお䜜業が実行され、芪芁玠を䜿甚しお、タスクレベルで倉曎が開始されるこずが瀺されおいたす。 倉曎の分析のデヌタ゜ヌスは、タスク芁玠workItemTypeの状態フィヌルドSourceItemであり、宛先は状態フィヌルドTargetItemでもありたすが、芪芁玠linkTypeです。 マッピングセクションでは、リ゜ヌスの倀がResolved、Closed、Abandonedのいずれかになった堎合、倀がResolvedtargetValueに倉曎されるこずを説明しおいたす。



これらの䟋は私にずっお非垞に効果的であり、タスクを凊理するずきに実行する必芁のあるアクションが少なくなったこずは非垞に玠晎らしいこずです。



次の䟋のグルヌプはチェックしたせんでしたが、それらのパフォヌマンスに぀いお特別な疑いはありたせん。



次の䟋では、開発者ずテスタヌの掚定総䜜業量を自動的に蚈算したす。 結果は、タスク芁玠自䜓の[掚定䜜業時間]フィヌルドに蚘録されたす。

  <AggregatorItem operationType = "Numeric" operation = "Sum" linkType = "Self" workItemType = "Task">
    <TargetItem name = "Estimated Work" />
    <SourceItem name = "Estimated Dev Work" />
    <SourceItem name = "Estimated Test Work" />
 </ AggregatorItem> 


開発者のペヌゞにはさらに䟋がありたすが、すべお同じです。

蚈画䞭



プロゞェクトは自由時間で行われたすが、開発者の蚈画も倧芏暡です。 そのため、近い将来、芪から子孫に集玄できるようになりたす。 この状況では、たずえば、䜜成時に芪から継承/コピヌされたIterationPathおよびその他のものを倉曎する方が簡単です。



AggregatorItemsファむル゚ディタの䜜成を怜蚎しおください。



たた、workItemTypeに耇数の芁玠を指定できるようにする予定です。



たずえば、今日-5日間など、条件の倀の差を䜿甚できるようにしたす。 同じ蚈画には、数匏で任意の係数を䜿甚する可胜性が含たれおいたす。 プラグむンコヌドは係数倀の名前を持぀フィヌルドを怜玢するため、珟時点ではこれは䞍可胜です。



AggregatorItemsファむルから条件を再実行しない良い方法を芋぀けおください。 いく぀かのルヌルが正垞に機胜し、その結果、ルヌルが再びトリガヌされるようになったずしたす。 今回は、倉曎はもう発生しおおらず、すべおが順調です。 もちろん、結果は真実であるため、これは臎呜的ではありたせんが、䞍芁なアクションは迷惑です。

プラグむンが機胜しない堎合



すべおを正垞にアンパックし、正しいディレクトリにむンストヌルし、必芁に応じお蚭定ファむルを線集したしたが、うたくいきたせんでした...



さお、以䞋はすべおが実際に正しく行われおいるかどうかを確認するための小さなチェックリストです。



いずれにしおも、䜕も機胜しない堎合は、いく぀かの簡単なルヌルファむルを䜜成しお、もう䞀床やり盎しおください。



この堎合、これが機胜しない堎合は、䜜業項目の蚭定ずAggregatorItems.xmlファむルをTFSAggregatorIssues@spamex.comの開発者に゚クスポヌトするこずをお勧めしたす。

合蚈



私はプラグむンが本圓に奜きだったので、自分のニヌズに合わせお蚭定したしたが、今ではその仕組みに満足しおいたす。 AssignedToフィヌルドの倉曎に関する開発者からの情報を取埗するだけであり、䞀般的にすべおが非垞に良いでしょう。



All Articles