Ho una configurazione in jenkins che funziona bene da dev in produzione.
Prima qui è la configurazione nel dependencies.yml per il repository modulo personalizzato
repositories:
- modules:
type: chain
using:
- localModules:
type: local
descriptor: "${application.path}/../[module]/conf/dependencies.yml"
artifact: "${application.path}/../[module]"
- repoModules:
type: http
artifact: "http://mynexus/nexus/content/repositories/releases/com/myorg/[module]/[revision]/[module]-[revision].zip"
contains:
- com.myorg -> *
Con questo gli sviluppatori e la ricerca Jenkins in primo luogo nello stesso repository per vedere se un modulo è presente e se non, avuto modo di il repository nexus per scaricare l'artefatto.
per costruire il mio modulo Jenkins Io uso uno script sh personalizzato come questo
#!/bin/bash
APPLICATION="myModule"
PLAY_PATH="/usr/local/play"
set –xe
$PLAY_PATH/play deps --sync
$PLAY_PATH/play build-module --require 1.2.3
VERSION=`grep self conf/dependencies.yml | sed "s/.*$APPLICATION //"`
echo "Sending $APPLICATION-$VERSION.zip to nexus repository"
curl --request POST --user user:passwd http://mynexus/nexus/content/repositories/releases/com/myorg/$APPLICATION/$VERSION/$APPLICATION-$VERSION.zip -F "[email protected]/$APPLICATION-$VERSION.zip" --verbose
Con questo script si è in grado di spingere il modulo per Nexus su ogni Jenkins costruire. Questo non è esattamente quello che faccio. Io uso il modulo di rilascio di jenkins per spingerlo solo quando creo un rilascio. Per un rilascio Ho uno script speciale
#!/bin/bash
APPLICATION="myModule"
PLAY_PATH="/usr/local/play"
set –xe
if [ -z "$RELEASE_VERSION" ]
then
echo "Parameter RELEASE_VERSION is mandatory"
exit 1
fi
if [ -z "$DEVELOPMENT_VERSION" ]
then
echo "Parameter DEVELOPMENT_VERSION is mandatory"
exit 1
fi
echo "Release version : $RELEASE_VERSION"
echo "Development version : $DEVELOPMENT_VERSION"
VERSION=`grep self conf/dependencies.yml | sed "s/.*$APPLICATION //"`
if [ "$RELEASE_VERSION" != "$VERSION" ]
then
echo "Release version $RELEASE_VERSION and play version $VERSION in dependencies.yml does not match : release failed"
exit 1
fi
REVISION=`svnversion .`
echo "Tag svn repository in revision $REVISION with version $VERSION"
svn copy -m "Version $VERSION" -r $REVISION http://mysvn/myRepo/$APPLICATION/trunk/ http://mysvn/myRepo/$APPLICATION/tags/$VERSION
echo "svn tag applied"
echo "Sending $APPLICATION-$VERSION.zip to nexus repository"
curl --request POST --user user:passwd http://mynexus/nexus/content/repositories/releases/com/myorg/$APPLICATION/$VERSION/$APPLICATION-$VERSION.zip -F "[email protected]/$APPLICATION-$VERSION.zip" --verbose
echo "$APPLICATION-$VERSION.zip sent to nexus repository"
echo "Update module to version $DEVELOPMENT_VERSION"
sed -i "s/self\(.*\)$VERSION/self\1$DEVELOPMENT_VERSION/g" conf/dependencies.yml
svn commit -m "Version $DEVELOPMENT_VERSION" conf/dependencies.yml
svn update
echo "Version $DEVELOPMENT_VERSION créée"
Questo script messo un tag nel nostro repository svn, spingere il modulo a Nexus e aggiornare dependencies.yml file.
Con questo jenkins è possibile creare un'app che dipende da una versione locale del modulo mentre non è rilasciata e successivamente è possibile creare l'app scaricando il modulo artifcat dal repository nexus. È la stessa cosa per gli sviluppatori
fonte
2011-11-30 11:08:27
penso che questa tecnica sta andando a fare la differenza nel mio setup; Non ho ancora avuto il tempo di provarlo, ed è per questo che non l'ho ancora accettato. Domanda di follow-up: la configurazione del repository di localModules non sembra corrispondere a una tipica configurazione di Jenkins, in cui le aree di lavoro di generazione non sono nelle directory adiacenti. Sono un po 'confuso da dove le tue build di Jenkins recuperano le dipendenze per le versioni dev (in opposizione al rilascio). – Ladlestein
In jenkins ho solo uno spazio di lavoro e tutte le directory dei miei moduli sono adiacenti così come lo sono in dev. In caso contrario, devi pubblicare il tuo artefatto in nexus ogni volta che crei un modulo, con una sorta di versione di istantanee che sarà più noiosa da configurare e utilizzare –