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