Tengo una configuración en jenkins que funciona bien desde el desarrollo hasta la producción.
En primer lugar aquí es la configuración en el dependencies.yml para el repositorio módulo personalizado
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 este desarrolladores y la búsqueda Jenkins en primer lugar en el mismo repositorio para ver si un módulo está presente y si no, tiene que el repositorio de nexus para descargar el artefacto.
para construir mi módulo en Jenkins utilizo un script sh encargo como éste
#!/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 este script usted es capaz de empujar a su módulo de nexo en cada Jenkins construir. Esto no es realmente lo que hago. Yo uso el módulo de lanzamiento de jenkins para impulsarlo solo cuando construyo una versión. Para una liberación Tengo un script especial
#!/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"
Este script poner una etiqueta en nuestro repositorio SVN, empuje el módulo de Nexus y actualizar dependencies.yml archivo.
Con esto jenkins puede construir una aplicación que depende de una versión local del módulo mientras no se lance y luego puede construir la aplicación descargando el módulo artifcat del repositorio nexus. Es lo mismo para los desarrolladores
creo que esta técnica se va a hacer una diferencia en mi programa de instalación; Simplemente no he tenido tiempo de probarlo, y es por eso que aún no lo he aceptado. Pregunta de seguimiento: la configuración de repo localModules no parece que coincida con una configuración típica de Jenkins, donde los espacios de trabajo de construcción no están en directorios adyacentes. Estoy un poco confundido acerca de cómo las compilaciones de Jenkins recuperan dependencias para versiones dev (en lugar de versiones). – Ladlestein
En jenkins, tengo solo un espacio de trabajo y todos mis directorios de módulos son adyacentes, ya que está en desarrollo. Si no, tienes que publicar tu artefacto en el nexo cada vez que construyes un módulo, con algún tipo de versión de instantáneas que será más tedioso de configurar y usar –