blob: d7d9e3243ca5696ef45250f18f963fc4c7543382 [file] [log] [blame]
Dennis Dmitrievfde667f2018-07-23 16:26:50 +03001/**
2 *
3 * Deploy the product cluster using Jenkins master on CICD cluster
4 *
5 * Expected parameters:
6
7 * ENV_NAME Fuel-devops environment name
8 * PASSED_STEPS Steps passed to install components using Jenkins on CICD cluster: "salt,core,cicd,openstack:3200,stacklight:2400",
9 where 3200 and 2400 might be timeouts (not used in the testing pipeline)
10 * RUN_TEST_OPTS Pytest option -k or -m, with expression to select necessary tests. Additional pytest options are allowed.
11 * PARENT_NODE_NAME Name of the jenkins slave to create the environment
12 * PARENT_WORKSPACE Path to the workspace of the parent job to use tcp-qa repo
13 * TCP_QA_REFS Reference to the tcp-qa change on review.gerrithub.io, like refs/changes/46/418546/41
14 * SHUTDOWN_ENV_ON_TEARDOWN optional, shutdown fuel-devops environment at the end of the job
15 * LAB_CONFIG_NAME Not used (backward compatibility, for manual deployment steps only)
16 * REPOSITORY_SUITE Not used (backward compatibility, for manual deployment steps only)
17 * MCP_IMAGE_PATH1604 Not used (backward compatibility, for manual deployment steps only)
18 * IMAGE_PATH_CFG01_DAY01 Not used (backward compatibility, for manual deployment steps only)
19 */
20
21@Library('tcp-qa')_
22
23common = new com.mirantis.mk.Common()
24shared = new com.mirantis.system_qa.SharedPipeline()
25
26if (! env.PARENT_NODE_NAME) {
27 error "'PARENT_NODE_NAME' must be set from the parent deployment job!"
28}
29
Dennis Dmitriev201a35e2018-08-06 01:37:05 +030030currentBuild.description = "${PARENT_NODE_NAME}:${ENV_NAME}"
31
Dennis Dmitrievfde667f2018-07-23 16:26:50 +030032node ("${PARENT_NODE_NAME}") {
33 if (! fileExists("${PARENT_WORKSPACE}")) {
34 error "'PARENT_WORKSPACE' contains path to non-existing directory ${PARENT_WORKSPACE} on the node '${PARENT_NODE_NAME}'."
35 }
36 dir("${PARENT_WORKSPACE}") {
37 try {
38
39 stage("Run tests") {
40 def steps = shared.get_steps_list(PASSED_STEPS)
41 def sources = """\
42 export ENV_NAME=${ENV_NAME}
43 . ./tcp_tests/utils/env_salt"""
44 if (steps.contains('k8s')) {
45 sources += """
46 . ./tcp_tests/utils/env_k8s\n"""
47 }
48 if (steps.contains('openstack')) {
49 sources += """
50 # TODO: . ./tcp_tests/utils/env_keystonercv3\n"""
51 }
52 def installed = steps.collect {"""\
53 export ${it}_installed=true"""}.join("\n")
54
55 shared.run_cmd(sources + installed + """
56 export MANAGER=devops # use 'hardware' fixture to manage fuel-devops environment
57 export salt_master_host=\$SALT_MASTER_IP # skip salt_deployed fixture
58 export salt_master_port=6969
59 export SALT_USER=\$SALTAPI_USER
60 export SALT_PASSWORD=\$SALTAPI_PASS
61
62 py.test --junit-xml=nosetests.xml ${RUN_TEST_OPTS}
63
64 dos.py suspend ${ENV_NAME}
65 dos.py snapshot ${ENV_NAME} test_completed
66 """)
67 }
68
69 } catch (e) {
70 common.printMsg("Job failed", "red")
71 throw e
72 } finally {
73 // TODO(ddmitriev): analyze the "def currentResult = currentBuild.result ?: 'SUCCESS'"
74 // and report appropriate data to TestRail
75 if ("${env.SHUTDOWN_ENV_ON_TEARDOWN}" == "true") {
76 shared.run_cmd("""\
77 dos.py destroy ${ENV_NAME}
78 """)
79 }
80 }
81 }
82}