我正在努力实现我们日常工作的持续整合。 在我们的团队中,我们正在从在工作站上的Visual Studio中构建代码并部署,到使用MSBuild.exe并在我们的构建服务器(即Jenkins)上自动化而不使用Visual Studio。
我们在项目中对引用(例如Automap)有外部依赖关系。因为自动化(例如)dll不在构建服务器上,所以msbuild执行失败,原因很明显。还有其他dll我需要成为构建的一部分,我只是使用automap作为示例。
那么,作为自动构建的一部分,将任何依赖项添加到构建服务器的最佳方法是什么?我已经看到了使用'lib'文件夹的引用,但我真的不明白我应该把它放在哪里(在我的项目,文件系统,SVN ......?),以及构建服务器将如何实现它。我还读到NuGet可以用依赖关系做些什么,但是我的构建服务器没有连接到互联网,我不明白如何让我的构建来拉取我可能创建的NuGet包,以及它如何一起工作。
编辑:我正在使用颠覆,我们不能使用TeamCity,因为我们必须购买它,并且没有资金的机会。
答案 0 :(得分:4)
我们运行SVN + CCNet。我们有第三方库的SVN存储库,如下所示:
/foo/foo-1.2.3
/foo/foo-1.4.0
/bar/bar-1.0.0
即每个库的一个目录,其中包含每个可用版本的子目录。
一条规则是目录必须包含原始库 - 即您解压缩并提交,不允许修改。
当您需要项目中的库时,您需要添加一个lib-directory并将链接(svn:externals)填充到第三方存储库中的库中。这里重要的是您不在本地目录名称中包含版本号。如果你需要foo-1.4.0,lib目录下的svn:externals链接将是这样的:
foo https://svn-server/3rdparty/foo/foo-1.4.0
即。它最终在/ lib / foo中。这样升级版本就变得容易了,因为您只需更改svn:externals链接以指向新版本,并且(只要文件名没有更改)所有项目都将自动获取并可编译
至于NuGet ..比它的价值更麻烦,但意见不同:)
希望有所帮助
答案 1 :(得分:4)
我喜欢stmax的解决方案,但此时对你来说可能有点太多工作。
最简单的方法是在您的存储库中创建一个lib目录,并将所有第三方程序集添加到该目录。 更新所有项目以引用此lib目录中的第三方程序集。检查一切。当构建服务器唤醒进行下一次构建时,它将提取最新的更改,其中包括新的lib目录和项目引用更改。绿色建筑!
答案 2 :(得分:1)
您应该详细阅读NuGet,因为它允许您设置内部包存储库,
答案 3 :(得分:1)
您的第一个目标应该是让CI运行,无论您的系统有多优雅。构建系统时,“lib目录”选项通常最简单。您将二进制文件检入Subversion。这很丑陋,但它可以让你开始,你的构建水平将是可重复的,这是必须的。在此工作之后,研究并选择适合您需求的外部依赖版本系统(可能是Nuget)。
作为附注,请详细检查TeamCity的免费部署对您不起作用。最后我检查过你必须拥有大量协调项目或大量构建代理才能获得许可。