- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk8,openjdk7
+ autorelease: true
MVN_OPTS: -Xmx2048m -XX:MaxPermSize=256m -Dmaven.compile.fork=true
DEPENDENCIES: odlparent,yangtools,controller,mdsal
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
DEPENDENCIES: odlparent,controller,yangtools
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
DEPENDENCIES: controller,yangtools,odlparent
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
-# Cleanup Robot
+echo "Cleaning up Robot installation..."
+
# ${ROBOT_VENV} comes from the include-raw-integration-install-robotframework.sh
# script.
+# TODO: Is this still needed when we have integration-cleanup-workspace?
rm -rf ${ROBOT_VENV}
--- /dev/null
+echo "Cleaning up the workspace..."
+
+# Leftover files from previous runs could be wrongly copied as results.
+# Keep the cloned integration/test repository!
+for file_or_dir in `ls -A -1 -I "test"`
+# FIXME: Make this compatible with multipatch and other possible build&run jobs.
+do
+ rm -vrf "$file_or_dir"
+done
echo "Configuring the log..."
LOGCONF=${WORKSPACE}/${BUNDLEFOLDER}/etc/org.ops4j.pax.logging.cfg
-sed -ie 's/log4j.appender.out.maxFileSize=1MB/log4j.appender.out.maxFileSize=20MB/g' ${LOGCONF}
+sed -ie 's/log4j.appender.out.maxBackupIndex=10/log4j.appender.out.maxBackupIndex=1/g' ${LOGCONF}
+# FIXME: Make log size limit configurable from build parameter.
+sed -ie 's/log4j.appender.out.maxFileSize=1MB/log4j.appender.out.maxFileSize=100GB/g' ${LOGCONF}
cat ${LOGCONF}
echo "Configure the repos..."
echo "sleeping for 10 seconds..."
sleep 10
-echo "Install all features"
+echo "Installing all features..."
sshpass -p karaf ${WORKSPACE}/${BUNDLEFOLDER}/bin/client -u karaf "feature:install ${ACTUALFEATURES}" || echo $? > ${WORKSPACE}/error.txt
-echo "Fetching Karaf log"
-cp ${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log .
-
-echo "Kill controller"
+echo "Killing ODL and fetching Karaf log..."
+head --bytes=1M "${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log" > "karaf.log"
+# TODO: Do we want different name for karaf.log chunk to signal it may be not complete?
ps axf | grep karaf | grep -v grep | awk '{print "kill -9 " $1}' | sh
+sleep 5
+xz -9ekvv "${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log"
+mv "${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log.xz" .
echo "Exit with error"
if [ -f ${WORKSPACE}/error.txt ]; then
echo "Configuring the log..."
LOGCONF=/tmp/${BUNDLEFOLDER}/etc/org.ops4j.pax.logging.cfg
-sed -ie 's/log4j.appender.out.maxFileSize=1MB/log4j.appender.out.maxFileSize=20MB/g' \${LOGCONF}
+sed -ie 's/log4j.appender.out.maxBackupIndex=10/log4j.appender.out.maxBackupIndex=1/g' \${LOGCONF}
+# FIXME: Make log size limit configurable from build parameter.
+sed -ie 's/log4j.appender.out.maxFileSize=1MB/log4j.appender.out.maxFileSize=100GB/g' \${LOGCONF}
cat \${LOGCONF}
echo "Configure max memory..."
sed -ie 's/JAVA_MAX_MEM="2048m"/JAVA_MAX_MEM="${CONTROLLERMEM}"/g' \${MEMCONF}
cat \${MEMCONF}
-echo "Listing all open ports on controller system"
+echo "Listing all open ports on controller system..."
netstat -natu
echo "Starting controller..."
elif (( "\$COUNT" > "600" )); then
echo Timeout Controller DOWN
echo "Dumping Karaf log..."
- cat /tmp/${BUNDLEFOLDER}/data/log/karaf.log
+ head --bytes=1M "/tmp/${BUNDLEFOLDER}/data/log/karaf.log"
echo "Listing all open ports on controller system"
netstat -natu
exit 1
echo "Checking OSGi bundles..."
sshpass -p karaf /tmp/${BUNDLEFOLDER}/bin/client -u karaf 'bundle:list'
-echo "Listing all open ports on controller system"
+echo "Listing all open ports on controller system..."
netstat -natu
function exit_on_log_file_message {
if grep --quiet "\$1" /tmp/${BUNDLEFOLDER}/data/log/karaf.log; then
echo ABORTING: found "\$1"
echo "Dumping Karaf log..."
- cat /tmp/${BUNDLEFOLDER}/data/log/karaf.log
+ head --bytes=1M "/tmp/${BUNDLEFOLDER}/data/log/karaf.log"
exit 1
fi
}
-v MININET:${TOOLS_SYSTEM_IP} -v MININET1:${TOOLS_SYSTEM_2_IP} -v MININET2:${TOOLS_SYSTEM_3_IP} -v MININET_USER:${USER} \
-v USER_HOME:${HOME} ${TESTOPTIONS} ${SUITES} || true
-echo "Fetching Karaf log"
-scp ${ODL_SYSTEM_IP}:/tmp/${BUNDLEFOLDER}/data/log/karaf.log .
+echo "Killing ODL and fetching Karaf log..."
+set +e # We do not want to create red dot just because something went wrong while fetching logs.
+ssh "${ODL_SYSTEM_IP}" head --bytes=1M "/tmp/${BUNDLEFOLDER}/data/log/karaf.log" > "karaf.log"
+ssh "${ODL_SYSTEM_IP}" bash -c 'ps axf | grep karaf | grep -v grep | awk '"'"'{print "kill -9 " $1}'"'"' | sh'
+sleep 5
+ssh "${ODL_SYSTEM_IP}" xz -9ekvv "/tmp/${BUNDLEFOLDER}/data/log/karaf.log"
+scp "${ODL_SYSTEM_IP}:/tmp/${BUNDLEFOLDER}/data/log/karaf.log.xz" .
+true # perhaps Jenkins is testing last exit code
# vim: ts=4 sw=4 sts=4 et ft=sh :
echo "Configuring the log..."
LOGCONF=/tmp/${BUNDLEFOLDER}/etc/org.ops4j.pax.logging.cfg
-sed -ie 's/log4j.appender.out.maxFileSize=1MB/log4j.appender.out.maxFileSize=20MB/g' \${LOGCONF}
+sed -ie 's/log4j.appender.out.maxBackupIndex=10/log4j.appender.out.maxBackupIndex=1/g' \${LOGCONF}
+# FIXME: Make log size limit configurable from build parameter.
+sed -ie 's/log4j.appender.out.maxFileSize=1MB/log4j.appender.out.maxFileSize=100GB/g' \${LOGCONF}
cat \${LOGCONF}
echo "Configure max memory..."
# create a fresh empty place to build this custom distribution
BUILD_DIR=${WORKSPACE}/patch_tester
POM_FILE=${WORKSPACE}/patch_tester/pom.xml
+DISTRIBUTION_BRANCH_TO_BUILD=$BRANCH #renaming variable for clarity
rm -rf $BUILD_DIR
mkdir -p $BUILD_DIR
git fetch https://git.opendaylight.org/gerrit/${PROJECT} refs/changes/${PATCH}
git checkout FETCH_HEAD
cd $BUILD_DIR
-
done
+# if distribution was not cloned above, we still need to get it
if [ "${distribution_status}" == "not_patched" ]; then
- # clone distribution and add it as a module in root pom
git clone https://git.opendaylight.org/gerrit/p/integration/distribution
- # TODO: Should we add support for non-master distribution branches?
echo "<module>distribution</module>" >> $POM_FILE
fi
echo "</modules>" >> $POM_FILE
echo "</project>" >> $POM_FILE
+# by default we can stay in master branch or checkout something else here
+if [ "${DISTRIBUTION_BRANCH_TO_BUILD}" != "master" ]; then
+ cd distribution
+ git checkout ${DISTRIBUTION_BRANCH_TO_BUILD}
+fi
+
+
# Extract the BUNDLEVERSION from the distribution pom.xml
BUNDLEVERSION=`xpath $BUILD_DIR/distribution/pom.xml '/project/version/text()' 2> /dev/null`
echo "Bundle version is ${BUNDLEVERSION}"
# Set BUNDLEVERSION & BUNDLEURL
echo BUNDLEVERSION=${BUNDLEVERSION} > ${WORKSPACE}/bundle.txt
-echo BUNDLEURL=${BUNDLEURL} >> ${WORKSPACE}/bundle.txt
\ No newline at end of file
+echo BUNDLEURL=${BUNDLEURL} >> ${WORKSPACE}/bundle.txt
elif (( "\$COUNT" > "600" )); then
echo Timeout Controller DOWN
echo "Dumping Karaf log..."
- cat /tmp/${BUNDLEFOLDER}/data/log/karaf.log
+ head --bytes=1M "/tmp/${BUNDLEFOLDER}/data/log/karaf.log"
echo "Listing all open ports on controller system"
netstat -natu
exit 1
echo "Checking OSGi bundles..."
sshpass -p karaf /tmp/${BUNDLEFOLDER}/bin/client -u karaf 'bundle:list'
-echo "Listing all open ports on controller system"
+echo "Listing all open ports on controller system.."
netstat -natu
function exit_on_log_file_message {
echo "looking for \"\$1\" in log file"
- if grep --quiet "\$1" /tmp/${BUNDLEFOLDER}/data/log/karaf.log; then
+ if grep --quiet "\$1" "/tmp/${BUNDLEFOLDER}/data/log/karaf.log"; then
echo ABORTING: found "\$1"
echo "Dumping Karaf log..."
- cat /tmp/${BUNDLEFOLDER}/data/log/karaf.log
+ head --bytes=1M "/tmp/${BUNDLEFOLDER}/data/log/karaf.log"
exit 1
fi
}
cat ${WORKSPACE}/test/csit/testplans/${TESTPLAN} | sed "s:integration:${WORKSPACE}:" > testplan.txt
cat testplan.txt
-SUITES=$( egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' testplan.txt | tr '\012' ' ' )
+SUITES=`egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' testplan.txt | tr '\012' ' '`
echo "Generating controller variables..."
for i in `seq 1 ${NUM_ODL_SYSTEM}`
-v MININET:${TOOLS_SYSTEM_IP} -v MININET1:${TOOLS_SYSTEM_2_IP} -v MININET2:${TOOLS_SYSTEM_3_IP} -v MININET_USER:${USER} \
-v USER_HOME:${HOME} ${TESTOPTIONS} ${SUITES} || true
-echo "Remove any Karaf log"
-rm -f controller?-karaf.log
-
-echo "Fetching Karaf log"
+echo "Killing ODL and fetching Karaf log..."
+set +e # We do not want to create red dot just because something went wrong while fetching logs.
+for i in `seq 1 ${NUM_ODL_SYSTEM}`
+do
+ CONTROLLERIP=ODL_SYSTEM_${i}_IP
+ ssh "${!CONTROLLERIP}" head --bytes=1M "/tmp/${BUNDLEFOLDER}/data/log/karaf.log" > "odl${i}_karaf.log"
+ ssh "${!CONTROLLERIP}" bash -c 'ps axf | grep karaf | grep -v grep | awk '"'"'{print "kill -9 " $1}'"'"' | sh'
+done
+sleep 5
for i in `seq 1 ${NUM_ODL_SYSTEM}`
do
CONTROLLERIP=ODL_SYSTEM_${i}_IP
- scp ${!CONTROLLERIP}:/tmp/$BUNDLEFOLDER/data/log/karaf.log controller${i}-karaf.log
+ ssh "${!CONTROLLERIP}" xz -9ekvv "/tmp/${BUNDLEFOLDER}/data/log/karaf.log"
+ scp "${!CONTROLLERIP}:/tmp/${BUNDLEFOLDER}/data/log/karaf.log.xz" "odl${i}_karaf.log.xz"
done
+true # perhaps Jenkins is testing last exit code
# vim: ts=4 sw=4 sts=4 et ft=sh :
- shell:
!include-raw include-raw-integration-multipatch-distribution-test.sh
+# Macro: integration-cleanup-worspace
+# Operation: Cleans up files possibly left there by the previous build
+# Used by: {project}-csit-* job templates
+
+- builder:
+ name: integration-cleanup-workspace
+ builders:
+ - shell:
+ !include-raw include-raw-integration-cleanup-workspace.sh
+
##############
# Publishers #
##############
pattern: 'csit/suites/{project}/**'
builders:
+ - integration-cleanup-workspace
- integration-install-robotframework
- inject:
properties-file: 'env.properties'
unstable-if: 0.0
pass-if: 100.0
- archive:
- artifacts: 'karaf.log'
+ artifacts: 'karaf.log*'
- email-notification:
email-prefix: '[{project}]'
result: 'success'
builders:
+ - integration-cleanup-workspace
- integration-install-robotframework
- inject:
properties-file: 'env.properties'
unstable-if: 0.0
pass-if: 100.0
- archive:
- artifacts: 'karaf.log'
+ artifacts: 'karaf.log*'
- email-notification:
email-prefix: '[{project}]'
- plot:
pattern: 'csit/suites/{project}/**'
builders:
+ - integration-cleanup-workspace
- integration-install-robotframework
- inject:
properties-file: 'env.properties'
unstable-if: 0.0
pass-if: 100.0
- archive:
- artifacts: 'karaf.log'
+ artifacts: 'karaf.log*'
- email-notification:
email-prefix: '[{project}]'
result: 'success'
builders:
+ - integration-cleanup-workspace
- integration-install-robotframework
- inject:
properties-file: 'env.properties'
unstable-if: 0.0
pass-if: 100.0
- archive:
- artifacts: 'karaf.log'
+ artifacts: 'karaf.log*'
- email-notification:
email-prefix: '[{project}]'
- plot:
- timed: '{schedule}'
builders:
+ - integration-cleanup-workspace
- integration-install-robotframework
- inject:
properties-file: 'env.properties'
unstable-if: 0.0
pass-if: 100.0
- archive:
- artifacts: 'karaf.log'
+ artifacts: 'karaf.log*'
- email-notification:
email-prefix: '[{project}]'
- plot:
pattern: 'csit/suites/{project}/**'
builders:
+ - integration-cleanup-workspace
- integration-install-robotframework
- inject:
properties-file: 'env.properties'
unstable-if: 0.0
pass-if: 100.0
- archive:
- artifacts: '*karaf.log'
+ artifacts: '*karaf.log*'
- email-notification:
email-prefix: '[{project}]'
result: 'success'
builders:
+ - integration-cleanup-workspace
- integration-install-robotframework
- inject:
properties-file: 'env.properties'
unstable-if: 0.0
pass-if: 100.0
- archive:
- artifacts: '*karaf.log'
+ artifacts: '*karaf.log*'
- email-notification:
email-prefix: '[{project}]'
- plot:
- timed: '{schedule}'
builders:
+ - integration-cleanup-workspace
- integration-install-robotframework
- inject:
properties-file: 'env.properties'
unstable-if: 0.0
pass-if: 100.0
- archive:
- artifacts: '*karaf.log'
+ artifacts: '*karaf.log*'
- email-notification:
email-prefix: '[{project}]'
- plot:
- integration-controller-scope:
controller-scope: 'only'
- integration-controller-features:
- controller-features: 'odl-openflowplugin-flow-services-ui,odl-bgpcep-pcep-all,odl-bgpcep-pcep,odl-netconf-connector-all'
+ controller-features: >
+ odl-openflowplugin-flow-services-ui,
+ odl-bgpcep-pcep,
+ odl-bgpcep-bgp,
+ odl-netconf-connector-all
- integration-test-options:
test-options: '-e adsal'
- integration-test-plan:
pattern: 'csit/libraries/*'
builders:
+ - integration-cleanup-workspace
- integration-install-robotframework
- inject:
properties-file: 'env.properties'
unstable-if: 0.0
pass-if: 100.0
- archive:
- artifacts: 'karaf.log'
+ artifacts: 'karaf.log*'
- email-notification:
email-prefix: '[integration]'
parameters:
- patches-to-build-parameter:
patches_to_build: '$PATCHES_TO_BUILD'
+ - integration-branch:
+ branch: '{branch}'
wrappers:
- build-timeout
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
MVN_GOALS: -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r -Dmaven.compile.fork=true clean install -Dintegrationtests
MVN_OPTS: -Xmx2048m -XX:MaxPermSize=1024m
DEPENDENCIES: odlparent,yangtools
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
DEPENDENCIES: controller,yangtools,odlparent
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
MVN_GOALS: -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r clean install -Pintegrationtests
MVN_OPTS: -Xmx2048m -XX:MaxPermSize=1024m -Dmaven.compile.fork=true
DEPENDENCIES: aaa,controller,odlparent,yangtools
- beryllium:\r
branch: master\r
jdks: openjdk7,openjdk8\r
+ autorelease: true\r
MVN_OPTS: -Xmx1024m -XX:MaxPermSize=256m\r
DEPENDENCIES: odlparent,yangtools,controller,openflowjava\r
- beryllium:
branch: master
jdks: openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
DEPENDENCIES: odlparent,controller,yangtools
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
DEPENDENCIES: controller,yangtools,odlparent,netconf
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
default: ''
description: 'csv list of patches in project:changeset format to build distribution with'
+- parameter:
+ name: distribution-branch-to-build-parameter
+ parameters:
+ - string:
+ name: DISTRIBUTION_BRANCH_TO_BUILD
+ default: 'master'
+ description: 'distribution repo branch to build with'
+
- scm:
name: git-scm
scm:
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
DEPENDENCIES: odlparent,yangtools,controller,ovsdb
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
DEPENDENCIES: controller,yangtools,odlparent
- beryllium:
branch: master
jdks: openjdk7,openjdk8
+ autorelease: true
- stable-lithium:
branch: stable/lithium
jdks: openjdk7,openjdk8