使用NAnt从TeamCity获取VCS更改

时间:2013-10-18 18:22:25

标签: teamcity javabeans nant email-notifications

一旦在分支上提交svn,我正在使用TeamCity Trigger构建所有内容。成功后,它会发送一封电子邮件通知,其中包含导致此构建被触发的VCS更改。从TeamCity的角度来看,这很好。

团队中现在有多个成员没有TC权限,无法设置通知。有了这个,我决定使用NAnt的<mail>使用"${environment::get-variable('BUILD_NUMBER')}"发送此通知以及内部版本号。这在teamcity中运行良好。但是,我还需要在该电子邮件通知的消息中发送触发该构建的更改。

目前,TeamCity将VSC更改格式化为电子邮件,如下所示:

     Changes included (1 change).
     Change 10433 by John Doe (4 files): Issue#245 - Issue description

我希望使用NAnt从TeamCity生成相同的更改。 TeamCity使用build_changes bean在 common.flt 文件中定义此格式。

**Changes included (${changesLink})
  Change ${mod.displayVersion} ${pers} by ${mod.userName} (${modLink}):
          <i>${description?trim}</i>**

如何在我的NAnt消息中使用它?由于TeamCity已经知道svn更改触发了构建,因此最好将此更改添加到我的电子邮件的NANT消息中。有简单的方法吗?

1 个答案:

答案 0 :(得分:4)

我从未使用过NAnt,但可以提供其他两种解决方案......

1)创建一个电子邮件邮件列表,并将需要它的所有人添加到列表中。

然后创建一个teamcity用户,将其电子邮件发送到邮件列表,并为该用户设置所需的通知。

对此的限制是您必须为每个邮件列表创建一个可以占用许可证的用户。

2)您可以使用TeamCity REST API从正在运行的构建中获取该信息。使用%teamcity.build.id%将返回构建ID并执行以下查找:

/httpAuth/app/rest/changes?build=id:%teamcity.build.id%

将返回构建的所有更改:

<changes count="3">
   <change href="/httpAuth/app/rest/changes/id:217404" id="217404" version="b6b97a0d7789d97df6df908ab582ebb723235f43" webLink="http://teamcity.my-domain.com/viewModification.html?modId=217404&personal=false"/>
   <change href="/httpAuth/app/rest/changes/id:217403" id="217403" version="064ecef5552ec2fb7875d7c26fe54cdf94b67bec" webLink="http://teamcity.my-domain.com/viewModification.html?modId=217403&personal=false"/>
   <change href="/httpAuth/app/rest/changes/id:217402" id="217402" version="9bc3a34c952059bbfc7bebeb79ba5a3c894ef555" webLink="http://teamcity.my-domain.com/viewModification.html?modId=217402&personal=false"/>
</changes>

然后遍历每个href元素的<change>网址结果。返回的内容如下:

<change date="20130918T133404-0600" username="welsh" href="/httpAuth/app/rest/changes/id:217397" id="217397" version="51e925e354a83deccde881b30a76974b2ff745f4" webLink="http://teamcity.my-domain.com/viewModification.html?modId=217397&personal=false">
  <comment>
    My comments are here
  </comment>
  <files>
    <file before-revision="90acd4da1972814094c22e3020c5073521a7b640@141323126c0" after-revision="51e925e354a83deccde881b30a76974b2ff745f4@1413290abe0" file="grails-app/views/layouts/global.gsp" relative-file="grails-app/views/layouts/global.gsp"/>
  </files>
  <user href="/httpAuth/app/rest/users/id:1" id="1" name="Welsh" username="welsh"/>
</change>

并使用它来建立您的电子邮件给谁,通过电子邮件发送给最初创建更多工作的人,但是在没有吃掉许可证的情况下,您可以更自由地通过电子邮件发送电子邮件。

相关问题