使用NAnt从TeamCity获取VCS更改

使用NAnt从TeamCity获取VCS更改,teamcity,javabeans,nant,email-notifications,Teamcity,Javabeans,Nant,Email Notifications,我正在使用TeamCity触发器在分支上提交svn后构建所有内容。一旦成功,它将发送一封电子邮件通知,其中包括导致触发此构建的VCS更改。从团队城市的角度来看,这很好 现在团队中有多个成员没有TC权限,无法设置通知。基于此,我决定使用NAnt的发送此通知以及使用“${environment::get variable('Build_number')}”的内部版本号。这在teamcity内部运行良好。但是,我还需要在该电子邮件通知的消息中发送触发该构建的更改 目前TeamCity将VSC更改格式化

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

现在团队中有多个成员没有TC权限,无法设置通知。基于此,我决定使用NAnt的
发送此通知以及使用
“${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\u changes bean在common.flt文件中定义此格式

**Changes included (${changesLink})
  Change ${mod.displayVersion} ${pers} by ${mod.userName} (${modLink}):
          <i>${description?trim}</i>**
**包含的更改(${changesLink})
将${mod.displayVersion}${pers}更改为${mod.userName}(${modLink}):
${说明?修剪}**

我如何在NAnt消息中使用此选项?由于TeamCity已经知道是什么svn更改触发了构建,因此最好将此更改添加到我的NANT邮件中。有没有简单的方法可以做到这一点?

我从未使用过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>

用它来建立你的电子邮件,你给谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件,谁发电子邮件

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>

并用它来建立你的电子邮件给谁,你的电子邮件给谁,这是更多的工作,以创造更多的最初,但更多的自由,你的电子邮件谁不吃了许可证。

谢谢。我以前从未使用过TeamCity的RestAPI。基于您的解决方案,我能够获得teamcity.build.id,因为它是xml格式的,所以我决定在nant中进行一次测试,以获得计数和svn修订。如果计数大于0,那么我将生成一个svn日志,其中包含更改,这些更改现在可以在电子邮件的消息中发送。现在效果很好。再次感谢。嘿,威尔士。我知道你说过你从未用过南特,但这可能是一个团队城市的事情。。在构建步骤TC config设置中,如果我在粘贴构建文件内容时使用
/httpAuth/app/rest/changes?Build=id:%teamcity.Build.id%
,它会返回
Build.id
很好,但如果我在构建文件中使用它,teamcity不会返回
Build.id
。我更喜欢通过指定路径来调用Nant文件,而不是将其粘贴到TeamCity中。你知道这是为什么吗?TeamCity用实际的
build.id
替换
%TeamCity.build.id%
,如果它可以看到的话。因此,如果您的NAnt构建文件中只有该文本,TC不知道如何替换它,因为NAnt进程被分叉了。但是,如果您使用的是TC Integrated NAnt runner,则应该能够使用选项
命令行参数:
并传入
-D:arg.buildId=%teamcity.build.id%
。然后在NAnt脚本中使用
${arg.buildId}
.Ah。明白了,有道理。我将使用build.id的参数。应该有用。非常感谢!!!谢谢我以前从未使用过TeamCity的RestAPI。基于您的解决方案,我能够获得teamcity.build.id,因为它是xml格式的,所以我决定在nant中进行一次测试,以获得计数和svn修订。如果计数大于0,那么我将生成一个svn日志,其中包含更改,这些更改现在可以在电子邮件的消息中发送。现在效果很好。再次感谢。嘿,威尔士。我知道你说过你从未用过南特,但这可能是一个团队城市的事情。。在构建步骤TC config设置中,如果我在粘贴构建文件内容时使用
/httpAuth/app/rest/changes?Build=id:%teamcity.Build.id%
,它会返回
Build.id
很好,但如果我在构建文件中使用它,teamcity不会返回
Build.id
。我更喜欢通过指定路径来调用Nant文件,而不是将其粘贴到TeamCity中。你知道这是为什么吗?TeamCity用实际的
build.id
替换
%TeamCity.build.id%
,如果它可以看到的话。因此,如果您的NAnt构建文件中只有该文本,TC不知道如何替换它,因为NAnt进程被分叉了。但是,如果您使用的是TC Integrated NAnt runner,则应该能够使用选项
命令行参数:
并传入
-D:arg.buildId=%teamcity.build.id%
。然后在NAnt脚本中使用
${arg.buildId}
.Ah。明白了,有道理。我将使用build.id的参数。应该有用。非常感谢!!!