| Dennis Dmitriev | b3b3749 | 2018-07-08 21:23:00 +0300 | [diff] [blame] | 1 | /** | 
 | 2 |  * | 
 | 3 |  * Deploy the product cluster using Jenkins master on CICD cluster | 
 | 4 |  * | 
 | 5 |  * Expected parameters: | 
 | 6 |  | 
 | 7 |  *   PARENT_NODE_NAME              Name of the jenkins slave to create the environment | 
 | 8 |  *   PARENT_WORKSPACE              Path to the workspace of the parent job to use tcp-qa repo | 
 | 9 |  *   ENV_NAME                      Fuel-devops environment name | 
 | 10 |  *   STACK_INSTALL                 Stacks to install using Jenkins on CICD cluster: "openstack:3200,stacklight:2400", where 3200 and 2400 are timeouts | 
 | 11 |  *   TCP_QA_REFS                   Reference to the tcp-qa change on review.gerrithub.io, like refs/changes/46/418546/41 | 
 | 12 |  *   SHUTDOWN_ENV_ON_TEARDOWN      optional, shutdown fuel-devops environment at the end of the job | 
 | 13 |  * | 
 | 14 |  */ | 
 | 15 |  | 
 | 16 | @Library('tcp-qa')_ | 
 | 17 |  | 
 | 18 | common = new com.mirantis.mk.Common() | 
 | 19 | shared = new com.mirantis.system_qa.SharedPipeline() | 
 | 20 |  | 
 | 21 | if (! env.PARENT_NODE_NAME) { | 
 | 22 |     error "'PARENT_NODE_NAME' must be set from the parent deployment job!" | 
 | 23 | } | 
 | 24 |  | 
| Dennis Dmitriev | 201a35e | 2018-08-06 01:37:05 +0300 | [diff] [blame] | 25 | currentBuild.description = "${PARENT_NODE_NAME}:${ENV_NAME}" | 
 | 26 |  | 
| Dennis Dmitriev | b3b3749 | 2018-07-08 21:23:00 +0300 | [diff] [blame] | 27 | node ("${PARENT_NODE_NAME}") { | 
 | 28 |     if (! fileExists("${PARENT_WORKSPACE}")) { | 
 | 29 |         error "'PARENT_WORKSPACE' contains path to non-existing directory ${PARENT_WORKSPACE} on the node '${PARENT_NODE_NAME}'." | 
 | 30 |     } | 
 | 31 |     dir("${PARENT_WORKSPACE}") { | 
 | 32 |         try { | 
 | 33 |  | 
 | 34 |             if (! env.STACK_INSTALL) { | 
 | 35 |                 error "'STACK_INSTALL' must contain one or more comma separated stack names for [deploy_openstack] pipeline" | 
 | 36 |             } | 
 | 37 |  | 
| Dennis Dmitriev | eb50ce1 | 2018-09-27 13:34:32 +0300 | [diff] [blame] | 38 |             if (env.TCP_QA_REFS) { | 
 | 39 |                 stage("Update working dir to patch ${TCP_QA_REFS}") { | 
 | 40 |                     shared.update_working_dir() | 
 | 41 |                 } | 
 | 42 |             } | 
 | 43 |  | 
| Dennis Dmitriev | b3b3749 | 2018-07-08 21:23:00 +0300 | [diff] [blame] | 44 |             // Install the cluster | 
 | 45 |             def stack | 
 | 46 |             def timeout | 
 | 47 |  | 
 | 48 |             for (element in "${STACK_INSTALL}".split(",")) { | 
 | 49 |                 if (element.contains(':')) { | 
 | 50 |                     (stack, timeout) = element.split(':') | 
 | 51 |                 } else { | 
 | 52 |                     stack = element | 
 | 53 |                     timeout = '1800' | 
 | 54 |                 } | 
 | 55 |                 stage("Run Jenkins job on CICD [deploy_openstack:${stack}]") { | 
 | 56 |                     shared.run_job_on_cicd_nodes(stack, timeout) | 
 | 57 |                 } | 
 | 58 |  | 
 | 59 |                 stage("Sanity check the deployed component [${stack}]") { | 
 | 60 |                     shared.sanity_check_component(stack) | 
 | 61 |                 } | 
 | 62 |  | 
 | 63 |                 stage("Make environment snapshot [${stack}_deployed]") { | 
 | 64 |                     shared.devops_snapshot(stack) | 
 | 65 |                 } | 
 | 66 |             } | 
 | 67 |  | 
 | 68 |         } catch (e) { | 
| Dennis Dmitriev | eb50ce1 | 2018-09-27 13:34:32 +0300 | [diff] [blame] | 69 |             common.printMsg("Job is failed", "red") | 
| Dennis Dmitriev | b3b3749 | 2018-07-08 21:23:00 +0300 | [diff] [blame] | 70 |             throw e | 
 | 71 |         } finally { | 
 | 72 |             // TODO(ddmitriev): analyze the "def currentResult = currentBuild.result ?: 'SUCCESS'" | 
 | 73 |             // and report appropriate data to TestRail | 
 | 74 |             // TODO(ddmitriev): add checks for the installed stacks | 
 | 75 |             if ("${env.SHUTDOWN_ENV_ON_TEARDOWN}" == "true") { | 
 | 76 |                 shared.run_cmd("""\ | 
 | 77 |                     dos.py destroy ${ENV_NAME} | 
 | 78 |                 """) | 
 | 79 |             } | 
 | 80 |         } | 
 | 81 |     } | 
 | 82 | } |