5

Java用のJenkinsとArtifactoryを使用した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リポジトリです。次に、リポジトリサーバーの「着信」ディレクトリまでdebをSCPできます。

于 2013-12-10T12:32:40.883 に答える
3

Jenkins 用 Debian パッケージ ビルダー プラグイン

于 2013-04-05T13:11:51.097 に答える
3

Jenkins 用の Debian パッケージ プラグインを認識していません。また、自分のニーズに適した maven-deb-plugin が見つかりませんでした (リンク先のページの「何が機能しないか」を参照してください)。Jenkins に Maven ビルド ジョブがある場合、debian/changelog でバージョンをインクリメントし、dpkg-buildpackage -b -nc を実行するポスト ステップ シェル スクリプトを追加します。

-nc は、ビルド前のクリーンを抑制します。これは、そうしないと、Jenkins が既に行っているように、debian/rules ファイルが maven ターゲットを実行して jar をビルドしようとするためです。私の 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 ファイルをビルド アーティファクトとして保存するので、Promoted Builds Pluginを使用して .changes ファイルに署名し、リポジトリ (rsync) にコピーできます。これにより、開発者は、ステージング リポジトリへのプッシュを承認する前に、deb をダウンロードしてテストできます。次に、2 番目のプロモーションを使用して、パッケージをライブ リポジトリにプッシュできます。

リポジトリマネージャーとして reprepro を選びました。その主な欠点の 1 つは、ディストリビューション内のパッケージの複数のバージョンを一度に処理できないため、ロールバックがより困難になることです。これ以外にも、信頼性が高く使いやすいことがわかり、現在はメインの Debian リポジトリを完全にミラーリングし、プライベート リポジトリをホストするために使用しています。

Reprepro は inoticoming を使用して新しい受信パッケージを検出し、変更ファイルの署名を検証して、Jenkins だけが新しいパッケージを追加できるようにします。

reprepro のドキュメントがオンラインで不足しているものもありますが、インストールして reprepro と inoticoming の man ページを読むことをお勧めします。

于 2012-09-18T12:45:22.110 に答える