2017-03-23 13 views
1

最近TFS 2010からTFS 2017にアップグレードしました。ビルドが成功したか失敗したかを電子メールで送信するプロジェクトのビルド通知が設定されています。これまで、この電子メールには、失敗した単体テストのリストと、関連するチェンジセットのリストが含まれていました。ただし、TFS 2017にアップグレードした後は、どちらもビルド通知メールに含まれていません。私が知っている限り、TFS 2010のアラートテンプレートを修正して、欠落した情報を電子メールに取り込むことはありませんでした。 TFS 2017ビルド通知電子メールに失敗した単体テストと関連チェンジセットのリストを取得する方法はありますか?TFS 2017ビルド通知に「関連する変更セット」領域が含まれていません

+0

[Catlight build notifier for TFS](https://catlight.io)を試すこともできます。チェンジセットも表示されませんが、ビルドをクリックするとブラウザでその詳細を見ることができます。 – alex

答えて

3

私は部分的な解決策があります。作業項目が利用可能なようには見えませんが、チェンジセットはいくつかの異なる名前でしかありません。

最初に私は%programfiles%\Microsoft Team Foundation Server 1X.0\Application Tier\TFSJobAgent\Transforms\1033\BuildCompletedEvent.xslを開いて、ソースxmlをダンプするだけの内容に置き換えました。後で編集する必要があるので、このファイルの古い内容はそのままにしておきます。

いくつかのコードで
<xsl:template match="/"> 
    <xsl:copy-of select="."/> 
</xsl:template> 

を確認し、そのXSLテンプレートを供給していますソースのXMLを参照するようにビルド通知メールを見て、その後、それを拾うだろうビルドを開始します。 AssociatedChangesetがAssociatedCommitになっていることがわかります。私はMicrosoftがモデルのスキーマを変更し、そのモデルを読み込んでいるテンプレートを無視することに驚きました。

<xsl:if test="count(tb:Build/tb:Information/tb:BuildInformationNode[@Type = 'AssociatedChangeset']) > 0"> 
    <h2 style="font-size: 12pt; margin-bottom: 0em;"> 
    <span _locID="AssociatedChangesets">Associated Changesets</span> 
    </h2> 
    <div style="margin-left:1em"> 
    <table style="font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-size: 10pt;"> 
     <xsl:apply-templates select="tb:Build/tb:Information/tb:BuildInformationNode[@Type = 'AssociatedChangeset']"> 
     <xsl:sort select="tb:Fields/tb:InformationField[@Name = 'ChangesetId']/@Value"/> 
     </xsl:apply-templates> 
    </table> 
    </div> 
</xsl:if> 

をそして前にこれを置く:

はBuildCompletedEvent.xsl内のすべてのオリジナルのコンテンツを交換し、その後、 tb:BuildCompletedEventテンプレート内で、これを見つける

<xsl:if test="count(tb:Build/tb:Information/tb:BuildInformationNode[@Type = 'AssociatedCommit']) > 0"> 
    <h2 style="font-size: 12pt; margin-bottom: 0em;"> 
    <span _locID="AssociatedCommits">Associated Commits</span> 
    </h2> 
    <div style="margin-left:1em"> 
    <table style="font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-size: 10pt;"> 
     <xsl:apply-templates select="tb:Build/tb:Information/tb:BuildInformationNode[@Type = 'AssociatedCommit']"> 
     <xsl:sort select="tb:Fields/tb:InformationField[@Name = 'CommitId']/@Value"/> 
     </xsl:apply-templates> 
    </table> 
    </div> 
</xsl:if> 

そして、実際のチェンジテンプレートを見つけますこれは:

そしてこれを前に置く:

<xsl:template match="tb:BuildInformationNode[@Type = 'AssociatedCommit']"> 
    <tr> 
    <td style="padding-right:2em"> 
     <strong> 
     <xsl:value-of select="tb:Fields/tb:InformationField[@Name = 'Author']/@Value"/>. 
     </strong> 
     <xsl:call-template name="linefeed2br"> 
     <xsl:with-param name="StringToTransform" select="tb:Fields/tb:InformationField[@Name = 'Comment']/@Value"/> 
     </xsl:call-template> 
     - 
     <a> 
     <xsl:variable name="href" select="tb:Fields/tb:InformationField[@Name = 'Uri']/@Value"/> 
     <xsl:variable name="fragment" select="'/_apis/tfvc/changesets/'"/> 
     <xsl:attribute name="href"> 
      <!--<xsl:value-of select="replace(tb:Fields/tb:InformationField[@Name = 'Uri']/@Value, '/_apis/tfvc/changesets/', '/_versionControl/changeset/')"/>--> 
      <xsl:value-of select="substring-before($href,$fragment)"/> 
      <xsl:value-of select="'/_versionControl/changeset/'"/> 
      <xsl:value-of select="substring-after($href,$fragment)"/> 
     </xsl:attribute> 
     Changeset <xsl:value-of select="tb:Fields/tb:InformationField[@Name = 'CommitId']/@Value"/> 
     </a> 
    </td> 
    </tr> 
</xsl:template> 

XMLでのウリは、したがって、APIの統合のためにウェブUIへのリンクを作るために文字列置換をJSONを返すことに注意してください。私はreplace()関数が機能しているので、部分文字列を得ることに問題がありました。

http://tfs:8080/tfs/DefaultCollection/_apis/tfvc/changesets/10516 
http://tfs:8080/tfs/DefaultCollection/_versionControl/changeset/10516 

壊れた参照を変更するのではなく、既存のテンプレートに追加しました。 TFSのアップグレードによってモデル名が古いものに変更された場合でも、テンプレートはまだそれらと一致し、何も編集することなくそれらを引き上げるという希望を持っています。

変更後、TFSに新しいテンプレートが表示されるようにする必要があります。 https://www.visualstudio.com/en-us/docs/setup-admin/tfs/command-line/tfsservicecontrol-cmd

私は、失敗した単体テストでソースXMLを取得していませんが、他の人が実行し、どのテストが失敗したかの詳細を示している場合は、更新されたXSLを共有してください。

+0

ありがとうございました!私たちはビルド通知電子メールに関連するコミット(変更セット)リストを返すことができました。残念ながら、私たちはまだ失敗したテストを取得することはできません - 生成されるXMLには含まれていないようです。 – Lex

2

これは、新しいvNextビルドのユーザーボイスとなっています。チェンジデータと関連付けられている作業項目は、BuildCompletedEvent.xslに

(vNextの構築)TFS 2015のビルドを使用して電子メールアラートが表示されません関連したチェックインをデフォルトにさらされていないようです

今の https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/9754887-using-tfs-2015-build-build-vnext-email-alerts-do

あなたの電子メールアラートDrive:\%programfiles%\Microsoft Team Foundation Server 1X.0\Application Tier\TFSJobAgent\Transforms\1033をカスタマイズする必要があります。詳細はお問い合わせくださいCustomize the format for TFS email alerts

+0

https://msdn.microsoft.com/en-us/library/jj635150(v=vs.120).aspx#Checkyourbuildsystemandbuildprocessをデバッグ –

関連する問題