以自动方式在Jenkins/Hudson中运行单元测试,从dev到构建服务器

Kev*_*nde 8 continuous-integration automated-tests hudson jenkins

我们目前正在运行Jenkins(Hudson)CI服务器来构建和打包我们的.net Web项目和数据库项目.一切都很好但我想开始编写单元测试,然后只有在单元测试通过时才传递构建.我们使用内置的msbuild任务来构建Web项目.有以下论点......

MsBuild Version           .NET 4.0
MsBuild Build File    ./WebProjectFolder/WebProject.csproj  
Command Line Arguments    ./target:Rebuild /p:Configuration=Release;DeployOnBuild=True;PackageLocation=".\obj\Release\WebProject.zip";PackageAsSingleFile=True
Run Code Online (Sandbox Code Playgroud)

我们需要在我们的代码上运行自动化测试,这些代码在我们的机器上构建时可能会自动运行(可能是构建后事件),但是当Jenkins为该项目构建时也会运行.

如果你这样运行它不会构建单元测试项目,因为web项目不引用测试项目.测试项目将引用Web项目,但我很确定这将是我们的自动构建,因为它们主要用于构建和打包我们的部署.运行这些测试应该是自动构建和打包过程中的一个步骤.

选项......

  1. 创建两个Jenkins作业.一个运行测试...如果测试通过另一个构建被触发,它构建和打包Web项目.将post build事件放在测试项目上.
  2. 构建解决方案而不是项目(确保解决方案包含所需的测试)并将post构建事件放在任何将运行nunit控制台以运行测试的测试项目上.然后使用命令行将每个bin和content目录中的所有必需文件复制到一个包中.
  3. 只需在jenkins中构建测试项目,而不是在jenkins中构建Web项目.测试项目将引用Web项目(取决于您正在测试的内容)并构建它.

问题 ...

  1. 有两个工作,而不是一个.调试两件事而不是一件.一个是看测试是否通过,一个是构建和编译Web项目.测试可以通过,但如果你正在测试的东西没有使用它,那么构建可能会失败...
  2. 这要求我们确切地知道构建的内容.现在,msbuild为我们做了一切.如果每次创建额外的文件夹时有多个团队正在处理项目,则必须担心可能脆弱的命令行语句.
  3. 这似乎是我们主要目的的腐败.测试应该是这个过程中的一个步骤,而不是这个过程中最重要的事情.我也不是100%确定触发的构建与普通构建相同,它是否与普通构建完全相同.以相同的方式移动所有正确的文件将它们全部移动到相同的目录等.

最初的问题.

我们希望在构建主项目时运行测试.但是,对于针对测试项目运行的Web项目添加后期构建事件不起作用,因为Web项目不引用测试项目并且不会触发此项目的构建.我可以继续...但这就够了......

我们花了大约一个星期试图使这项工作很好但没有成功.如果您觉得可以获得更好的回复,请随意编辑此内容...

hyd*_*yde 9

在詹金斯/哈德森,有很多工作是很好的.一些用于执行编译触发的版本控制更改,一些用于由成功构建触发的运行(单元)测试,一些用于执行更多测试(整合)由成功的早期测试划分,一些用于部署,通过成功传递所有测试触发.

看看像连接,构建管道,参数化触发器等插件,以帮助解决这个问题.

通过使用多个节点,这也可以使事情并行发生.试图把一切都塞进一个工作中是不可取的.