Как мне настроить мой CI (jenkins) для пакетов deb?

У меня есть настройка CI с Jenkins и Artifactory для Java. Я также хотел бы создавать и развертывать пакеты deb. Для создания пакетов deb я мог бы использовать плагин Maven (вызываемый из Gradle), например, http://mojo.codehaus.org/deb-maven-plugin/.

Сейчас я изучаю реализации репозитория Debian. Я хотел бы развернуть частный репозиторий Debian для размещения своих пакетов (http://wiki.debian.org/HowToSetupADebianRepository).

Есть ли в Jenkins какой-либо плагин, который упростил бы развертывание пакетов deb? Какую реализацию репозитория Debian мне следует использовать?


person Skarab    schedule 07.09.2012    source источник
comment
Также есть (и удачи в поиске документов для этого) org.mortbay.jetty.toolchain:unix-maven-plugin, который можно использовать для создания .deb файлов. Вот пример: github.com/stephenc/jetties/blob /master/jetty-deb/pom.xml   -  person Stephen Connolly    schedule 19.09.2012
comment
Возможно, вы захотите взглянуть на jenkins.debian.net   -  person Anders    schedule 19.02.2015


Ответы (4)


Просто добавляю свои 2 цента в этот пост.

Для внутреннего использования мы используем Freight (https://github.com/rcrowley/freight#readme) в качестве нашего Репозиторий Debian / Ubuntu.

Многие из нас склонны использовать fpm (https://github.com/jordansissel/fpm#readme) Джордан Сиссел за создание дебетов для внутреннего использования. Это можно легко создать в исходном репозитории, как это делаю я здесь: 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 <[email protected]>" \
        --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. Затем вы можете перенести дебет в какой-нибудь «входящий» каталог на сервере репозитория.

person stuart-warren    schedule 10.12.2013

Мне неизвестен плагин пакета Debian для Jenkins, и я не нашел maven-deb-plugin подходящим для моих нужд (см. «Что не работает» на странице, на которую вы ссылаетесь). Там, где у меня есть задание сборки maven в Jenkins, я добавляю сценарий оболочки post step, который увеличивает версию в debian / changelog и запускает dpkg-buildpackage -b -nc.

-nc подавляет очистку перед сборкой, что необходимо, потому что в противном случае мой файл debian / rules будет пытаться запустить цели maven для сборки jar-файлов, что уже сделал Дженкинс. Фрагмент из моего debian / rules:

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

override_dh_auto_build: pre-built-stamp

Итак, после шагов maven в Jenkins он запускает следующие

touch pre-built-stamp
dpkg-buildpackage -b -nc

Эта часть является личным предпочтением, но у меня нет возможности, чтобы Дженкинс отправлял собранные файлы прямо в мой репозиторий. Вместо этого он сохраняет файлы .deb и .changes как артефакты сборки, поэтому я могу использовать Плагин Promoted Builds, чтобы подписать файл .changes и скопировать его в репозиторий (rsync). Это позволяет моим разработчикам загрузить и протестировать дебют, прежде чем утвердить его для отправки в наш промежуточный репозиторий. Затем можно использовать второе продвижение, чтобы отправить пакет в активный репозиторий.

Я выбрал репозиторий в качестве менеджера репозитория. Его один из основных недостатков заключается в том, что он не может одновременно обрабатывать более одной версии пакета в дистрибутиве, что делает откат более болезненным. Помимо этого, он оказался надежным и удобным, и теперь использую его для полного зеркалирования основных репозиториев Debian, а также для размещения моих частных репозиториев.

Reprepro использует inoticoming для обнаружения новых входящих пакетов и проверяет подпись в файле изменений, гарантируя, что только Jenkins может добавлять новые пакеты.

Я обнаружил, что в сети не хватает некоторой документации по реппро, но я рекомендую установить ее и прочитать страницы руководства по реппро и инотикации.

person nickrw    schedule 18.09.2012

Плагин Debian Package Builder для Jenkins

person kenCornetto    schedule 05.04.2013

Да, есть плагин, который помогает развертывать пакеты Debian в репозитории пакетов. Debian Package Builder Plugin имеет две функции: сборку шаг (который, похоже, вам не нужен) и шаг публикации после сборки. Ваши целевые репозитории настраиваются в конфигурации системы. Просто выберите один из них в конфигурации задания. Плагин использует dupload (1) «под капотом».

В качестве менеджера репозитория пакетов Debian я рекомендую Aptly. Это мощный, простой в использовании, хорошо документированный и активно развивающийся.

person Uwe Stuehler    schedule 27.11.2014