Add job to deploy BM automatically
It deploys one environment from list defined in the job
Pipeline reboots HW nodes before the deployment
Change-Id: I12ab3b7c0247308ffce6e698a21ff5cda34ebb49
Related-Prod:#PROD-34545
diff --git a/jobs/templates/deploy_bm.yml b/jobs/templates/deploy_bm.yml
index 3f1d02a..3507e54 100644
--- a/jobs/templates/deploy_bm.yml
+++ b/jobs/templates/deploy_bm.yml
@@ -1,121 +1,11 @@
- job-template:
project-type: pipeline
description: '{job-description}'
- concurrent: true
+ concurrent: false
disabled: false
sandbox: true
triggers:
- timed: H(40-59) 0 * * 1-5
- dsl: |-
- /**
- *
- * Deploy the product cluster using Jenkins master on CICD cluster
- *
- * Expected parameters:
- * STACKS List of deployments from 'all physical' view in the Jenkins
- They should be separated by newline
- * PARENT_NODE_NAME
- * OS_AUTH_URL OpenStack keystone catalog URL
- * OS_PROJECT_NAME OpenStack project (tenant) name
- * OS_CREDENTIALS OpenStack username and password credentials ID in Jenkins
-
- * TCP_QA_REFS Reference to the tcp-qa change on Gerrit, like refs/changes/46/418546/41
- */
- @Library('tcp-qa')_
-
- common = new com.mirantis.mk.Common()
- shared = new com.mirantis.system_qa.SharedPipeline()
- import jenkins.model.*
-
- def stacks = env.STACKS.readLines()
-
- def get_last_build_time(job_name) {{
- def job = Hudson.instance.getJob(job_name)
- def last_build = Jenkins.instance.getItemByFullName(job.fullName).getLastBuild()
- if (last_build == null) {{
- return null
- }}
- def upStreamBuild = Jenkins.getInstance().getItemByFullName(job.fullName).getBuildByNumber(last_build.getNumber())
- return upStreamBuild.getTime()
- }}
-
- @NonCPS
- def oldest_job(map) {{
- println map.sort({{a, b -> a.value <=> b.value}})*.value
- return map.sort({{a, b -> a.value <=> b.value}})*.key[0]
- }}
-
- // ============================================================================
- timeout(time: 15, unit: 'HOURS') {{
- node (env.PARENT_NODE_NAME) {{
- stage("Remove extra stacks") {{
- withCredentials([
- [$class : 'UsernamePasswordMultiBinding',
- credentialsId : env.OS_CREDENTIALS,
- passwordVariable: 'OS_PASSWORD',
- usernameVariable: 'OS_USERNAME']
- ]) {{
- env.OS_IDENTITY_API_VERSION = 3
- for (stack_name in stacks) {{
- shared.run_cmd("""
- # export OS_IDENTITY_API_VERSION=3
- # export OS_AUTH_URL=${{OS_AUTH_URL}}
- # export OS_USERNAME=${{OS_USERNAME}}
- # export OS_PASSWORD=${{OS_PASSWORD}}
- # export OS_PROJECT_NAME=${{OS_PROJECT_NAME}}
- openstack --insecure stack delete -y ${{stack_name}} || true
- timeout 20m /bin/bash -c "while openstack --insecure stack show ${{stack_name}} -f value -c stack_status; do sleep 10; done";
- """)
- }}
- }}
- }}
-
- stage("Reboot HW nodes ") {{
- bm_ips = [
- "185.8.59.227",
- "185.8.59.229",
- "5.43.225.88",
- "5.43.225.112",
- "5.43.225.208",
- "5.43.227.118",
- "185.8.58.248",
- "185.8.59.222",
- "5.43.225.228",
- "5.43.229.28",
- "5.43.225.23",
- "185.8.58.9",
- "185.8.58.246",
- "185.8.58.243",
- "185.8.58.244"
- ]
-
- lab_user = "engineer"
- lab_pass = "KBwdcRqwed3w2"
- for (ip in bm_ips) {{ sh ("ipmitool -H ${{ip}} -U ${{lab_user}} -P ${{lab_pass}} chassis power off")}}
- for (ip in bm_ips) {{ sh ("ipmitool -H ${{ip}} -U ${{lab_user}} -P ${{lab_pass}} chassis bootdev pxe")}}
- }}
-
- stage("Start deployment") {{
- def jobs_map = [:]
- for (stack_name in stacks) {{
- println stack_name
- println get_last_build_time(stack_name)
- jobs_map.put ("${{stack_name}}", get_last_build_time(stack_name))
- }}
- stack_to_deploy = oldest_job(jobs_map)
-
- println "Build ${{stack_to_deploy}}"
- currentBuild.description = "${{stack_to_deploy}}"
- // Trigger job
- def deploy = build job: "${{stack_to_deploy}}",
- parameters: [
- string(name: 'PARENT_NODE_NAME', value: env.PARENT_NODE_NAME),
- string(name: 'OS_CREDENTIALS', value: env.OS_CREDENTIALS)
- ]
- // currentBuild.status = deploy.status
- }}
- }}
- }}
name: deploy_bm
parameters:
- string:
@@ -152,4 +42,13 @@
description: ''
name: OS_PROJECT_NAME
trim: 'false'
+ pipeline-scm:
+ lightweight-checkout: false
+ scm:
+ - git:
+ branches:
+ - FETCH_HEAD
+ refspec: ${{TCP_QA_REFS}}
+ url: https://gerrit.mcp.mirantis.com/mcp/tcp-qa.git
+ script-path: jobs/pipelines/rotation-released-deployment.groovy