I have a setup in jenkins that works well with dev on production.
First of all, this is the configuration in the .yml dependencies for the custom module repository
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 -> *
Using these developers and jenkins, first look in the same repository to see if the module is present, and if not, get to the link store to download the artifact.
To create my module in jenkins, I use a custom sh script, like this
#!/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 "file=@dist/$APPLICATION-$VERSION.zip" --verbose
With this script, you can push your module to nexus for every jenkins build. This is actually not what I am doing. I use the jenkins release module to click it only when I create the release. For release, I have a special script
#!/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 "file=@dist/$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"
This script puts the tag in our svn repository, clicks the module on nexus, and updates the dependencies.yml file.
Using this jenkins, you can create an application that depends on the local version of the module until it is released, and then you can create the application by loading the artifcat module from the nexus repository. This is the same for developers.
Seb cesbron
source share