我应该如何为 deb 包设置我的 CI (jenkins)?

Ska*_*rab 5 package-managers deb jenkins

我有 Jenkins 和 Artifactory for Java 的 CI 设置。我还想构建和部署 deb 包。为了构建 deb 包,我可能会使用 Maven 插件(从 Gradle 调用),例如http://mojo.codehaus.org/deb-maven-plugin/

我现在正在调查 Debian 存储库的实现。我想部署一个私有的 Debian 存储库来托管我的包 ( http://wiki.debian.org/HowToSetupADebianRepository )。

Jenkins 中是否有任何插件可以更轻松地部署 deb 包?我应该使用哪个 debian 存储库实现?

小智 3

我不知道 Jenkins 的 Debian 软件包插件,并且我没有找到适合我的需求的 maven-deb-plugin (请参阅您链接到的页面上的“什么不起作用”)。当我在 Jenkins 中有一个 Maven 构建作业时,我添加了一个后步骤 shell 脚本,该脚本会增加 debian/changelog 中的版本并运行 dpkg-buildpackage -b -nc。

-nc 抑制构建前的清理,这是必要的,因为否则我的 debian/rules 文件将尝试运行 Maven 目标来构建 jar,而 Jenkins 已经这样做了。我的 debian/rules 的片段:

pre-built-stamp
        mvn package
        touch pre-built-stamp

override_dh_auto_build: pre-built-stamp
Run Code Online (Sandbox Code Playgroud)

因此,在 Jenkins 中的 Maven 步骤之后,它会运行以下命令

touch pre-built-stamp
dpkg-buildpackage -b -nc
Run Code Online (Sandbox Code Playgroud)

这部分是个人喜好,但我没有让 Jenkins 将构建的 deb 直接推送到我的存储库。相反,它将 .deb 和 .changes 文件保存为构建工件,以便我可以使用升级构建插件来签署 .changes 文件并将其复制到存储库 (rsync)。这让我的开发人员可以在批准将其推送到我们的临时存储库之前下载并测试 deb。然后可以使用第二次升级将包推送到实时存储库。

我选择 reprepro 作为我们的存储库管理器。它的一个主要缺点是它无法同时处理发行版中的多个版本的包,这使得回滚更加痛苦。除此之外,我发现它可靠且可用,现在使用它来完全镜像主 Debian 存储库,并使用它来托管我的私人存储库。

Reprepro 使用 inoticoming 来发现新传入的包并验证更改文件上的签名,确保只有 Jenkins 可以添加新包。

我发现缺少一些 reprepro 在线文档,但我建议安装它并阅读 reprepro 和 inoticoming 手册页。