持续集成服务能否在本地构建 Linux 包?

Can Continuous Integration Services build Linux packages natively?

CI TravisCI 等服务自动从源代码管理构建和测试应用程序。我是 C++ 和 linux 的新手,但似乎将已编译的 linux 应用程序包装到各种 linux 发行版的 .deb 和 .rpm 包中也是一个非常普遍的构建需求管道。我在谷歌上搜索了几个小时,但在 Travis 或其他地方找不到任何文档或对简化机制的参考,这使得这很容易。也许 C++ 开发人员习惯于自己做这种事情,所以他们只是在构建中编写脚本。

但是,当尝试为具有多个包的新团队和项目设置管道时,每个包都针对 5 个以上的发行版并想要测试生成的包,它是 CI 管道的完美候选者。我们想在 Bintray 上部署包,我们有几个 RPM 和 DEB 存储库准备接收各种发行版的包。但是,我们找不到任何广泛使用的解决方案的踪迹,该解决方案采用已编译的工件和包定义,然后将它们汇总并将它们部署到这些存储库中。

有没有人有易于使用的自动化解决方案来构建 linux 包,因为它们是在部署到存储库之前在 Travis 中构建的?

它可能不容易找到,因为一旦您设置了 RPM 规格文件,它就变得微不足道了,这是 95% 的问题出现的地方。 ;)

我让 Jenkins 为每个目标 OS(CentOS 6、7、Fedora 25)启动 Docker 容器并构建 RPM。它与任何其他 "shell script" 构建步骤没有什么不同,除了调用 make,它调用 rpmbuild.

您可以为此使用 CPack - 它允许您编写一般包描述并根据描述构建 rpm、deb 和 msi。