- project:
name: functest
- installer:
- - fuel:
- node: 'opnfv-jump-2'
- installer_type: 'fuel'
- installer_ip: '10.20.0.2'
- - foreman:
- node: 'opnfv-jump-2'
- installer_type: 'foreman'
- installer_ip: '172.30.10.73'
+ project: '{name}'
+
pod:
- - orange-build:
- node: 'orange-build'
- installer_type: 'foreman'
- installer_ip: '172.30.10.73'
+ - opnfv-jump-1:
+ installer: apex
+ - opnfv-jump-2:
+ installer: fuel
+ - orange-test1:
+ installer: fuel
+ - orange-pod2:
+ installer: joid
+ - huawei-us-deploy-bare-1:
+ installer: compass
+ - intel-pod5:
+ installer: joid
+
+ testsuite:
+ - 'daily'
+ - 'suite'
jobs:
- - 'set-functest-env-{pod}'
- - 'functest-{pod}'
- - 'clean-functest-env-{pod}'
- - 'set-functest-env-{installer}-{stream}'
- - 'functest-{installer}-{stream}'
- - 'clean-functest-env-{installer}-{stream}'
- - 'functest-openstack-bench-test-{pod}'
- - 'functest-openstack-tempest-smoke-test-{pod}'
- - 'functest-odl-test-{pod}'
- - 'functest-vims-test-{pod}'
- - 'functest-vping-test-{pod}'
- - 'functest-daily-{stream}'
- - 'functest-merge-{stream}'
+ - 'functest-{installer}-{pod}-{testsuite}-{stream}'
- 'functest-verify-{stream}'
- # stream: branch with - in place of / (eg. stable-arno)
- # branch: branch (eg. stable/arno)
stream:
- master:
branch: 'master'
gs-pathname: ''
- - stable-arno:
- branch: 'stable/arno'
- gs-pathname: '/arno'
+# - brahmaputra:
+# branch: 'stable/brahmaputra'
+# gs-pathname: '/brahmaputra'
- project: 'functest'
- somevar: 'foo'
################################
# job template
################################
- job-template:
- name: set-functest-env-{pod}
-
- project-type: freestyle
-
- node: '{pod}'
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - shell: |
- #!/bin/bash
- set +e
-
- echo "Functest: prepare Functest environment"
- mkdir -p $HOME/functest/
- # source openstack vars
- if [[ ! -f $HOME/opnfv-openrc.sh ]]; then
- echo "Unable to access file $HOME/opnfv-openrc.sh"
- exit 1
- fi
- source $HOME/opnfv-openrc.sh
-
- # WORKSPACE is the root of the functest repo
- # go into WORKSPACE where the functest repo is cloned
- cd $WORKSPACE
-
- # prepare
- echo "Functest: prepare Functest environment"
- python $WORKSPACE/testcases/config_functest.py --debug $WORKSPACE/ start
-
-- job-template:
- name: clean-functest-env-{pod}
-
- project-type: freestyle
-
- node: '{pod}'
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - shell: |
- #!/bin/bash
- set +e
-
- # collect results
- echo "Functest: copy results and clean Functest environment"
- mkdir -p $HOME/functest/results
-
- # save ODL results
- cp -Rf $WORSPACE/testcases/Controllers/ODL/CI/logs $HOME/functest/results/ODL
-
- # save tempest.conf for further troubleshooting
- cp $HOME/.rally/tempest/for-deployment-*/tempest.conf $HOME/functest/results
-
- # cleanup
- # source openstack vars
- source $HOME/opnfv-openrc.sh
- python $WORKSPACE/testcases/config_functest.py --debug --force $WORKSPACE/ clean
-
-- job-template:
- name: set-functest-env-{installer}-{stream}
-
- project-type: freestyle
-
- node: '{node}'
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - shell: |
- #!/bin/bash
- set +e
-
- echo "Functest: prepare Functest environment"
- mkdir -p $HOME/functest/
- # source openstack vars
- if [[ ! -f $HOME/opnfv-openrc.sh ]]; then
- echo "Unable to access file $HOME/opnfv-openrc.sh"
- exit 1
- fi
- source $HOME/opnfv-openrc.sh
-
- # WORKSPACE is the root of the functest repo
- # go into WORKSPACE where the functest repo is cloned
- cd $WORKSPACE
-
- # prepare
- echo "Functest: prepare Functest environment"
- python $WORKSPACE/testcases/config_functest.py --debug $WORKSPACE/ start
-
-- job-template:
- name: clean-functest-env-{installer}-{stream}
-
- project-type: freestyle
-
- node: '{node}'
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - shell: |
- #!/bin/bash
- set +e
-
- # collect results
- echo "Functest: copy results and clean Functest environment"
- mkdir -p $HOME/functest/results
-
- # save ODL results
- cp -Rf $WORSPACE/testcases/Controllers/ODL/CI/logs $HOME/functest/results/ODL
-
- # save tempest.conf for further troubleshooting
- cp $HOME/.rally/tempest/for-deployment-*/tempest.conf $HOME/functest/results
-
- # cleanup
- # source openstack vars
- source $HOME/opnfv-openrc.sh
- python $WORKSPACE/testcases/config_functest.py --debug --force $WORKSPACE/ clean
-
-- job-template:
- name: functest-openstack-bench-test-{pod}
-
- project-type: freestyle
-
- node: '{pod}'
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - shell: |
- #!/bin/bash
- set +e
-
- echo "Functest: run Functest Rally Bench suites"
- python $WORKSPACE/testcases/VIM/OpenStack/CI/libraries/run_rally.py --debug $WORKSPACE/ all
-
-- job-template:
- name: functest-openstack-tempest-smoke-test-{pod}
-
- project-type: freestyle
-
- node: '{pod}'
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - shell: |
- #!/bin/bash
- set +e
-
- # tempest
- echo "Functest: run Tempest suite"
- rally verify start smoke
- rally verify list
-
-- job-template:
- name: functest-odl-test-{pod}
-
- project-type: freestyle
-
- node: '{pod}'
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - shell: |
- #!/bin/bash
- set +e
-
- echo "Functest: run ODL suite"
- $WORKSPACE/testcases/Controllers/ODL/CI/start_tests.sh
-
-- job-template:
- name: functest-vims-test-{pod}
-
- project-type: freestyle
-
- node: '{pod}'
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - shell: |
- echo "put your CI scenario here"
-
-
-- job-template:
- name: functest-vping-test-{pod}
-
- project-type: freestyle
-
- node: '{pod}'
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - shell: |
- #!/bin/bash
- set +e
-
- # vPing
- echo "Functest: run vPing"
- python $WORKSPACE/testcases/vPing/CI/libraries/vPing.py --debug $WORKSPACE/ -r
-
-- job-template:
- name: functest-{pod}
-
- project-type: freestyle
-
- node: '{pod}'
-
- parameters:
- - project-parameter:
- project: '{project}'
- - string:
- name: INSTALLER_TYPE
- default: '{installer_type}'
- description: "Installer name that is used for deployment."
- - string:
- name: INSTALLER_IP
- default: '{installer_ip}'
- description: "Installer IP."
- - '{pod}'
-
- scm:
- - git-scm:
- credentials-id: '{ssh-credentials}'
- refspec: ''
- branch: master
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - 'functest-fetch-os-creds'
- - 'functest-all'
- - 'functest-store-results'
- - 'functest-cleanup'
+ name: 'functest-{installer}-{pod}-{testsuite}-{stream}'
-- job-template:
- name: functest-{installer}-{stream}
-
- project-type: freestyle
-
- node: '{node}'
-
- parameters:
- - project-parameter:
- project: '{project}'
- - string:
- name: INSTALLER_TYPE
- default: '{installer_type}'
- description: "Installer name that is used for deployment."
- - string:
- name: INSTALLER_IP
- default: '{installer_ip}'
- description: "Installer IP."
- - string:
- name: GIT_BASE
- default: ssh://gerrit.opnfv.org:29418/$PROJECT
- description: "Override GIT_BASE"
-
- scm:
- - git-scm:
- credentials-id: '{ssh-credentials}'
- refspec: ''
- branch: master
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
- builders:
- - 'functest-fetch-os-creds'
- - 'functest-all'
- - 'functest-store-results'
- - 'functest-cleanup'
-
-- job-template:
- name: 'functest-daily-{stream}'
-
- node: master
-
- # Job template for daily builders
- #
- # Required Variables:
- # stream: branch with - in place of / (eg. stable)
- # branch: branch (eg. stable)
-
- project-type: freestyle
- varsetabove: '{somevar}'
-
- logrotate:
- daysToKeep: '{build-days-to-keep}'
- numToKeep: '{build-num-to-keep}'
- artifactDaysToKeep: '{build-artifact-days-to-keep}'
- artifactNumToKeep: '{build-artifact-num-to-keep}'
+ wrappers:
+ - build-name:
+ name: '$BUILD_NUMBER: $FUNCTEST_SUITE_NAME'
parameters:
- project-parameter:
project: '{project}'
- - functest-parameter:
- gs-pathname: '{gs-pathname}'
+ - '{pod}-defaults'
+ - '{installer}-defaults'
+ - 'functest-{testsuite}-parameter'
+ - functest-parameter
scm:
- git-scm:
credentials-id: '{ssh-credentials}'
refspec: ''
- branch: '{stream}'
-
- wrappers:
- - ssh-agent-credentials:
- user: '{ssh-credentials}'
-
- triggers:
- - 'functest-{stream}'
-
- prebuilders:
- - test-macro
+ branch: '{branch}'
builders:
- - shell:
- !include-raw ../opnfvdocs/docu-build.sh
-
- postbuilders:
- - test-macro
+ - 'functest-{testsuite}-builder'
- job-template:
name: 'functest-verify-{stream}'
- node: master
-
- project-type: freestyle
-
- logrotate:
- daysToKeep: 30
- numToKeep: 10
- artifactDaysToKeep: -1
- artifactNumToKeep: -1
-
parameters:
- project-parameter:
project: '{project}'
refspec: '$GERRIT_REFSPEC'
choosing-strategy: 'gerrit'
- wrappers:
- - ssh-agent-credentials:
- user: '{ssh-credentials}'
-
triggers:
- gerrit:
trigger-on:
branch-pattern: '**/{branch}'
builders:
- - shell:
- !include-raw ../opnfvdocs/docu-build.sh
-
-- job-template:
- name: 'functest-merge-{stream}'
-
- node: master
-
- # builder-merge job to run JJB update
- #
- # This job's purpose is to update all the JJB
-
- project-type: freestyle
-
- logrotate:
- daysToKeep: 30
- numToKeep: 40
- artifactDaysToKeep: -1
- artifactNumToKeep: 5
-
- parameters:
- - project-parameter:
- project: '{project}'
- - gerrit-parameter:
- branch: '{branch}'
-
- scm:
- - gerrit-trigger-scm:
- credentials-id: '{ssh-credentials}'
- refspec: ''
- choosing-strategy: 'default'
-
- wrappers:
- - ssh-agent-credentials:
- user: '{ssh-credentials}'
-
- triggers:
- - gerrit:
- trigger-on:
- - change-merged-event
- - comment-added-contains-event:
- comment-contains-value: 'remerge'
- projects:
- - project-compare-type: 'ANT'
- project-pattern: 'functest'
- branches:
- - branch-compare-type: 'ANT'
- branch-pattern: '**/{branch}'
-
- builders:
- - shell:
- !include-raw ../opnfvdocs/docu-build.sh
+ - shell: |
+ echo "Nothing to verify!"
########################
# parameter macros
########################
- parameter:
- name: functest-parameter
+ name: functest-daily-parameter
parameters:
- string:
- name: GS_PATHNAME
- default: '{gs-pathname}'
- description: "Version directory where the opnfv documents will be stored in gs repository"
-
+ name: FUNCTEST_SUITE_NAME
+ default: 'daily'
+ description: "Suite name to run"
- parameter:
- name: orange-build
+ name: functest-suite-parameter
parameters:
- - string:
- name: GIT_BASE
- default: https://gerrit.opnfv.org/gerrit/$PROJECT
- description: "Override GIT_BASE"
-
+ - choice:
+ name: FUNCTEST_SUITE_NAME
+ choices:
+ - 'tempest'
+ - 'rally'
+ - 'odl'
+ - 'vims'
+ - 'vping'
- parameter:
- name: opnfv-jump-1
+ name: functest-parameter
parameters:
- string:
- name: GIT_BASE
- default: ssh://gerrit.opnfv.org:29418/$PROJECT
- description: "Override GIT_BASE"
-
-- parameter:
- name: opnfv-jump-2
- parameters:
+ name: GS_PATHNAME
+ default: '{gs-pathname}'
+ description: "Version directory where the opnfv documents will be stored in gs repository"
- string:
- name: GIT_BASE
- default: ssh://gerrit.opnfv.org:29418/$PROJECT
- description: "Override GIT_BASE"
+ name: FUNCTEST_REPO_DIR
+ default: "/home/opnfv/repos/functest"
+ description: "Directory where the Functest repository is cloned"
+ - string:
+ name: PUSH_RESULTS_TO_DB
+ default: "true"
+ description: "Push the results of all the tests to the resultDB"
########################
# trigger macros
########################
name: 'functest-master'
triggers:
- pollscm: "H 9 * * *"
-
-- trigger:
- name: 'functest-stable-arno'
- triggers:
- - pollscm: "H 21 * * *"
-
########################
# builder macros
########################
-# macros
- builder:
- name: functest-all
+ name: functest-daily-builder
+ builders:
+ - 'functest-cleanup'
+ - 'set-functest-env'
+ - 'functest-all'
+ - 'functest-store-results'
+
+- builder:
+ name: functest-suite-builder
builders:
- shell: |
#!/bin/bash
set +e
-
- echo "Functest: prepare Functest environment"
- mkdir -p $HOME/functest/
-
- # source openstack vars
- if [ ! -f $HOME/opnfv-openrc.sh ]; then
- echo "Credentials file not found in "$HOME/opnfv-openrc.sh
- exit 1
+ flag=""
+ if [ "${PUSH_RESULTS_TO_DB}" == "true" ]; then
+ flag="-r"
fi
- echo "Sourcing the OpenStack credentials in"$HOME/opnfv-openrc.sh
- source $HOME/opnfv-openrc.sh
+ echo "Functest: run $FUNCTEST_SUITE_NAME"
+ cmd="${FUNCTEST_REPO_DIR}/docker/run_tests.sh --test $FUNCTEST_SUITE_NAME ${flag}"
+ container_id=$(docker ps -a | grep opnfv/functest | awk '{print $1}' | head -1)
+ docker exec $container_id $cmd
- # WORKSPACE is the root of the functest repo
- # go into WORKSPACE where the functest repo is cloned
- cd $WORKSPACE
+- builder:
+ name: functest-all
+ builders:
+ - shell: |
+ #!/bin/bash
+ set +e
+ flag=""
+ if [ "${PUSH_RESULTS_TO_DB}" == "true" ]; then
+ flag="-r"
+ fi
+ echo "Functest: running all the tests"
+ cmd="${FUNCTEST_REPO_DIR}/docker/run_tests.sh ${flag}"
+ container_id=$(docker ps -a | grep opnfv/functest | awk '{print $1}' | head -1)
+ docker exec $container_id $cmd
- # prepare
- echo "Functest: prepare Functest environment"
- python $WORKSPACE/testcases/config_functest.py --debug $WORKSPACE/ start
- if [ $? != 0 ]; then
- echo "Error when configuring Functest environment"
+- builder:
+ name: set-functest-env
+ builders:
+ - shell: |
+ #!/bin/bash
+ set +e
+ # labconfig is used only for joid
+ labconfig=""
+ if [[ ${INSTALLER_TYPE} == 'apex' ]]; then
+ INSTALLER_IP=$(grep instack /var/lib/libvirt/dnsmasq/default.leases \
+ |awk '{print $3}' | head -n 1)
+ sshkey="-v /root/.ssh/id_rsa:/root/.ssh/id_rsa"
+ sudo iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
+ sudo iptables -D FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
+ elif [[ ${INSTALLER_TYPE} == 'joid' ]]; then
+ # If production lab then creds may be retrieved dynamically
+ # creds are on the jumphost, always in the same folder
+ labconfig="-v /home/ubuntu/joid/ci/cloud/admin-openrc:/home/opnfv/functest/conf/openstack.creds"
+ # If dev lab, credentials may not be the default ones, just provide a path to put them into docker
+ # replace the default one by the customized one provided by jenkins config
+ if [ -n "${LAB_CONFIG}" ]; then
+ labconfig="-v ${LAB_CONFIG}:/home/opnfv/functest/conf/openstack.creds"
+ fi
+ fi
+ echo "Functest: Start Docker and prepare environment"
+ envs="INSTALLER_TYPE=${INSTALLER_TYPE} -e INSTALLER_IP=${INSTALLER_IP} -e NODE_NAME=${NODE_NAME}"
+
+ dir_result="${HOME}/opnfv/functest/reports"
+ mkdir -f ${dir_result}
+ rm -rf ${dir_result}/*
+ $res_volume="-v ${dir_result}:/home/opnfv/functest/results"
+
+ docker pull opnfv/functest:latest_stable
+ cmd="docker run -id -e $envs ${labconfig} ${sshkey} ${res_volume} opnfv/functest:latest_stable /bin/bash"
+ echo "Functest: Running docker run command: ${cmd}"
+ ${cmd}
+ docker ps -a
+ sleep 5
+ container_id=$(docker ps | grep 'opnfv/functest:latest_stable' | awk '{print $1}' | head -1)
+ echo "Container ID=${container_id}"
+ if [ -z ${container_id} ]; then
+ echo "Cannot find opnfv/functest container ID ${container_id}. Please check if it is existing."
+ docker ps -a
exit 1
fi
-
- # vPing
- echo "Functest: run vPing"
- python $WORKSPACE/testcases/vPing/CI/libraries/vPing.py --debug $WORKSPACE/ -r
-
- # ODL
- echo "Functest: run ODL suite"
- public_ip=$(env | grep OS_AUTH_URL | cut -f3 -d"/" | cut -f1 -d":")
- echo "Functest: public IP is ${public_ip}"
- if [ $INSTALLER_TYPE == "fuel" ]; then
- odl_port=8181
- elif [ $INSTALLER_TYPE == "foreman" ]; then
- odl_port=8081
- else
- echo "INSTALLER_TYPE not valid."
+ echo "Starting the container: docker start ${container_id}"
+ docker start ${container_id}
+ sleep 5
+ docker ps
+ if [ $(docker ps | grep 'opnfv/functest:latest_stable' | wc -l) == 0 ]; then
+ echo "The container opnfv/functest with ID=${container_id} has not been properly started. Exiting..."
exit 1
fi
- ODL_PORT=$odl_port ODL_IP=$public_ip NEUTRON_IP=$public_ip USR_NAME=admin PASS=admin \
- $WORKSPACE/testcases/Controllers/ODL/CI/start_tests.sh
-
- # rally
- echo "Functest: run Functest Rally Bench suites"
- python $WORKSPACE/testcases/VIM/OpenStack/CI/libraries/run_rally.py --debug $WORKSPACE/ all
-
- # tempest
- echo "Functest: run Tempest suite"
- rally verify start smoke
- rally verify list
-
- # collect results
- echo "Functest: copy results and clean Functest environment"
- mkdir -p $HOME/functest/results
-
- # save ODL results
- cp -Rf $WORKSPACE/testcases/Controllers/ODL/CI/logs $HOME/functest/results/ODL
-
- # save tempest.conf for further troubleshooting
- cp $HOME/.rally/tempest/for-deployment-*/tempest.conf $HOME/functest/results
+ cmd="${FUNCTEST_REPO_DIR}/docker/prepare_env.sh"
+ echo "Executing command inside the docker: ${cmd}"
+ docker exec ${container_id} ${cmd}
- builder:
name: functest-store-results
builders:
- shell: |
#!/bin/bash
- set +e
- # cleanup
- source $HOME/opnfv-openrc.sh
- python $WORKSPACE/testcases/config_functest.py --debug --force $WORKSPACE/ clean
+ echo "Cleaning up docker containers/images..."
-- builder:
- name: functest-fetch-os-creds
- builders:
- - shell:
- !include-raw ../../utils/fetch_os_creds.sh
+ # Remove previous running containers if exist
+ if [[ ! -z $(docker ps -a | grep opnfv/functest) ]]; then
+ echo "Removing existing opnfv/functest containers..."
+ docker ps | grep opnfv/functest | awk '{print $1}' | xargs docker stop
+ docker ps -a | grep opnfv/functest | awk '{print $1}' | xargs docker rm
+ fi
+
+ # Remove existing images if exist
+ if [[ ! -z $(docker images | grep opnfv/functest) ]]; then
+ echo "Docker images to remove:"
+ docker images | head -1 && docker images | grep opnfv/functest
+ image_tags=($(docker images | grep opnfv/functest | awk '{print $2}'))
+ for tag in "${image_tags[@]}"; do
+ echo "Removing docker image opnfv/functest:$tag..."
+ docker rmi opnfv/functest:$tag
+ done
+ fi