我不知道 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
因此,在詹金斯的 Maven 步骤之后,它运行以下
touch pre-built-stamp
dpkg-buildpackage -b -nc
这部分是个人喜好,但我没有让 Jenkins 将构建的 deb 直接推送到我的存储库。相反,它将 .deb 和 .changes 文件保存为构建工件,因此我可以使用Promoted Builds Plugin对.changes 文件进行签名并将其复制到存储库(rsync)。这让我的开发人员在批准将它推送到我们的暂存存储库之前下载并测试 deb。然后可以使用第二次促销将包推送到实时存储库。
我选择 reprepro 作为我们的存储库管理器。它的一个主要缺点是它不能同时处理一个发行版中的多个版本的包,这使得回滚更加痛苦。除此之外,发现它可靠且可用,现在使用它来完全镜像主要的 Debian 存储库以及使用它来托管我的私人存储库。
Reprepro 使用 inoticoming 来发现新的传入包并验证更改文件上的签名,确保只有 Jenkins 可以添加新包。
我发现在线缺少一些 reprepro 文档,但我建议安装它并阅读 reprepro 和 inoticoming 手册页。