blob: 88bb73a3b0e0df01fae7926e78602f8879c4431e [file] [log] [blame]
Hanna Arhipovab0bfccd2020-01-15 11:19:00 +02001/**
2 *
3 * Deploy the product cluster using Jenkins master on CICD cluster
4 *
5 * Expected parameters:
6 * STACKS List of deployments from 'all physical' view in the Jenkins
7 They should be separated by newline
8 * PARENT_NODE_NAME
9 * OS_AUTH_URL OpenStack keystone catalog URL
10 * OS_PROJECT_NAME OpenStack project (tenant) name
11 * OS_CREDENTIALS OpenStack username and password credentials ID in Jenkins
12
13 * TCP_QA_REFS Reference to the tcp-qa change on Gerrit, like refs/changes/46/418546/41
14 */
15@Library('tcp-qa')_
16
17common = new com.mirantis.mk.Common()
18shared = new com.mirantis.system_qa.SharedPipeline()
19import jenkins.model.*
20
21def stacks = env.STACKS.readLines()
22
23def get_last_build_time(job_name) {
24 def job = Hudson.instance.getJob(job_name)
25 def last_build = Jenkins.instance.getItemByFullName(job.fullName).getLastBuild()
26 if (last_build == null) {
27 return null
28 }
29 def upStreamBuild = Jenkins.getInstance().getItemByFullName(job.fullName).getBuildByNumber(last_build.getNumber())
30 return upStreamBuild.getTime()
31}
32
33@NonCPS
34def oldest_job(map) {
35 return map.sort({a, b -> a.value <=> b.value})*.key[0]
36}
37
38// ============================================================================
39timeout(time: 15, unit: 'HOURS') {
40 node (env.PARENT_NODE_NAME) {
41 stage("Remove extra stacks") {
42 withCredentials([
43 [$class : 'UsernamePasswordMultiBinding',
44 credentialsId : env.OS_CREDENTIALS,
45 passwordVariable: 'OS_PASSWORD',
46 usernameVariable: 'OS_USERNAME']
47 ]) {
48 env.OS_IDENTITY_API_VERSION = 3
49 for (stack_name in stacks) {
50 shared.run_cmd("""
Sergey Galkin320e0622020-01-27 17:52:26 +040051 export OS_IDENTITY_API_VERSION=3
52 export OS_AUTH_URL=${OS_AUTH_URL}
53 export OS_USERNAME=${OS_USERNAME}
54 export OS_PASSWORD=${OS_PASSWORD}
55 export OS_PROJECT_NAME=${OS_PROJECT_NAME}
56 export OS_USER_DOMAIN_NAME=ldap_mirantis
Hanna Arhipovab0bfccd2020-01-15 11:19:00 +020057 openstack --insecure stack delete -y ${stack_name} || true
58 timeout 20m /bin/bash -c "while openstack --insecure stack show ${stack_name} -f value -c stack_status; do sleep 10; done";
59 """)
60 }
61 }
62 }
63
64 stage("Start deployment") {
65 def jobs_map = [:]
66 for (stack_name in stacks) {
67 jobs_map.put ("${stack_name}", get_last_build_time(stack_name))
68 }
69 stack_to_deploy = oldest_job(jobs_map)
70
71 println "Build ${stack_to_deploy}"
72 currentBuild.description = "${stack_to_deploy}"
73 // Trigger job
74 def deploy = build job: "${stack_to_deploy}",
Hanna Arhipova95659432020-01-28 14:24:02 +020075 parameters: [
Hanna Arhipovab0bfccd2020-01-15 11:19:00 +020076 string(name: 'PARENT_NODE_NAME', value: env.PARENT_NODE_NAME),
77 string(name: 'OS_CREDENTIALS', value: env.OS_CREDENTIALS),
78 string(name: 'TCP_QA_REFS', value: env.TCP_QA_REFS)
79 ]
80 }
81 }
82}