关于TeamCity的几个问题

时间:2010-09-15 16:18:43

标签: .net continuous-integration teamcity

我想在很长一段时间内为一个大型项目安装CI服务器,但没有时间需要,我上面的人也不太关心它,他们只是说“这很有趣,而且它可以节省我们一些时间“但从来没有为它做任何事......

我对CC.NET有一些经验,但只是在小项目中,为了学习它的基础知识。最近有更多的业余时间,所以决定尝试TeamCity,并为大项目设置它。

然而,在处理引用时,有两个问题突然出现在我身上:

1)当处理多个项目时,我尽量不制作包含所有项目的大解决方案(并且总是不可能),因为我也使用SVN,我使用指向已编译程序集的相对路径其他项目(例如:.... \ Library A \ trunk \ Library \ bin \ release \ LibraryA.dll)。对我和参与该项目的同事来说,它一直都很好用,但是我很难让TC项目搞定,我应该如何建立我的依赖?

2)其中一个库是由另一家公司制作的,SVN存储库与它们共享。他们最近不得不添加对Oracle数据库的访问权限,并且他们使用Oracle数据提供程序,它似乎与在GAC中注册的程序集一起工作,但在构建解决方案时,它会输出另一个类似的程序集但具有不同的程序集版本(纠正我,如果我错了,我一直与内置的Oracle提供商合作,因为它已经足够了)。在我的公司方面,我们使用“输出组件”,项目编译并正常工作,但我们以前必须更改引用,并且修改存储库中的项目文件是不可能的,是否有任何解决方法对此?

感谢您的回复。

4 个答案:

答案 0 :(得分:1)

对于1),当您的项目由TC构建时,您可以使用Svn externals从其他项目中获取程序集和其他依赖项。

您还可以将TC设置为检测外部更改的时间并使用最新版本构建项目,或者您可以将TC项目链接在一起,以便它们按顺序构建。

我已经投入了大量时间让CI服务器在我们的地方启动并运行,并且它确实得到了回报。它仍然需要花费一些时间让事情发生变化,但是会认真地建议你开始运行。

抱歉无法帮助您2)。

答案 1 :(得分:1)

For 1)您可以为Projects设置ReferencePath并使用已编译的程序集指向目录。

在我们的TC配置中,我们将所有TeamCity依赖项加载到名为“Dependencies”的子目录,并将编译器的ReferencePath设置为此目录。

使用MSBuild Runner非常简单:

在Build .proj中,您需要定义一个属性(我们称之为ReferencePath

<PropertyGroup>
    <ReferencePath>$(MSBuildProjectDirectory)\Dependencies\</ReferencePath>
</PropertyGroup>

然后用它调用MSBuild任务:

<MSBuild Projects="$(ProjectFiles)" Properties="Configuration=Release;ReferencePath=$(ReferencePath)" Targets="Rebuild" />

@(ProjectFiles)是一个简单的ItemGroup,它收集所有.csproj - 文件。

<ItemGroup>
    <ProjectFiles Include="$(MSBuildProjectDirectory)\**\*.csproj" />
</ItemGroup>

答案 2 :(得分:0)

通过修改引用属性并将其设置为不查找特定版本来解决#2。另一家公司似乎已经接受了它。

还没有时间检查#1的VCS Checkout规则。

答案 3 :(得分:0)

感谢所有回复,学到了一些新东西。

昨天可以与TC一起玩,了解更多有关VCS结账规则的信息,并发现,#1可以很容易地用工件解决(这个名字我起初并没有意识到它们是什么),所以我使用它,我的项目到目前为止没有任何问题。

你们对这种方法有何看法?图书馆给我带来了同一个项目的“核心”库的问题,所以我已经为他们设置了一个项目。