- defaults:
name: global
+ functionality: global
+ stream: global
prefix: '' # A prefix for job names sandbox for example: user-
+ testplan: '{project}-{functionality}.txt'
+ streamtestplan: '{project}-{functionality}-{stream}.txt'
karaf-version: karaf4
build-days-to-keep: 30
use-features-boot: 'True'
sm-features: ''
# CSIT images configuration
- openstack_system_image_ocata: ZZCI - CentOS 7 - devstack-ocata - 20171208-1649
openstack_system_image_pike: ZZCI - CentOS 7 - devstack-pike - 20171208-1649
stack-template: csit-2-instance-type.yaml
docker_system_count: 1
csit-list: >
netvirt-csit-3node-openstack-{os-branch}-gate-stateful-{stream}
+ - netvirt-itm-direct-tunnels:
+ csit-list: >
+ netvirt-csit-1node-openstack-{os-branch}-gate-stateful-itm-direct-tunnels-{stream}
+
- genius:
csit-list: >
genius-csit-1node-gate-all-{stream}
install-features: 'odl-groupbasedpolicy-neutron-and-ofoverlay,odl-restconf'
openstack:
- - ocata:
- openstack-branch: 'stable/ocata'
- odl-ml2-branch: 'stable/ocata'
+ - pike:
+ openstack-branch: 'stable/pike'
+ odl-ml2-branch: 'stable/pike'
public-bridge: 'br-int'
echo "Set JAVA_HOME"
export JAVA_HOME="${java_home}"
+
# shellcheck disable=SC2037
JAVA_RESOLVED=$(readlink -e "${java_home}/bin/java")
echo "Java binary pointed at by JAVA_HOME: ${JAVA_RESOLVED}"
ssh ${!CONTROLLERIP} "sudo ps aux" > ${WORKSPACE}/ps_after.log
pid=$(grep org.apache.karaf.main.Main ${WORKSPACE}/ps_after.log | grep -v grep | tr -s ' ' | cut -f2 -d' ')
echo "karaf main: org.apache.karaf.main.Main, pid:${pid}"
- ssh ${!CONTROLLERIP} "jstack ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_after.log || true
+ ssh ${!CONTROLLERIP} "${JAVA_HOME}/bin/jstack -l ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_after.log || true
echo "killing karaf process..."
${SSH} "${!CONTROLLERIP}" bash -c 'ps axf | grep karaf | grep -v grep | awk '"'"'{print "kill -9 " $1}'"'"' | sh'
${SSH} ${!CONTROLLERIP} "sudo journalctl > /tmp/journalctl.log"
ssh ${!CONTROLLERIP} "sudo ps aux" > ${WORKSPACE}/ps_before.log
pid=$(grep org.apache.karaf.main.Main ${WORKSPACE}/ps_before.log | grep -v grep | tr -s ' ' | cut -f2 -d' ')
echo "karaf main: org.apache.karaf.main.Main, pid:${pid}"
- ssh ${!CONTROLLERIP} "jstack ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_before.log || true
+ ssh ${!CONTROLLERIP} "${JAVA_HOME}/bin/jstack -l ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_before.log || true
done
if [ ${NUM_OPENSTACK_SYSTEM} -gt 0 ]; then
ssh ${!CONTROLLERIP} "sudo ps aux" > ${WORKSPACE}/ps_after.log
pid=$(grep org.apache.karaf.main.Main ${WORKSPACE}/ps_after.log | grep -v grep | tr -s ' ' | cut -f2 -d' ')
echo "karaf main: org.apache.karaf.main.Main, pid:${pid}"
- ssh ${!CONTROLLERIP} "jstack ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_after.log || true
+ ssh ${!CONTROLLERIP} "${JAVA_HOME}/bin/jstack -l ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_after.log || true
echo "Killing ODL"
set +e # We do not want to create red dot just because something went wrong while fetching logs.
ssh "${!CONTROLLERIP}" bash -c 'ps axf | grep karaf | grep -v grep | awk '"'"'{print "kill -9 " $1}'"'"' | sh'
ssh ${!CONTROLLERIP} "sudo ps aux" > ${WORKSPACE}/ps_before.log
pid=$(grep org.apache.karaf.main.Main ${WORKSPACE}/ps_before.log | grep -v grep | tr -s ' ' | cut -f2 -d' ')
echo "karaf main: org.apache.karaf.main.Main, pid:${pid}"
- ssh ${!CONTROLLERIP} "jstack ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_before.log || true
+ ssh ${!CONTROLLERIP} "${JAVA_HOME}/bin/jstack -l ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_before.log || true
done
echo "Generating mininet variables..."
ssh ${!CONTROLLERIP} "sudo ps aux" > ${WORKSPACE}/ps_after.log
pid=$(grep org.apache.karaf.main.Main ${WORKSPACE}/ps_after.log | grep -v grep | tr -s ' ' | cut -f2 -d' ')
echo "karaf main: org.apache.karaf.main.Main, pid:${pid}"
- ssh ${!CONTROLLERIP} "jstack ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_after.log || true
+ ssh ${!CONTROLLERIP} "${JAVA_HOME}/bin/jstack -l ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_after.log || true
echo "killing karaf process..."
ssh "${!CONTROLLERIP}" bash -c 'ps axf | grep karaf | grep -v grep | awk '"'"'{print "kill -9 " $1}'"'"' | sh'
done
- integration-test-options:
test-options: '{robot-options}'
- integration-stream-test-plan:
- stream-test-plan: '{project}-{functionality}-{stream}.txt'
+ stream-test-plan: '{streamtestplan}'
- integration-test-plan:
- test-plan: '{project}-{functionality}.txt'
+ test-plan: '{testplan}'
- integration-test-suites:
test-suites: '{test-suites}'
- integration-patch-refspec:
- integration-test-options:
test-options: '{robot-options}'
- integration-stream-test-plan:
- stream-test-plan: '{project}-{functionality}-{stream}.txt'
+ stream-test-plan: '{streamtestplan}'
- integration-test-plan:
- test-plan: '{project}-{functionality}.txt'
+ test-plan: '{testplan}'
- integration-test-suites:
test-suites: '{test-suites}'
- integration-patch-refspec:
mvn-version: 'mvn35'
csit-list: !include: csit-jobs-fluorine.lst
build-order: >
- infrautils mdsal controller aaa netconf daexim bgpcep ovsdb neutron
- lispflowmapping openflowplugin coe genius sfc netvirt
+ odlparent yangtools infrautils mdsal controller aaa netconf daexim bgpcep
+ ovsdb neutron lispflowmapping openflowplugin coe genius sfc netvirt
- oxygen:
branch: 'stable/oxygen'
mvn-version: 'mvn35'
csit-list: !include: csit-jobs-oxygen.lst
build-order: >
- infrautils mdsal controller aaa netconf daexim bgpcep ovsdb neutron
- lispflowmapping openflowplugin coe genius sfc netvirt
+ odlparent yangtools infrautils mdsal controller aaa netconf daexim bgpcep
+ ovsdb neutron lispflowmapping openflowplugin coe genius sfc netvirt
- project:
name: integration-distribution
set -e
-# TODO: 1) clean up inline todo's below :)
-# TODO: 2) Use just a topic branch to create a distribution. see this email:
-# https://lists.opendaylight.org/pipermail/discuss/2015-December/006040.html
-# TODO: 3) Bubble up CSIT jobs that are triggered by the multipatch job to a jenkins
-# parameter. the default can be distribution-test which calls all CSIT jobs
-# but being able to easily override it to a smaller subset (or none) will be
-# helpful
-
# create a fresh empty place to build this custom distribution
BUILD_DIR=${WORKSPACE}/patch_tester
DISTRIBUTION_BRANCH_TO_BUILD=$DISTROBRANCH #renaming variable for clarity
export GIT_COMMITTER_NAME="Multipatch Job"
# Extract a list of patches per project from an comment trigger. An example is:
-# Patch Set 1:
-#
# multipatch-build:openflowplugin:45/69445/1,genius:46/69446/1,netvirt:47/69447/1
if [ -n "$GERRIT_EVENT_COMMENT_TEXT" ]; then
if [[ "$GERRIT_EVENT_COMMENT_TEXT" == *fast* ]]; then
# get all patches number for a topic for a given project
IFS=$'\n' read -rd '' -a GERRIT_PATCH_LIST <<< "$(ssh -p 29418 jenkins-$SILO@git.opendaylight.org gerrit query status:open topic:${TOPIC} project:${PROJECT} \
| grep 'number:' | awk '{{ print $2 }}')" || true
- echo "Add ${PROJECT}:${GERRIT_PATCH_LIST[*]}"
# add project if it is the first with patches or it is not the first
if [[ -z "${PATCHES_TO_BUILD}" && ! -z "${GERRIT_PATCH_LIST[*]}" ]]; then
PATCHES_TO_BUILD="${PROJECT}"
elif [[ ! -z "${PATCHES_TO_BUILD}" ]]; then
+ if [[ ! -z "${GERRIT_PATCH_LIST[*]}" ]]; then
+ echo "Add ${PROJECT}:${DISTRIBUTION_BRANCH_TO_BUILD}"
+ fi
PATCHES_TO_BUILD="${PATCHES_TO_BUILD},${PROJECT}"
fi
# sort project patches
if [[ ! -z "${GERRIT_PATCH_LIST[*]}" ]]; then
+ echo "Add ${PROJECT}:${GERRIT_PATCH_LIST[*]}"
REF_LIST=()
# create reference list with patch number-refspec
for PATCH in "${GERRIT_PATCH_LIST[@]}"; do
declare -a PROJECTS
# For each patch:
-# * Clone the project.
-# * Optionally, checkout a specific (typically unmerged) Gerrit patch. If none,
+# 1. Clone the project.
+# 2. Optionally, checkout a specific (typically unmerged) Gerrit patch. If none,
# default to Integration/Distribution branch via {branch} JJB param.
-# * Also optionally, cherry-pick series of patches on top of the checkout.
-# * Final option: perform a 'release' by removing "-SNAPSHOT" everywhere within the project.
+# 3. Also optionally, cherry-pick series of patches on top of the checkout.
#
# Each patch is found in the ${PATCHES_TO_BUILD} variable as a comma separated
-# list of project[=checkout][:cherry-pick]* values.
+# list of project[=checkout][:cherry-pick]* values. Examples:
#
# Checkout a (typically unmerged) Gerrit patch on top of odlparent's git clone:
-#
# PATCHES_TO_BUILD='odlparent=45/30045/2'
#
# Checkout patches for both odlparent and yangtools:
-#
# PATCHES_TO_BUILD='odlparent=45/30045/2,yangtools:53/26853/25'
#
# Checkout a patch for controller, cherry-pick another patch on top of it:
-#
# PATCHES_TO_BUILD='controller=61/29761/5:45/29645/6'
distribution_status="not_included"
-for proto_patch in "${PATCHES[@]}"
+for patch in "${PATCHES[@]}"
do
- echo "working on ${proto_patch}"
+ echo "working on ${patch}"
# For patch=controller=61/29761/5:45/29645/6, this gives controller
- PROJECT="$(echo ${proto_patch} | cut -d\: -f 1 | cut -d\= -f 1)"
+ PROJECT="$(echo ${patch} | cut -d\: -f 1 | cut -d\= -f 1)"
if [ "${PROJECT}" == "integration/distribution" ]; then
distribution_status="included"
fi
echo "cloning project ${PROJECT}"
git clone "https://git.opendaylight.org/gerrit/p/${PROJECT}"
cd ${PROJECT_SHORTNAME}
- if [ "$(echo -n ${proto_patch} | tail -c 1)" == 'r' ]; then
- pure_patch="$(echo -n $proto_patch | head -c -1)"
- else
- pure_patch="$proto_patch"
- fi
# For patch = controller=61/29761/5:45/29645/6, this gives 61/29761/5
- CHECKOUT="$(echo ${pure_patch} | cut -d\= -s -f 2 | cut -d\: -f 1)"
+ CHECKOUT="$(echo ${patch} | cut -d\= -s -f 2 | cut -d\: -f 1)"
+ # If project has a patch, checkout patch, otherwise use distribution branch
if [ "x${CHECKOUT}" != "x" ]; then
echo "checking out ${CHECKOUT}"
# TODO: Make this script accept "29645/6" as a shorthand for "45/29645/6".
git fetch "https://git.opendaylight.org/gerrit/${PROJECT}" "refs/changes/$CHECKOUT"
git checkout FETCH_HEAD
+
else
- echo "checking out ${DISTRIBUTION_BRANCH_TO_BUILD}"
- git checkout "${DISTRIBUTION_BRANCH_TO_BUILD}"
+ # If project with no patch = yangtools, download master branch
+ if [ "${PROJECT}" == "yangtools" ]; then
+ echo "checking out master"
+ git checkout master
+ else
+ echo "checking out ${DISTRIBUTION_BRANCH_TO_BUILD}"
+ git checkout "${DISTRIBUTION_BRANCH_TO_BUILD}"
+ fi
fi
# For patch=controller=61/29761/5:45/29645/6, this gives 45/29645/6
- PICK_SEGMENT="$(echo "${pure_patch}" | cut -d\: -s -f 2-)"
+ PICK_SEGMENT="$(echo "${patch}" | cut -d\: -s -f 2-)"
IFS=':' read -ra PICKS <<< "${PICK_SEGMENT}"
for pick in "${PICKS[@]}"
do
git fetch "https://git.opendaylight.org/gerrit/${PROJECT}" "refs/changes/${pick}"
git cherry-pick --ff --keep-redundant-commits FETCH_HEAD
done
- # Check whether the patch ends with 'r', and the patch isn't the project
- # (to avoid releasing controller...)
- if [ "${proto_patch: -1}" = "r" ] && [ "${proto_patch}" != "${PROJECT}" ]; then
- # Here 'r' means release. Useful for testing Nitrogen Odlparent changes.
- find . -name "*.xml" -print0 | xargs -0 sed -i 's/-SNAPSHOT//g'
- fi
cd "${BUILD_DIR}"
done
+# Finally add distribution if there is no int/dist patch
if [ "${distribution_status}" == "not_included" ]; then
echo "adding integration/distribution"
PROJECTS+=(distribution)
cd "${BUILD_DIR}"
fi
+# If there is a patch for odlparent or yangtools (MRI projects), adjust version to mdsal project:
+# 1. Extract project version in patch
+# 2. Extract project MSI version from mdsal project
+# 3. Replace version in patch by MSI version
+# Otherwise release the MRI project
+if [[ -d "odlparent" ]]; then
+ if [[ -d "mdsal" ]]; then
+ # Extract patch and MSI used version
+ patch_version="$(xpath ./odlparent/odlparent-lite/pom.xml '/project/version/text()' 2> /dev/null)"
+ msi_version="$(xpath ./mdsal/pom.xml '/project/parent/version/text()' 2> /dev/null)"
+ # Replace version
+ find ./odlparent -name "*.xml" -print0 | xargs -0 sed -i "s/${patch_version}/${msi_version}/g"
+ else
+ # Release project
+ find ./odlparent -name "*.xml" -print0 | xargs -0 sed -i 's/-SNAPSHOT//g'
+ fi
+fi
+if [[ -d "yangtools" ]]; then
+ if [[ -d "mdsal" ]]; then
+ # Extract patch and MSI used version
+ patch_version="$(xpath ./yangtools/pom.xml '/project/version/text()' 2> /dev/null)"
+ msi_version="$(xpath ./mdsal/binding/yang-binding/pom.xml '/project/dependencyManagement/dependencies/dependency/version/text()' 2> /dev/null)"
+ # Replace version
+ find ./yangtools -name "*.xml" -print0 | xargs -0 sed -i "s/${patch_version}/${msi_version}/g"
+ else
+ # Release project
+ find ./yangtools -name "*.xml" -print0 | xargs -0 sed -i 's/-SNAPSHOT//g'
+ fi
+fi
+
# Second phase: build everything
for PROJECT_SHORTNAME in "${PROJECTS[@]}"; do
- upstream-stateful-snat-conntrack:
odl-snat-mode: 'conntrack'
- gate-stateful
+ - gate-stateful-itm-direct-tunnels:
+ enable-itm-direct-tunnels: 'true'
- gate-stateful-snat-conntrack:
odl-snat-mode: 'conntrack'
- gate-minimal-cluster:
- gate-stateful
- gate-stateful-snat-conntrack:
odl-snat-mode: 'conntrack'
+ - gate-stateful-itm-direct-tunnels:
+ enable-itm-direct-tunnels: 'true'
- gate-minimal-cluster:
testplan: '{project}-{topology}-minimal-openstack.txt'
# Job for Test Driven Development with it's own testplan to run new/non-passing suites. scheduled manually.
coe-csit-1node-container-networking-all-{stream}
- itm-direct-tunnels:
csit-list: >
- netvirt-csit-1node-openstack-{os-branch}-upstream-stateful-itm-direct-tunnels-{stream}
+ netvirt-csit-1node-openstack-{os-branch}-gate-stateful-itm-direct-tunnels-{stream}
- upgrade:
csit-list: >
netvirt-csit-1node-openstack-{os-branch}-upgrade-{stream}
templates: devstack
platforms: centos-7
-- project:
- name: packer-devstack-pre-pip-ocata-jobs
- jobs:
- - gerrit-packer-merge
-
- project: releng/builder
- project-name: builder
- branch: master
- archive-artifacts: '**/*.log'
-
- build-node: centos7-builder-2c-1g
- build-timeout: 75
- cron: '00 H 1 * *'
-
- templates: devstack-pre-pip-ocata
- platforms: centos-7
-
- project:
name: packer-devstack-pre-pip-pike-jobs
jobs:
(cd devstack && git checkout "${branch}")
sed -e 's/#.*//' devstack/files/rpms/general | xargs yum install -y
+sudo ls -al /usr/lib/py*
+
+sudo rm -rf /usr/lib/python3/dist-packages/yaml
+sudo rm -rf /usr/lib/python3/dist-packages/PyYAML-*
+sudo rm -rf /usr/lib/python3.4/dist-packages/yaml
+sudo rm -rf /usr/lib/python3.4/dist-packages/PyYAML-*
+
+sudo rm -rf /usr/lib/python3/site-packages/yaml
+sudo rm -rf /usr/lib/python3/site-packages/PyYAML-*
+sudo rm -rf /usr/lib/python3.4/site-packages/yaml
+sudo rm -rf /usr/lib/python3.4/site-packages/PyYAML-*
+
base_url=https://github.com/openstack/
for proj in $projs
do
+++ /dev/null
-{
- "variables": {
- "base_image": null,
- "distro": null,
- "cloud_auth_url": null,
- "cloud_user": null,
- "cloud_pass": null,
- "cloud_network": null,
- "cloud_tenant": null,
- "cloud_user_data": null,
- "ssh_user": null,
- "ssh_proxy_host": ""
- },
- "builders": [
- {
- "type": "openstack",
- "identity_endpoint": "{{user `cloud_auth_url`}}",
- "domain_name": "Default",
- "tenant_name": "{{user `cloud_tenant`}}",
- "username": "{{user `cloud_user`}}",
- "password": "{{user `cloud_pass`}}",
- "region": "ca-ymq-1",
- "availability_zone": "ca-ymq-2",
- "ssh_username": "{{user `ssh_user`}}",
- "ssh_proxy_host": "{{user `ssh_proxy_host`}}",
- "image_name": "ZZCI - {{user `distro`}} - devstack-ocata - {{isotime \"20060102-150405.000\"}}",
- "instance_name": "{{user `distro`}}-devstack-ocata-{{uuid}}",
- "source_image_name": "{{user `base_image`}}",
- "flavor": "v1-standard-1",
- "networks": [
- "{{user `cloud_network`}}"
- ],
- "user_data_file": "{{user `cloud_user_data`}}",
- "metadata": {
- "ci_managed": "yes"
- }
- }
- ],
- "provisioners": [
- {
- "type": "shell",
- "environment_vars": [
- "os_branch=stable/ocata"
- ],
- "scripts": [
- "provision/baseline.sh",
- "provision/devstack-pre-pip.sh",
- "provision/system_reseal_local_env.sh",
- "provision/system_reseal.sh"
- ],
- "execute_command": "chmod +x {{ .Path }}; if [ \"$UID\" == \"0\" ]; then {{ .Vars }} '{{ .Path }}'; else {{ .Vars }} sudo -E '{{ .Path }}'; fi"
- }
- ]
-}
],
"execute_command": "chmod +x {{ .Path }}; if [ \"$UID\" == \"0\" ]; then {{ .Vars }} '{{ .Path }}'; else {{ .Vars }} sudo -E '{{ .Path }}'; fi"
},
+ {
+ "type": "shell-local",
+ "command": "./common-packer/ansible-galaxy.sh {{user `ansible_roles_path`}}"
+ },
{
"type": "ansible",
"playbook_file": "provision/robot.yaml",