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

我应该如何为deb软件包设置CI(jenkins)?,jenkins,package-managers,deb,Jenkins,Package Managers,Deb,我有一个与Jenkins和ArtifactoryforJava的CI设置。我还想构建和部署deb包。为了构建deb包,我可能会使用一个Maven插件(从Gradle调用),例如 我现在正在研究Debian存储库的实现。我想部署一个私有Debian存储库来承载我的包() Jenkins中是否有任何插件可以使部署deb包更容易?我应该使用哪个debian存储库实现?我不知道Jenkins的debian软件包插件,我也没有发现maven deb插件适合我的需要(请参阅链接页面上的“什么不起作用”)。在

我有一个与Jenkins和ArtifactoryforJava的CI设置。我还想构建和部署deb包。为了构建deb包,我可能会使用一个Maven插件(从Gradle调用),例如

我现在正在研究Debian存储库的实现。我想部署一个私有Debian存储库来承载我的包()


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

我不知道Jenkins的debian软件包插件,我也没有发现maven deb插件适合我的需要(请参阅链接页面上的“什么不起作用”)。在Jenkins中有一个maven构建作业的地方,我添加了一个步骤后shell脚本,该脚本在debian/changelog中增加版本,并运行dpkg buildpackage-b-nc

-nc禁止在构建之前进行清理,这是必要的,因为我的debian/rules文件将尝试运行maven目标来构建JAR,Jenkins已经这样做了。来自my debian/rules的代码片段:

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

override_dh_auto_build: pre-built-stamp
因此,在Jenkins中的maven步骤之后,它运行以下命令

touch pre-built-stamp
dpkg-buildpackage -b -nc
这部分是个人偏好,但我没有让Jenkins直接将构建的DEB推送到我的存储库。相反,它将.deb和.changes文件保存为构建工件,以便我可以使用对.changes文件进行签名并将其复制到存储库(rsync)。这让我的开发人员可以在批准将deb推送到我们的暂存存储库之前下载并测试它。然后,可以使用第二次升级将包推送到实时存储库

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

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


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

Debian Package Builder插件for Jenkins

只需在这篇文章中添加我的2美分即可

在内部,我们使用货运()作为我们的Debian/Ubuntu存储库

我们中的许多人倾向于使用Jordan Sissel的fpm()来创建供内部使用的DEB。 这可以很容易地在源存储库中编写脚本,就像我在这里所做的那样:

#/bin/bash
#设置一些变量
installdir='/usr/lib/logit'
NAME='logit-java'
版本='0.5.8'
迭代='1'
网站https://github.com/stuart-warren/logit'
回购协议http://nexus.stuartwarren.com/nexus'
#删除以前的版本(如果存在)
回显“删除${installdir}”
rm-rf.${installdir}
#创建文件夹结构
echo“创建基本目录${installdir}”
mkdir-p.${installdir}
#将文件放在正确的位置
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
wgethttps://raw.github.com/stuart-warren/logit/master/LICENSE -O.${installdir}/许可证
wgethttps://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
邻苯二胺
#删除旧包
echo“删除旧包”
rm${NAME}\u*\ u all.deb
#创建DEB
echo“构建新包”
fpm\
-n$NAME\
-v$版本\
--迭代${iteration}\
-a全部\
-我是“斯图尔特·沃伦”\
--说明“扩展Log4J 1.2的库(加上现在的Logback 1.0,
通过提供
json布局(用于logstash/greylog)和zeromq appender“\
--url$网站\
--许可证“Apache许可证,版本2.0”\
--供应商“stuartwarren.com”\
-蒂代布\
-s方向\
${installdir:1}
回显“删除${installdir}”
rm-rf.${installdir}
回声“完成!”
显然,您可以直接复制任何编译过的文件,而不是从服务器下载,在我的例子中是maven repo。
然后,您可以将deb压缩到存储库服务器上的某个“传入”目录。

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


作为Debian软件包的存储库管理器,我推荐。它功能强大、易于使用、文档丰富且开发活跃。

还有
org.mortbay.jetty.toolschain:unix maven plugin
,可用于创建
.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!"