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

C++ application automated build within different environments

本文关键字:构建 环境 应用程序 c++      更新时间:2023-10-16

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

我们有两个环境:

  • 测试:本地较弱的服务器
  • 生产:使用预构建的AMI映像的几个Amazon EC2实例

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

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

但是在我看来,不像Java程序只要有JRE就可以运行,c++应用程序是高度依赖于机器的。

Docker可能是大多数情况下的灵丹妙药,但不幸的是,我们的应用程序不能放在Docker中,因为它需要在真正的机器集群上运行。

业界有通用的方法来处理这类问题吗?

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

一旦你对Staging的结果感到满意,你就可以安全地部署在Production上。

运行CI系统本身可能会干扰同一服务器上的测试的论点仍然适用于Staging环境(我不确定我是否正确地理解了这一点)。解决这个问题的唯一方法是一个专门用于CI系统操作(运行CI基础设施、构建等)的CI环境。这个CI环境中的服务器类别只对CI系统性能有影响。CI系统应该能够处理不受CI操作影响的远程环境(如StagingProduction)上的测试验证。

我不想猜测为什么您的应用程序真正需要硬件/服务器,但我的第一个赌注是docker,它非常棒。我们做了类似的事情,并与github, bamboo, stash和docker很好地集成在一起。最好的部分是可伸缩性和依赖关系被很好地包含,并且构建中断可以快速识别。

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