- job-template: | |
project-type: pipeline | |
description: '{job-description}' | |
concurrent: true | |
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: | |
default: sre-qa-ci-eu | |
description: '' | |
name: OS_CREDENTIALS | |
trim: 'false' | |
- text: | |
default: |- | |
bm-cicd-pike-ovs-maas | |
bm-cicd-queens-ovs-maas | |
heat-bm-cicd-pike-contrail-sl | |
heat-bm-cicd-queens-contrail-sl | |
description: List of stacks for deployment. Separated by newline | |
name: STACKS | |
trim: 'false' | |
- string: | |
default: '' | |
description: '' | |
name: TCP_QA_REFS | |
trim: 'false' | |
- string: | |
default: sre-team-infra | |
description: '' | |
name: PARENT_NODE_NAME | |
trim: 'false' | |
- string: | |
default: https://ic-eu.ssl.mirantis.net:5000/v3 | |
description: '' | |
name: OS_AUTH_URL | |
trim: 'false' | |
- string: | |
default: sre-team | |
description: '' | |
name: OS_PROJECT_NAME | |
trim: 'false' | |