# JJB macros specific to Integration/Distribution ODL project
---
- builder:
name: distribution-deploy-verify
# Operation: Deploy ODL with all fetures and check it is not broken.
# Required bash variables:
# KARAF_VERSION: 'karaf4' or 'karaf3'.
# Use distribution-karaf-version macro to customize.
builders:
- integration-detect-variables
- shell: !include-raw: distribution-deploy-verify.sh
- builder:
name: distribution-deploy-offline
# Operation: Deploys ODL on the current system, with no external repo configuration, check it works.
# Required bash variables:
# KARAF_VERSION: 'karaf4' or 'karaf3'.
# Use distribution-karaf-version macro to customize.
builders:
- integration-detect-variables
- shell: !include-raw: distribution-deploy-offline.sh
- builder:
name: distribution-check-wipe
# Step zero: Wipe file repositories up front.
builders:
- shell: |
echo "wipe r: the local Maven repository"
rm -rfv /tmp/r
echo "wipe n: the fake remote (Nexus) repository"
rm -rfv /tmp/n
echo "wipe t: the transient repository used in some manipulations"
rm -rfv /tmp/t
echo "create n: multithreaded execution might fail at creating it."
mkdir /tmp/n
- builder:
name: distribution-check-build-project
# Step one: Online build of the project, using local repository /tmp/r/ and deploying artifacts to /tmp/n/.
# Ordinary SingleFeatureTest failures are detected in the verify job, so we can use "q" profile here.
# Arguments:
# pom: Relative path to pom file to use. Typically '$GERRIT_PROJECT/pom.xml'.
builders:
- maven-target:
maven-version: 'mvn33'
pom: '{pom}'
goals: |
clean deploy
dependency:tree -DoutputFile=dependency_tree.txt
-Pq
-DaltDeploymentRepository=fake-nexus::default::file:///tmp/n/
{mvn-opts}
java-opts:
- '-Xmx4096m -XX:MaxPermSize=1024m -Dmaven.compile.fork=true'
settings: 'integration-settings'
settings-type: cfp
global-settings: 'global-settings'
global-settings-type: cfp
- builder:
name: distribution-check-verify-groupid
# Step two: Verify all deployed artifacts belong to the project's groupId.
# This is done by moving the allowed directories out of /tmp/n and checking no files remained there.
# The correct directory is derived from $GERRIT_PROJECT.
# TODO: Verify all deployed artifacts are snapshots.
# Arguments:
# gerrit-project: Project name as nexus URI part. Typically '$GERRIT_PROJECT'.
builders:
- shell: |
mkdir -p /tmp/t/org/opendaylight/{gerrit-project}
mv /tmp/n/org/opendaylight/{gerrit-project}/* /tmp/t/org/opendaylight/{gerrit-project}/
test -z "`find /tmp/n/ -type f`" || ( echo "ERROR: Mismatched groupId detected (see above)." && false )
rm -rf /tmp/n
mv /tmp/t /tmp/n
- builder:
name: distribution-check-download-deps
# Step three: Online build of integration distribution.
# This step is mainly used for downloading other project artifacts.
# Running SingleFeaturesTest here does not seem to be required, so -Pq is used again.
# Arguments:
# dist-pom: Relative path to pom file to use. 'distribution/pom.xml' is recommended.
builders:
- maven-target:
maven-version: 'mvn33'
pom: '{dist-pom}'
goals: |
clean install
dependency:tree -DoutputFile=dependency_tree.txt
-Pq
{mvn-opts}
java-opts:
- '-Xmx1024m -XX:MaxPermSize=256m -Dmaven.compile.fork=true'
settings: 'integration-settings'
settings-type: cfp
global-settings: 'global-settings'
global-settings-type: cfp
- builder:
name: distribution-check-delete-snapshots
# Step four: Delete snapshot artifacts from the local repository.
# This is critical to detect orphaned artifacts or missing project-internal dependency declarations.
# Also other files related to maven repository resolution are removed,
# and then empty directories are removed, in order to simplify debugging.
builders:
- shell: !include-raw-escape: distribution-delete-snaphot-artifacts.sh
- builder:
name: distribution-check-configure-remotes
# Now the ugly part. It seems that the only way to tell Maven 2+
# which remote repositories to use is via settings.xml file.
# So we create such a file here, but it needs most of odlparent:settings.xml
builders:
- shell: |
echo '
opendaylight-release
opendaylight-mirror
opendaylight
https://nexus.opendaylight.org/content/repositories/public/
never
false
opendaylight-plugin-mirror
opendaylight-plugin
https://nexus.opendaylight.org/content/repositories/public/
never
false
file-snapshots
file-snapshots
file
file:///tmp/n/
false
file-plugin-snapshots
file-plugin
file:///tmp/n/
false
file-snapshots
opendaylight-release
' > fake_remotes.xml
# Notes: The settings are minimal in order to detect breakage scenarios,
# while allowing for the following quirks:
# * Some plugins seem to have hardcoded repos, for example check-license looks at repository.apache.org
# * Some plugin artifacts (related to surefire) are not downloaded when tests are skipped.
# * populate-local-repo looks at oss.sonatype.org and does not store things (like guava) to /tmp/r
- builder:
name: distribution-check-repeat-project-build
# Step five: Repeat the project build but with the new settings.
# Here, only the project snapshot artifacts deployed to /tmp/n are available,
# which faithfully reproduces conditions in later verify-like job runs.
# We cannot use --offline, because: "Cannot access file (file:///tmp/n) in offline mode".
# SingleFeatureTest is still skipped, as we expect the same results as in the verify job.
# Current content of /tmp/r is restored afterwards to not affect the next step.
# TODO: Could there be missing dependencies which would only affect SFT here?
# Arguments:
# pom: Relative path to pom file to use. Typically '$GERRIT_PROJECT/pom.xml'.
builders:
- shell: |
cp -r /tmp/r /tmp/t
- maven-target:
maven-version: 'mvn33'
pom: '{pom}'
goals: |
clean install
dependency:tree -DoutputFile=dependency_tree.txt
-s fake_remotes.xml
-Pq
{mvn-opts}
java-opts:
- '-Xmx4096m -XX:MaxPermSize=1024m -Dmaven.compile.fork=true'
- shell: |
rm -rf /tmp/r
mv /tmp/t /tmp/r
- builder:
name: distribution-check-repeat-distro-build
# Step six: Repeat the distribution build but with the new settings.
# Here, only the project snapshot artifacts deployed to /tmp/n are available,
# which faithfully reproduces conditions in later verify-like job runs.
# We cannot use --offline, because: "Cannot access file (file:///tmp/n) in offline mode".
# This is where SingleFeatureTest is not skipped.
# TODO: Lower -Dsft.heap.max to 3g or lower when Bug 9218 is fixed.
# Arguments:
# dist-pom: Relative path to pom file to use. 'distribution/pom.xml' is recommended.
builders:
- maven-target:
maven-version: 'mvn33'
pom: '{dist-pom}'
goals: |
clean install
dependency:tree -DoutputFile=dependency_tree.txt
-s fake_remotes.xml
-Pq
-Dsft.heap.max=4g
-DskipTests=false
{mvn-opts}
java-opts:
- '-Xmx1024m -XX:MaxPermSize=256m -Dmaven.compile.fork=true'
- builder:
name: distribution-check-warn-9191
# Detect ODL bundles referenced cross-project from features, store them to a file to be archived.
# Do not fail the build, this is just to inform interested contributors.
# TODO: Improve integration archiving macro so that it finds bug9191.log without us crating it in $WORKSPACE/.
builders:
- shell: |
# No failure in this macro should affect the job result.
set +e
rm -f "$WORKSPACE/bug9191.log"
pushd "$WORKSPACE/distribution/$KARAF_ARTIFACT/target/assembly/system/org/opendaylight"
for folder in `ls`; do
find "$folder" -name \*features.xml | xargs fgrep -n '' > bug9191.0.log
fgrep org.opendaylight bug9191.0.log | fgrep -v "org.opendaylight.$folder" >> "$WORKSPACE/bug9191.log"
rm bug9191.0.log
done
popd
- builder:
name: distribution-check-bootup
# Operation: Locally deploy ODL with all fetures, check it is not broken.
# Required bash variables:
# KARAF_VERSION: 'karaf4' or 'karaf3'.
# Use distribution-karaf-version macro to customize.
builders:
- shell: !include-raw: distribution-check-bootup.sh