C ++应用程序在不同环境中自动构建

时间:2015-10-16 08:56:36

标签: c++ build continuous-integration build-process

现状: 我们有一个用C ++编写的应用程序,用cmake构建,用googletest进行单元测试。

我们有两种环境:

  • 测试:本地功能较弱的服务器
  • 生产:具有预建AMI图像的多个Amazon EC2实例

我们在本地机器上测试,当我们发布时,我们在生产机器上签出代码,构建并运行。

现在公司正在使用自动构建工具(例如Jenkins)推广CI。 虽然我们可以自动化构建过程,但有些人建议不要直接在生产机器上构建。

但是我认为,与Java程序不同,只要存在JRE,C ++应用程序就会依赖于机器。

Docker可能是大多数情况下的银弹,但不幸的是我们的应用程序无法放入docker中,因为它需要在真实机器集群上运行。

行业中是否存在处理此类问题的一般/常用方法?

2 个答案:

答案 0 :(得分:0)

您可以使用与PasswordSalt相同的服务器类别为CI系统添加Staging(或Pre-production或任何您想要的名称)环境,但不会干扰{{1服务器。

如果您对Production结果感到满意,则可以在Production上安全部署。

运行CI系统本身可能会干扰同一服务器上的测试的论点仍然适用于Staging环境(我不确定我是否正确理解这是问题的一部分)。围绕它的唯一方法是Production环境,仅专用于CI系统操作(运行CI基础设施,建筑等)。此Staging环境中的服务器类仅对CI系统性能有影响。 CI系统应该能够处理不受CI操作影响的CICI等远程环境的测试验证。

答案 1 :(得分:0)

我不想猜测为什么你的应用程序真的需要硬件/服务器,但我的第一个赌注是docker,它真棒。我们做类似的事情,并与github,竹子,藏匿和码头工作非常好地集成。最好的部分是可伸缩性,并且很好地包含了依赖关系,并且可以快速识别构建破坏。

我过去看到的另一种方法是你有各种构建机器/服务器,在这些机器/服务器上安装了一个公共文件服务器,每当在git中发生推送时,都会调用一个本地服务,它选择CPU负载最低的服务器并构建该机器上的代码(尽管代码存在于公共文件服务器中)