blob: 02f7709cc1da732d513d31303e4f35493247c5ac [file] [log] [blame]
Tomáš Kukrále8ebe792017-01-09 10:24:00 +01001/**
Tomáš Kukrál511be612017-02-20 14:50:18 +01002 * DO NOT USE THIS OUTDATED PIPELINE - add your steps to mk-lab-pipeline
Tomáš Kukrále8ebe792017-01-09 10:24:00 +01003 *
4 * Launch heat stack with basic k8s
5 *
6 * Expected parameters:
7 * HEAT_TEMPLATE_URL URL to git repo with Heat templates
8 * HEAT_TEMPLATE_CREDENTIALS Credentials to the Heat templates repo
9 * HEAT_TEMPLATE_BRANCH Heat templates repo branch
10 * OPENSTACK_API_URL OpenStack API address
11 * OPENSTACK_API_CREDENTIALS Credentials to the OpenStack API
12 * OPENSTACK_API_PROJECT OpenStack project to connect to
13 * OPENSTACK_API_CLIENT Versions of OpenStack python clients
14 * OPENSTACK_API_VERSION Version of the OpenStack API (2/3)
15 * SALT_MASTER_CREDENTIALS Credentials to the Salt API
16 * HEAT_STACK_NAME Heat stack name
17 * HEAT_STACK_TEMPLATE Heat stack HOT template
18 * HEAT_STACK_ENVIRONMENT Heat stack environmental parameters
19 * HEAT_STACK_ZONE Heat stack availability zone
20 * HEAT_STACK_PUBLIC_NET Heat stack floating IP pool
Tatyana Leontovich3754a902017-01-20 18:48:55 +020021 * CONFORMANCE_IMAGE Path to docker image with conformance e2e tests
22 * K8S_API_SERVER Kubernetes API address
Tomáš Kukrál9f3f8872017-01-25 10:30:27 +010023 * RUN_TESTS Run test (0/1)
24 * HEAT_STACK_DELETE Delete Heat stack when finished (0/1)
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010025 */
26
Tomáš Kukrálfe063c62017-02-21 09:37:27 +010027git = new com.mirantis.mk.Git()
28openstack = new com.mirantis.mk.Openstack()
29salt = new com.mirantis.mk.Salt()
30orchestrate = new com.mirantis.mk.Orchestrate()
Tatyana Leontovichebee21c2017-02-28 15:06:17 +020031test = new com.mirantis.mk.Test()
Tatyana Leontovich776aad82017-03-06 12:42:48 +020032artifacts_dir = "_artifacts"
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010033
34node {
35
36 // connection objects
37 def openstackCloud
38 def saltMaster
39
40 // value defaults
Tomáš Kukrálfe063c62017-02-21 09:37:27 +010041 def openstackVersion = OPENSTACK_API_CLIENT ? OPENSTACK_API_CLIENT : 'liberty'
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010042 def openstackEnv = "${env.WORKSPACE}/venv"
43
Tomáš Kukrál00c7bf42017-01-13 13:27:23 +010044 if (HEAT_STACK_NAME == "") {
Tomáš Kukrálfe063c62017-02-21 09:37:27 +010045 HEAT_STACK_NAME = BUILD_TAG
Tomáš Kukrál00c7bf42017-01-13 13:27:23 +010046 }
47
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010048 stage ('Download Heat templates') {
49 git.checkoutGitRepository('template', HEAT_TEMPLATE_URL, HEAT_TEMPLATE_BRANCH, HEAT_TEMPLATE_CREDENTIALS)
50 }
51
52 stage('Install OpenStack env') {
53 openstack.setupOpenstackVirtualenv(openstackEnv, openstackVersion)
54 }
55
56 stage('Connect to OpenStack cloud') {
57 openstackCloud = openstack.createOpenstackEnv(OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT)
58 openstack.getKeystoneToken(openstackCloud, openstackEnv)
59 }
60
61 stage('Launch new Heat stack') {
Tomáš Kukrál843b1c12017-02-23 11:37:05 +010062 envParams = [
63 'instance_zone': HEAT_STACK_ZONE,
64 'public_net': HEAT_STACK_PUBLIC_NET
65 ]
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010066 openstack.createHeatStack(openstackCloud, HEAT_STACK_NAME, HEAT_STACK_TEMPLATE, envParams, HEAT_STACK_ENVIRONMENT, openstackEnv)
67 }
68
69 stage("Connect to Salt master") {
70 saltMasterHost = openstack.getHeatStackOutputParam(openstackCloud, HEAT_STACK_NAME, 'salt_master_ip', openstackEnv)
Tomáš Kukrál658944b2017-02-21 18:05:05 +010071 saltMasterUrl = "http://${saltMasterHost}:8088"
Tomáš Kukrálfe063c62017-02-21 09:37:27 +010072 saltMaster = salt.connection(saltMasterUrl, SALT_MASTER_CREDENTIALS)
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010073 }
74
75 stage("Install core infra") {
Tomáš Kukrálfe063c62017-02-21 09:37:27 +010076 orchestrate.installFoundationInfra(saltMaster)
77 orchestrate.validateFoundationInfra(saltMaster)
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010078 }
79
80 stage("Install Kubernetes infra") {
Tomáš Kukrálfe063c62017-02-21 09:37:27 +010081 orchestrate.installOpenstackMcpInfra(saltMaster)
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010082 }
83
84 stage("Install Kubernetes control") {
Tomáš Kukrálfe063c62017-02-21 09:37:27 +010085 orchestrate.installOpenstackMcpControl(saltMaster)
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010086 }
87
Tomáš Kukrál75d4bb12017-01-25 10:40:28 +010088 if (RUN_TESTS == "1") {
Bartosz Kupidurae88158a2017-03-28 11:55:59 +020089 sleep(30)
Tomáš Kukrál023a40b2017-02-20 00:17:00 +010090 stage('Run k8s bootstrap tests') {
Tatyana Leontovichebee21c2017-02-28 15:06:17 +020091 test.runConformanceTests(saltMaster, K8S_API_SERVER, 'tomkukral/k8s-scripts')
Tomáš Kukrál023a40b2017-02-20 00:17:00 +010092 }
93
Tomáš Kukrál9f3f8872017-01-25 10:30:27 +010094 stage("Run k8s conformance e2e tests") {
Tatyana Leontovichebee21c2017-02-28 15:06:17 +020095 test.runConformanceTests(saltMaster, K8S_API_SERVER, CONFORMANCE_IMAGE)
96 }
97
98 stage("Copy k8s e2e test output to config node ") {
99 test.copyTestsOutput(saltMaster,CONFORMANCE_IMAGE)
Tomáš Kukrál9f3f8872017-01-25 10:30:27 +0100100 }
Tatyana Leontovich776aad82017-03-06 12:42:48 +0200101
102 stage("Copy k8s e2e test output to host ") {
103 sh '''
104 mkdir ${env.WORKSPACE}/${artifacts_dir}
105 '''
106 try {
107 test.catTestsOutput(saltMaster,CONFORMANCE_IMAGE) >> ${env.WORKSPACE}/${artifacts_dir}/$CONFORMANCE_IMAGE
108 } catch (InterruptedException x) {
109 echo "The job was aborted"
110 } finally {
111 archiveArtifacts allowEmptyArchive: true, artifacts: '_artifacts/*', excludes: null
112 junit keepLongStdio: true, testResults: '_artifacts/**.xml'
113 sh "sudo chown -R jenkins:jenkins ${env.WORKSPACE}"
Tomáš Kukrál3c9954c2017-03-10 20:29:06 +0100114 }
Tatyana Leontovich776aad82017-03-06 12:42:48 +0200115
116 }
Tatyana Leontovich3754a902017-01-20 18:48:55 +0200117 }
118
Tomáš Kukrál7568ca72017-01-16 09:40:35 +0100119 if (HEAT_STACK_DELETE == "1") {
120 stage('Trigger cleanup job') {
121 build job: 'mk-k8s-cleanup', parameters: [[$class: 'StringParameterValue', name: 'HEAT_STACK_NAME', value: HEAT_STACK_NAME]]
122 }
Tomáš Kukrálaba0a7d2017-01-13 14:05:12 +0100123 }
Tomáš Kukrále8ebe792017-01-09 10:24:00 +0100124
125}