5fea389ba9e83d737c4dafb20b280a241d785961
[releng.git] / jjb / functest / functest-ci-jobs.yml
1 ###################################
2 # job configuration for functest
3 ###################################
4 - project:
5     name: functest
6
7     project: '{name}'
8
9 #--------------------------------
10 # BRANCH ANCHORS
11 #--------------------------------
12     master: &master
13         stream: master
14         branch: '{stream}'
15         gs-pathname: ''
16     brahmaputra: &brahmaputra
17         stream: brahmaputra
18         branch: 'stable/{stream}'
19         gs-pathname: '/{stream}'
20 #--------------------------------
21 # POD, INSTALLER, AND BRANCH MAPPING
22 #--------------------------------
23 #        brahmaputra
24 #--------------------------------
25     pod:
26         - opnfv-jump-2:
27             installer: fuel
28             <<: *brahmaputra
29         - intel-pod5:
30             installer: joid
31             <<: *brahmaputra
32         - huawei-us-deploy-bare-1:
33             installer: compass
34             <<: *brahmaputra
35         - ericsson-pod1:
36             installer: fuel
37             <<: *brahmaputra
38         - virtual:
39             installer: fuel
40             <<: *brahmaputra
41         - virtual:
42             installer: compass
43             <<: *brahmaputra
44 #--------------------------------
45 #        master
46 #--------------------------------
47         - intel-pod6:
48             installer: joid
49             <<: *master
50         - intel-pod8:
51             installer: compass
52             <<: *master
53         - opnfv-jump-1:
54             installer: apex
55             <<: *master
56         - ericsson-pod1:
57             installer: fuel
58             <<: *master
59         - ericsson-pod2:
60             installer: fuel
61             <<: *master
62         - orange-test1:
63             installer: fuel
64             <<: *master
65         - orange-pod2:
66             installer: joid
67             <<: *master
68         - virtual:
69             installer: fuel
70             <<: *master
71         - virtual:
72             installer: compass
73             <<: *master
74 #--------------------------------
75
76     testsuite:
77         - 'daily'
78         - 'suite'
79
80     jobs:
81         - 'functest-{installer}-{pod}-{testsuite}-{stream}'
82
83 ################################
84 # job template
85 ################################
86 - job-template:
87     name: 'functest-{installer}-{pod}-{testsuite}-{stream}'
88
89     wrappers:
90         - build-name:
91             name: '$BUILD_NUMBER Suite: $FUNCTEST_SUITE_NAME Scenario: $DEPLOY_SCENARIO'
92
93     parameters:
94         - project-parameter:
95             project: '{project}'
96         - '{pod}-defaults'
97         - '{installer}-defaults'
98         - 'functest-{testsuite}-parameter'
99         - string:
100             name: DEPLOY_SCENARIO
101             default: 'os-odl_l2-nofeature-ha'
102         - functest-parameter:
103             gs-pathname: '{gs-pathname}'
104
105     scm:
106         - git-scm:
107             credentials-id: '{ssh-credentials}'
108             refspec: ''
109             branch: '{branch}'
110
111     builders:
112         - 'functest-{testsuite}-builder'
113
114 ########################
115 # parameter macros
116 ########################
117 - parameter:
118     name: functest-daily-parameter
119     parameters:
120         - string:
121             name: FUNCTEST_SUITE_NAME
122             default: 'daily'
123             description: "Suite name to run"
124 - parameter:
125     name: functest-suite-parameter
126     parameters:
127         - choice:
128             name: FUNCTEST_SUITE_NAME
129             choices:
130                 - 'tempest'
131                 - 'rally'
132                 - 'odl'
133                 - 'onos'
134                 - 'ovno'
135                 - 'promise'
136                 - 'doctor'
137                 - 'vims'
138                 - 'vping'
139 - parameter:
140     name: functest-parameter
141     parameters:
142         - string:
143             name: GS_PATHNAME
144             default: '{gs-pathname}'
145             description: "Version directory where the opnfv documents will be stored in gs repository"
146         - string:
147             name: FUNCTEST_REPO_DIR
148             default: "/home/opnfv/repos/functest"
149             description: "Directory where the Functest repository is cloned"
150         - string:
151             name: PUSH_RESULTS_TO_DB
152             default: "true"
153             description: "Push the results of all the tests to the resultDB"
154         - string:
155             name: CI_DEBUG
156             default: 'false'
157             description: "Show debug output information"
158 ########################
159 # trigger macros
160 ########################
161 - trigger:
162     name: 'functest-master'
163     triggers:
164         - pollscm:
165             cron: "H 9 * * *"
166 ########################
167 # builder macros
168 ########################
169 - builder:
170     name: functest-daily-builder
171     builders:
172         - 'functest-cleanup'
173         - 'set-functest-env'
174         - 'functest-all'
175         - 'functest-store-results'
176
177 - builder:
178     name: functest-suite-builder
179     builders:
180         - shell: |
181             #!/bin/bash
182             set +e
183             flag=""
184             if [ "${PUSH_RESULTS_TO_DB}" == "true" ]; then
185                 flag="-r"
186             fi
187             echo "Functest: run $FUNCTEST_SUITE_NAME"
188             cmd="${FUNCTEST_REPO_DIR}/docker/run_tests.sh --test $FUNCTEST_SUITE_NAME ${flag}"
189             container_id=$(docker ps -a | grep opnfv/functest | awk '{print $1}' | head -1)
190             docker exec $container_id $cmd
191
192 - builder:
193     name: functest-all
194     builders:
195         - shell: |
196             #!/bin/bash
197             set +e
198             flag=""
199             if [ "${PUSH_RESULTS_TO_DB}" == "true" ]; then
200                 flag="-r"
201             fi
202             echo "Functest: running all the tests"
203             cmd="${FUNCTEST_REPO_DIR}/docker/run_tests.sh ${flag}"
204             container_id=$(docker ps -a | grep opnfv/functest | awk '{print $1}' | head -1)
205             docker exec $container_id $cmd
206
207 - builder:
208     name: set-functest-env
209     builders:
210         - shell: |
211             #!/bin/bash
212             set +e
213             [[ $CI_DEBUG == true ]] && redirect="/dev/stdout" || redirect="/dev/null"
214             # labconfig is used only for joid
215             labconfig=""
216             if [[ ${INSTALLER_TYPE} == 'apex' ]]; then
217                 instack_mac=$(sudo virsh domiflist instack | grep default | \
218                               grep -Eo "[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+")
219                 INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk {'print $1'})
220                 sshkey="-v /root/.ssh/id_rsa:/root/.ssh/id_rsa"
221                 sudo iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
222                 sudo iptables -D FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
223             elif [[ ${INSTALLER_TYPE} == 'joid' ]]; then
224                 # If production lab then creds may be retrieved dynamically
225                 # creds are on the jumphost, always in the same folder
226                 labconfig="-v $LAB_CONFIG/admin-openrc:/home/opnfv/functest/conf/openstack.creds"
227                 # If dev lab, credentials may not be the default ones, just provide a path to put them into docker
228                 # replace the default one by the customized one provided by jenkins config
229             fi
230             echo "Functest: Start Docker and prepare environment"
231             envs="-e INSTALLER_TYPE=${INSTALLER_TYPE} -e INSTALLER_IP=${INSTALLER_IP} \
232                 -e NODE_NAME=${NODE_NAME} -e DEPLOY_SCENARIO=${DEPLOY_SCENARIO} \
233                 -e CI_DEBUG=${CI_DEBUG}"
234
235             dir_result="${HOME}/opnfv/functest/reports"
236             mkdir -p ${dir_result}
237             sudo rm -rf ${dir_result}/*
238             res_volume="-v ${dir_result}:/home/opnfv/functest/results"
239
240             docker pull opnfv/functest:latest_stable >$redirect
241             cmd="sudo docker run --privileged=true -id ${envs} ${labconfig} ${sshkey} ${res_volume} opnfv/functest:latest_stable /bin/bash"
242             echo "Functest: Running docker run command: ${cmd}"
243             ${cmd}
244             docker ps -a
245             sleep 5
246             container_id=$(docker ps | grep 'opnfv/functest:latest_stable' | awk '{print $1}' | head -1)
247             echo "Container ID=${container_id}"
248             if [ -z ${container_id} ]; then
249                 echo "Cannot find opnfv/functest container ID ${container_id}. Please check if it is existing."
250                 docker ps -a
251                 exit 1
252             fi
253             echo "Starting the container: docker start ${container_id}"
254             docker start ${container_id}
255             sleep 5
256             docker ps
257             if [ $(docker ps | grep 'opnfv/functest:latest_stable' | wc -l) == 0 ]; then
258                 echo "The container opnfv/functest with ID=${container_id} has not been properly started. Exiting..."
259                 exit 1
260             fi
261             cmd="${FUNCTEST_REPO_DIR}/docker/prepare_env.sh"
262             echo "Executing command inside the docker: ${cmd}"
263             docker exec ${container_id} ${cmd}
264
265 - builder:
266     name: functest-store-results
267     builders:
268         - shell:
269             !include-raw: res-build.sh
270
271 - builder:
272     name: functest-cleanup
273     builders:
274         - shell: |
275             #!/bin/bash
276             [[ $CI_DEBUG == true ]] && redirect="/dev/stdout" || redirect="/dev/null"
277
278             echo "Cleaning up docker containers/images..."
279             # Remove previous running containers if exist
280             if [[ ! -z $(docker ps -a | grep opnfv/functest) ]]; then
281                 echo "Removing existing opnfv/functest containers..."
282                 docker ps -a | grep opnfv/functest | awk '{print $1}' | xargs docker rm -f >$redirect
283             fi
284
285             # Remove existing images if exist
286             if [[ ! -z $(docker images | grep opnfv/functest) ]]; then
287                 echo "Docker images to remove:"
288                 docker images | head -1 && docker images | grep opnfv/functest
289                 image_tags=($(docker images | grep opnfv/functest | awk '{print $2}'))
290                 for tag in "${image_tags[@]}"; do
291                     echo "Removing docker image opnfv/functest:$tag..."
292                     docker rmi opnfv/functest:$tag >$redirect
293                 done
294             fi