现状: 我们有一个用C ++编写的应用程序,用cmake构建,用googletest进行单元测试。
我们有两种环境:
我们在本地机器上测试,当我们发布时,我们在生产机器上签出代码,构建并运行。
现在公司正在使用自动构建工具(例如Jenkins)推广CI。 虽然我们可以自动化构建过程,但有些人建议不要直接在生产机器上构建。
但是我认为,与Java程序不同,只要存在JRE,C ++应用程序就会依赖于机器。
Docker可能是大多数情况下的银弹,但不幸的是我们的应用程序无法放入docker中,因为它需要在真实机器集群上运行。
行业中是否存在处理此类问题的一般/常用方法?
答案 0 :(得分:0)
您可以使用与PasswordSalt
相同的服务器类别为CI系统添加Staging
(或Pre-production
或任何您想要的名称)环境,但不会干扰{{1服务器。
如果您对Production
结果感到满意,则可以在Production
上安全部署。
运行CI系统本身可能会干扰同一服务器上的测试的论点仍然适用于Staging
环境(我不确定我是否正确理解这是问题的一部分)。围绕它的唯一方法是Production
环境,仅专用于CI系统操作(运行CI基础设施,建筑等)。此Staging
环境中的服务器类仅对CI系统性能有影响。 CI系统应该能够处理不受CI操作影响的CI
或CI
等远程环境的测试验证。
答案 1 :(得分:0)
我不想猜测为什么你的应用程序真的需要硬件/服务器,但我的第一个赌注是docker,它真棒。我们做类似的事情,并与github,竹子,藏匿和码头工作非常好地集成。最好的部分是可伸缩性,并且很好地包含了依赖关系,并且可以快速识别构建破坏。
我过去看到的另一种方法是你有各种构建机器/服务器,在这些机器/服务器上安装了一个公共文件服务器,每当在git中发生推送时,都会调用一个本地服务,它选择CPU负载最低的服务器并构建该机器上的代码(尽管代码存在于公共文件服务器中)