Add flag in functest tests to force pushing the results to the DB
[releng.git] / jjb / functest / functest.yml
index d2a5bc9..c77a1fa 100644 (file)
+###################################
+# job configuration for functest
+###################################
 - project:
     name: functest
 
+    project: '{name}'
+
     pod:
-        - 'opnfv-jump-1'
-        - 'opnfv-jump-2'
+        - opnfv-jump-1:
+            installer: apex
+        - opnfv-jump-2:
+            installer: fuel
+        - orange-test1:
+            installer: fuel
+        - orange-pod2:
+            installer: joid
+        - huawei-us-deploy-bare-1:
+            installer: compass4nfv
+        - intel-pod5:
+            installer: joid
+
+    testsuite:
+        - 'daily'
+        - 'suite'
+
     jobs:
-        - 'functest-{pod}'
-        - 'functest-openstack-bench-test'
-        - 'functest-openstack-tempest-smoke-test'
-        - 'functest-odl-test'
-        - 'functest-vims-test'
-        - 'functest-vping-test'
-        - 'functest-daily-{stream}'
-        - 'functest-merge'
-        - 'functest-verify'
+        - 'functest-{installer}-{pod}-{testsuite}-{stream}'
+        - 'functest-verify-{stream}'
 
-    # stream:    branch with - in place of / (eg. stable-helium)
-    # branch:    branch (eg. stable/helium)
     stream:
         - master:
             branch: 'master'
-
-    project: 'functest'
-    somevar: 'foo'
-
-- job-template:
-    name: functest-openstack-bench-test
-
-    project-type: freestyle
-
-    node: opnfv-jump-2
-
-    logrotate:
-        daysToKeep: 30
-        numToKeep: 10
-        artifactDaysToKeep: -1
-        artifactNumToKeep: -1
-
-    builders:
-        - shell: |
-            python $HOME/.functest/run_rally.py all
-
-- job-template:
-    name: functest-openstack-tempest-smoke-test
-
-    project-type: freestyle
-
-    node: opnfv-jump-2
-
-    logrotate:
-        daysToKeep: 30
-        numToKeep: 10
-        artifactDaysToKeep: -1
-        artifactNumToKeep: -1
-
-    builders:
-        - shell: |
-            rally verify start smoke
-            rally verify list
-
-- job-template:
-    name: functest-odl-test
-
-    project-type: freestyle
-
-    node: opnfv-jump-2
-
-    logrotate:
-        daysToKeep: 30
-        numToKeep: 10
-        artifactDaysToKeep: -1
-        artifactNumToKeep: -1
-
-    builders:
-        - shell: |
-            echo "put your CI scenario here"
-
-- job-template:
-    name: functest-vims-test
-
-    project-type: freestyle
-
-    node: opnfv-jump-2
-
-    logrotate:
-        daysToKeep: 30
-        numToKeep: 10
-        artifactDaysToKeep: -1
-        artifactNumToKeep: -1
-
-    builders:
-        - shell: |
-            echo "put your CI scenario here"
-
-
-- job-template:
-    name: functest-vping-test
-
-    project-type: freestyle
-
-    node: opnfv-jump-2
-
-    logrotate:
-        daysToKeep: 30
-        numToKeep: 10
-        artifactDaysToKeep: -1
-        artifactNumToKeep: -1
-
-    builders:
-        - shell: |
-            python $HOME/.functest/vPing/vPing.py
-
-- job-template:
-    name: functest-{pod}
-
-    project-type: freestyle
-
-    node: '{pod}'
-
-    parameters:
-        - project-parameter:
-            project: '{project}'
-
-    scm:
-        - git-scm:
-            credentials-id: '{ssh-credentials}'
-            refspec: ''
-            branch: master
-
-    logrotate:
-        daysToKeep: 30
-        numToKeep: 10
-        artifactDaysToKeep: -1
-        artifactNumToKeep: -1
-
-    builders:
-        - 'functest-all'
-
+            gs-pathname: ''
+#        - brahmaputra:
+#            branch: 'stable/brahmaputra'
+#            gs-pathname: '/brahmaputra'
+
+################################
+# job template
+################################
 - 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)
+    name: 'functest-{installer}-{pod}-{testsuite}-{stream}'
 
-    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}'
+        - '{pod}-defaults'
+        - '{installer}-defaults'
+        - 'functest-{testsuite}-parameter'
+        - functest-parameter
 
     scm:
         - git-scm:
             refspec: ''
             branch: '{branch}'
 
-    wrappers:
-        - ssh-agent-credentials:
-            user: '{ssh-credentials}'
-
-    triggers:
-        - timed: 'H H * * *'
-
-    prebuilders:
-        - test-macro
-
     builders:
-        - shell:
-            !include-raw docu-build.sh
-
-    postbuilders:
-        - test-macro
+        - 'functest-{testsuite}-builder'
 
 - job-template:
-    name: 'functest-verify'
-
-    node: master
-
-    project-type: freestyle
-
-    logrotate:
-        daysToKeep: 30
-        numToKeep: 10
-        artifactDaysToKeep: -1
-        artifactNumToKeep: -1
+    name: 'functest-verify-{stream}'
 
     parameters:
         - project-parameter:
             project: '{project}'
         - gerrit-parameter:
-            branch: 'master'
+            branch: '{branch}'
     scm:
         - gerrit-trigger-scm:
             credentials-id: '{ssh-credentials}'
             refspec: '$GERRIT_REFSPEC'
             choosing-strategy: 'gerrit'
 
-    wrappers:
-        - ssh-agent-credentials:
-            user: '{ssh-credentials}'
-
     triggers:
         - gerrit:
             trigger-on:
                 project-pattern: 'functest'
                 branches:
                   - branch-compare-type: 'ANT'
-                    branch-pattern: '**/master'
+                    branch-pattern: '**/{branch}'
 
     builders:
-        - shell:
-            !include-raw docu-verify.sh
-
-- job-template:
-    name: 'functest-merge'
-
-    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
+        - shell: |
+            echo "Nothing to verify!"
 
+########################
+# parameter macros
+########################
+- parameter:
+    name: functest-daily-parameter
     parameters:
-        - project-parameter:
-            project: '{project}'
-        - gerrit-parameter:
-            branch: 'master'
-
-    scm:
-        - gerrit-trigger-scm:
-            credentials-id: '{ssh-credentials}'
-            refspec: ''
-            choosing-strategy: 'default'
-
-    wrappers:
-        - ssh-agent-credentials:
-            user: '{ssh-credentials}'
-
+        - string:
+            name: FUNCTEST_SUITE_NAME
+            default: 'daily'
+            description: "Suite name to run"
+- parameter:
+    name: functest-suite-parameter
+    parameters:
+        - choice:
+            name: FUNCTEST_SUITE_NAME
+            choices:
+                - 'tempest'
+                - 'rally'
+                - 'odl'
+                - 'vims'
+                - 'vping'
+- parameter:
+    name: functest-parameter
+    parameters:
+        - string:
+            name: GS_PATHNAME
+            default: '{gs-pathname}'
+            description: "Version directory where the opnfv documents will be stored in gs repository"
+        - string:
+            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
+########################
+- trigger:
+    name: 'functest-master'
     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: '**/master'
+        - pollscm: "H 9 * * *"
+########################
+# builder macros
+########################
+- builder:
+    name: functest-daily-builder
+    builders:
+        - 'functest-cleanup'
+        - 'set-functest-env'
+        - 'functest-all'
+#        - 'functest-store-results'
 
+- builder:
+    name: functest-suite-builder
     builders:
-        - shell:
-            !include-raw docu-build.sh
+        - shell: |
+            #!/bin/bash
+            set +e
+            flag=""
+            if [ "${PUSH_RESULTS_TO_DB}" == "true" ]; then
+                flag="-r"
+            fi
+            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
 
-# macros
 - 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
 
-            echo "Functest: prepare Functest environment"
-            mkdir -p $HOME/functest/
-            source $HOME/functest/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
-
-            # vPing
-            echo "Functest: run vPing"
-            python $WORKSPACE/testcases/vPing/CI/libraries/vPing.py --debug $WORKSPACE/
-
-            # ODL
-            echo "Functest: run ODL suite"
-            $WORKSPACE/testcases/Controllers/ODL/CI/start_tests.sh
-
-            # tempest
-            echo "Functest: run Tempest suite"
-            rally verify start smoke
-            rally verify list
-
-            # rally
-            echo "Functest: run Functest Rally Bench suites"
-            python $WORKSPACE/testcases/VIM/OpenStack/CI/libraries/run_rally.py --debug $WORKSPACE/ all
+- builder:
+    name: set-functest-env
+    builders:
+        - shell: |
+            #!/bin/bash
+            set +e
+            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"
+            fi
+            echo "Functest: Start Docker and prepare environment"
+            envs="INSTALLER_TYPE=${INSTALLER_TYPE} -e INSTALLER_IP=${INSTALLER_IP} -e NODE_NAME=${NODE_NAME}"
+            labconfig=""
+            # If production lab then creds may be retrieved dynamically
+            # If dev lab, credentials may not be the default ones, just provide a path to put them into docker
+            if [ -n "${LAB_CONFIG}" ]; then
+                labconfig="-v ${LAB_CONFIG}:/home/opnfv/functest/conf/openstack.creds"
+            fi
+
+            docker pull opnfv/functest:latest_stable
+            cmd="docker run -id -e $envs ${labconfig} ${sshkey} 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
+            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
+            cmd="${FUNCTEST_REPO_DIR}/docker/prepare_env.sh"
+            echo "Executing command inside the docker: ${cmd}"
+            docker exec ${container_id} ${cmd}
 
-            # collect results
-            echo "Functest: copy results and clean Functest environment"
-            mkdir -p $HOME/functest/results
+- builder:
+    name: functest-store-results
+    builders:
+        - shell:
+            !include-raw res-build.sh
 
-            # save tempest.conf for further troubleshooting
-            cp $HOME/.rally/tempest/for-deployment-*/tempest.conf $HOME/functest/results
+- builder:
+    name: functest-cleanup
+    builders:
+        - shell: |
+            #!/bin/bash
 
-            # cleanup
-            python $WORKSPACE/testcases/config_functest.py --debug --force $WORKSPACE/ clean
+            echo "Cleaning up docker containers/images..."
+
+            # 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