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

时间:2012-09-07 19:48:09

标签: jenkins package-managers deb

我有一个使用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 个答案:

答案 0 :(得分:3)

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

-nc在构建之前禁止清理,这是必要的,因为我的debian / rules文件将尝试运行maven目标来构建jars,Jenkins已经完成了。来自我的debian /规则的片段:

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和inoticoming手册页。

答案 1 :(得分:3)

Jenkins的Debian Package Builder插件

答案 2 :(得分:3)

只需将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放到存储库服务器上的某个“传入”目录中。

答案 3 :(得分:0)

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

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