continuous-integration - 以自动化方式在 Jenkins/Hudson 中运行单元测试,从开发到构建服务器

标签 continuous-integration jenkins hudson automated-tests

我们目前正在运行 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

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

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

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

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

  • 初始问题。

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

    我们花了大约一周的时间试图使这项工作顺利进行,但没有成功。如果您觉得可以得到更好的回复,请随时编辑此内容...

    最佳答案

    在 Jenkins / hudson ,有很多工作是可以的。一些用于执行编译触发的版本控制更改,一些用于运行由成功构建触发的(单元)测试,一些用于执行由成功的早期测试触发的更多测试(集成),一些用于部署,由成功通过所有测试触发。

    查看连接、构建管道、参数化触发器等插件以帮助解决此问题。

    通过使用多个节点,这也将允许事情并行发生。试图在一份工作中塞满所有东西并不是要走的路。

    关于continuous-integration - 以自动化方式在 Jenkins/Hudson 中运行单元测试,从开发到构建服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056067/

    相关文章:

    git - 强制执行代码审查并保持集成分支原始状态的工作流(git、Stash、TeamCity)

    ios - : clang: error: no such file or directory: 的 Travis-CI 错误

    ios - Jenkins |椰子类 | swift |错误 : no such module 'RealmSwift'

    java - Hudson -CI 屏幕保护程序设置

    java - Hudson 只执行一项非并行工作

    javascript - 为什么要在服务器上构建 MEAN 应用程序?

    tomcat - Jenkins 与本地 Tomcat 实例交互

    authentication - 如何在配置为使用 LDAP 作为用户数据库的 Jenkins 上添加外部用户?

    java - 错误 - trustAnchors 参数必须非空

    docker - CI脚本作业之前如何在推送时重建Docker镜像