2010-07-21 68 views
1

我有一个CruiseControl.NET动力构建服务器和一个exec任务,在构建它之前递增项目的程序集版本。我在想,是否有一种方法(我不知道CruiseControl.NET的任务)将修改后的文件提交给SVN?CruiseControl.net在任务更改后向SVN提交文件

我需要它,所以当安装项目是手动构建的时(我使用msbuld,所以这些不是连续构建的),所有构建文件在部署时都将具有正确的程序集版本。哦,如果有人知道如何在未安装Visual Studio的构建服务器上构建设置&部署项目,我很想知道!

编辑:感谢乔纳森·斯坦顿更新现在的作品,但它创造了另一个问题......构建服务器现在循环(变化它更新程序集的版本,并提交该文件,该caouses的onModify触发器触发这样它更新程序集版本并提交文件...)。

我该怎么做才不会循环?我可以添加更新SVN任务吗?这会有帮助吗?

+0

我试图在提交任务后添加更新任务,但它没有帮助,它仍然在每次运行中都找到修改。 – 2010-07-21 12:14:40

+0

我尝试设置SVN使用revisionNumbers,因为我正在更新我的工作目录,这将阻止它的构建,但它仍然在每个间隔都发怒... – 2010-07-21 12:38:44

回答

0

This question may help

由于VS依赖关系,我放弃了安装和部署项目。

+0

这是一个关于安装和部署项目的耻辱......将研究那个问题,现在谢谢你。 – 2010-07-21 06:19:10

+0

我现在使用WiX来生成.msi设置。一些VS集成的粗糙边缘,但几乎无痛。 – devstuff 2010-08-26 02:07:26

2

以下任务将提交一个文件进入源回购。

<exec executable="svn.exe">   
    <buildArgs>commit -F <file you want to commit back> --username USER --password PASS --no-auth-cache --non-interactive --message 'CruiseControl.net build %CCNetLabel%'</buildArgs> 
    <buildTimeoutSeconds>10</buildTimeoutSeconds> 
</exec> 

下面的链接可能是有用的:

我希望这有助于

乔纳森

编辑

还有另一种方式来做到这一点,那就是让CC.NET在DLL设置的内部版本。这里是如何做到这一点的达米尔的角落题为演练Setting Up SVN and CC.NET for .NET Development

+0

我只是想知道如果这不会再次导致构建触发器,并因此创建一个无限循环增量和重新构建相同的项目? – 2010-07-21 10:22:08

+0

这确实会循环构建服务器。现在每5分钟发生一次完整版本(增加版本)。我该怎么做,这样的任务不会触发CruiseControl.NET构建? – 2010-07-21 10:50:34

+0

你正在提交什么文件?如果它是DLL,那么你可以创建一个新的分支或新的回购,只包含这个文件。然后,您将该分支/回购映射到一个新的目录,有一个任务将dll /文件复制到该目录,然后在该文件上运行提交。 您的其他项目将只需要监视该文件的新分支/回购。 – 2010-07-21 11:48:12

0

在其乔纳森挂在他的回答中post on my blog我描述了我的设置,它在构建过程中不做任何提交。在构建过程中,我只是使用Subversion的版本号,而不是增加版本号。我更喜欢这种方式,因为根据内部版本号,我可以轻松检索用于构建版本的源代码。

在我所有的构建都在CruiseControl.NET上完成的情况下,这很好用。在这种情况下手动构建设置比较棘手,因为Subversion中的文件没有正确的内部版本号。您可以通过使用CruiseControl.NET版本中已经修改过的文件来绕过这个问题,并使用它们来构建您的设置。或者你也可以连续建立设置。

如果这不适合你,你应该采取由DilbertDave建议的Filtered Source Control Block路径。只需将您的AssemblyInfo.cs文件(或在构建过程中修改的任何其他文件)放在exclusionFilters中即可摆脱构建循环。