blob: 2a3653c40065fa766747bb46afa07b004ab93827 [file] [log] [blame]
Tomáš Kukrále8ebe792017-01-09 10:24:00 +01001/**
Tomáš Kukrál71dae692017-05-22 16:27:20 +02002 * DO NOT USE THIS OUTDATED PIPELINE - add your steps to 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()
chnyda625f4b42017-10-11 14:10:31 +020032def python = new com.mirantis.mk.Python()
33
Tatyana Leontovich776aad82017-03-06 12:42:48 +020034artifacts_dir = "_artifacts"
Jakub Josefa63f9862018-01-11 17:58:38 +010035timeout(time: 12, unit: 'HOURS') {
36 node {
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010037
Jakub Josefa63f9862018-01-11 17:58:38 +010038 // connection objects
39 def openstackCloud
Tomáš Kukrále8ebe792017-01-09 10:24:00 +010040
Jakub Josefa63f9862018-01-11 17:58:38 +010041 // value defaults
42 def openstackVersion = OPENSTACK_API_CLIENT ? OPENSTACK_API_CLIENT : 'liberty'
Jakub Josef88aaf832018-01-18 16:18:28 +010043 def workspace = common.getWorkspace()
44 def openstackEnv = "${workspace}/venv"
45 def pepperEnv = "${workspace}/pepperEnv"
Jakub Josefa63f9862018-01-11 17:58:38 +010046 if (HEAT_STACK_NAME == "") {
47 HEAT_STACK_NAME = BUILD_TAG
Tomáš Kukrál023a40b2017-02-20 00:17:00 +010048 }
49
Jakub Josefa63f9862018-01-11 17:58:38 +010050 stage ('Download Heat templates') {
51 git.checkoutGitRepository('template', HEAT_TEMPLATE_URL, HEAT_TEMPLATE_BRANCH, HEAT_TEMPLATE_CREDENTIALS)
Tatyana Leontovichebee21c2017-02-28 15:06:17 +020052 }
53
Jakub Josefa63f9862018-01-11 17:58:38 +010054 stage('Install OpenStack env') {
55 openstack.setupOpenstackVirtualenv(openstackEnv, openstackVersion)
Tomáš Kukrál9f3f8872017-01-25 10:30:27 +010056 }
Tatyana Leontovich776aad82017-03-06 12:42:48 +020057
Jakub Josefa63f9862018-01-11 17:58:38 +010058 stage('Connect to OpenStack cloud') {
Jakub Josef88aaf832018-01-18 16:18:28 +010059 openstackCloud = openstack.createOpenstackEnv(openstackEnv, OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT,
Jakub Josefa63f9862018-01-11 17:58:38 +010060 "", OPENSTACK_API_PROJECT_DOMAIN_ID, OPENSTACK_API_USER_DOMAIN_ID, OPENSTACK_API_VERSION)
61 openstack.getKeystoneToken(openstackCloud, openstackEnv)
62 }
63
64 stage('Launch new Heat stack') {
65 envParams = [
66 'instance_zone': HEAT_STACK_ZONE,
67 'public_net': HEAT_STACK_PUBLIC_NET
68 ]
69 openstack.createHeatStack(openstackCloud, HEAT_STACK_NAME, HEAT_STACK_TEMPLATE, envParams, HEAT_STACK_ENVIRONMENT, openstackEnv)
70 }
71
72 stage("Connect to Salt master") {
73 saltMasterHost = openstack.getHeatStackOutputParam(openstackCloud, HEAT_STACK_NAME, 'salt_master_ip', openstackEnv)
74 saltMasterUrl = "http://${saltMasterHost}:8088"
75 python.setupPepperVirtualenv(pepperEnv, saltMasterUrl, SALT_MASTER_CREDENTIALS)
76 }
77
78 stage("Install core infra") {
79 orchestrate.installFoundationInfra(pepperEnv)
80 orchestrate.validateFoundationInfra(pepperEnv)
81 }
82
83 stage("Install Kubernetes infra") {
84 orchestrate.installOpenstackMcpInfra(pepperEnv)
85 }
86
87 stage("Install Kubernetes control") {
88 orchestrate.installOpenstackMcpControl(pepperEnv)
89 }
90
91 if (RUN_TESTS == "1") {
92 sleep(30)
93 stage('Run k8s bootstrap tests') {
94 test.runConformanceTests(pepperEnv, 'ctl01*', K8S_API_SERVER, 'tomkukral/k8s-scripts')
Tomáš Kukrál3c9954c2017-03-10 20:29:06 +010095 }
Tatyana Leontovich776aad82017-03-06 12:42:48 +020096
Jakub Josefa63f9862018-01-11 17:58:38 +010097 stage("Run k8s conformance e2e tests") {
98 test.runConformanceTests(pepperEnv, 'ctl01*', K8S_API_SERVER, CONFORMANCE_IMAGE)
99 }
Tatyana Leontovich3754a902017-01-20 18:48:55 +0200100
Jakub Josefa63f9862018-01-11 17:58:38 +0100101 stage("Copy k8s e2e test output to config node ") {
102 test.copyTestsOutput(pepperEnv,CONFORMANCE_IMAGE)
103 }
Tomáš Kukrále8ebe792017-01-09 10:24:00 +0100104
Jakub Josefa63f9862018-01-11 17:58:38 +0100105 stage("Copy k8s e2e test output to host ") {
106 sh '''
107 mkdir ${env.WORKSPACE}/${artifacts_dir}
108 '''
109 try {
110 test.catTestsOutput(pepperEnv,CONFORMANCE_IMAGE) >> ${env.WORKSPACE}/${artifacts_dir}/$CONFORMANCE_IMAGE
111 } catch (InterruptedException x) {
112 echo "The job was aborted"
113 } finally {
114 archiveArtifacts allowEmptyArchive: true, artifacts: '_artifacts/*', excludes: null
115 junit keepLongStdio: true, testResults: '_artifacts/**.xml'
116 sh "sudo chown -R jenkins:jenkins ${env.WORKSPACE}"
117 }
118
119 }
120 }
121
122 if (HEAT_STACK_DELETE == "1") {
123 stage('Trigger cleanup job') {
124 build job: 'mk-k8s-cleanup', parameters: [[$class: 'StringParameterValue', name: 'HEAT_STACK_NAME', value: HEAT_STACK_NAME]]
125 }
126 }
127
128 }
Tomáš Kukrále8ebe792017-01-09 10:24:00 +0100129}