5

我有一个带有 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 存储库实现?

4

4 回答 4

4

只需将我的 2 美分加到这篇文章中。

在内部,我们使用 Freight ( https://github.com/rcrowley/freight#readme ) 作为我们的 Debian/Ubuntu 存储库。

我们中的很多人倾向于使用Jordan Sissel 的fpm( https://github.com/jordansissel/fpm#readme )来创建供内部使用的 deb。这可以像我在这里一样在您的源存储库中轻松编写脚本: https ://github.com/stuart-warren/logit/blob/master/make-deb

#!/bin/bash

# SET SOME VARS
installdir='/usr/lib/logit'
NAME='logit-java'
VERSION='0.5.8'
ITERATION='1'
WEBSITE='https://github.com/stuart-warren/logit'
REPO='http://nexus.stuartwarren.com/nexus'

# REMOVE PREVIOUS BUILD IF PRESENT
echo "Delete ${installdir}"
rm -rf .${installdir}

# CREATE FOLDER STRUCTURE
echo "create base dir ${installdir}"
mkdir -p .${installdir}

# PUT FILES IN THE CORRECT LOCATIONS
wget ${REPO}/content/repositories/releases/com/stuartwarren/logit/${VERSION}/logit-${VERSION}-tomcatvalve.jar -O .${installdir}/logit-${VERSION}-tomcatvalve.jar
wget ${REPO}/content/repositories/releases/com/stuartwarren/logit/${VERSION}/logit-${VERSION}-jar-with-dependencies.jar -O .${installdir}/logit-${VERSION}-jar-with-dependencies.jar
wget https://raw.github.com/stuart-warren/logit/master/LICENSE -O .${installdir}/LICENCE
wget https://raw.github.com/stuart-warren/logit/master/README.md -O .${installdir}/README.md
pushd .${installdir}
ln -sf logit-${VERSION}-tomcatvalve.jar logit-tomcatvalve.jar
ln -sf logit-${VERSION}-jar-with-dependencies.jar logit-jar-with-dependencies.jar
popd

# REMOVE OLD PACKAGES
echo "Delete old packages"
rm ${NAME}_*_all.deb

# CREATE THE DEB
echo "Build new package"
fpm \
        -n $NAME \
        -v $VERSION \
        --iteration ${ITERATION} \
        -a all \
        -m "Stuart Warren <stuart@stuartwarren.com>" \
        --description "Library to extend Log4J 1.2 (plus now Logback 1.0, 
Java.util.logging and Tomcat AccessLog Valve) by providing 
json layouts (for logstash/greylog) and a zeromq appender" \
        --url $WEBSITE \
        --license 'Apache License, Version 2.0' \
        --vendor 'stuartwarren.com' \
        -t deb \
        -s dir \
        ${installdir:1}

echo "Delete ${installdir}"
rm -rf .${installdir}
echo "Done!"

显然,您可以直接复制任何已编译的文件,而不是从服务器下载,在我的例子中是 maven repo。然后,您可以将 deb SCP 到存储库服务器上的某个“传入”目录。

于 2013-12-10T12:32:40.883 回答
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

因此,在詹金斯的 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 手册页。

于 2012-09-18T12:45:22.110 回答
3

用于 Jenkins 的 Debian 包生成器插件

于 2013-04-05T13:11:51.097 回答
0

是的,有一个插件可以帮助将 Debian 软件包部署到软件包存储库中。Debian Package Builder Plugin有两个功能:构建步骤(您似乎不需要)和构建后发布步骤。您的目标存储库是在系统配置中配置的。只需在作业配置中选择其中之一。该插件在“幕后”使用dupload(1)

作为 Debian 软件包的存储库管理器,我推荐Aptly。它功能强大、易于使用、文档齐全且开发积极。

于 2014-11-27T14:06:56.107 回答