· 6 years ago · Mar 27, 2020, 12:26 PM
1/**
2*
3* Workflow for KaaS bootstrap on VMs and run test suites against deployments
4
5* KAAS_PIPELINE_REFSPEC Refspec for kaas related pipelines, for testing additional pipeline changes, generally using GERRIT_REFSPEC
6* GERRIT_REFSPEC Parameter also used for fetching groovy pipeline from kaas repo [KAAS_PIPELINE_REFSPEC]
7
8* # Variables used to render KaaS bootstrap templates
9* KAAS_EXTERNAL_NETWORK_ID ID of 'public' network, example for EU cloud: bf6b85a1-39db-4582-b0d1-f4291dddb9cf
10* ENV_NAME Used to provide naming for ceed resources
11* CLUSTER_NAME Used to provide common naming for mgmt cluster/machine resources
12* CDN_REGION Preferrable CDN region
13* CUSTOM_LCM_SPEC TODO
14* KAAS_MANAGEMENT_CLUSTER_FLAVOR Flavor name, which will be used for kaas mgmt machines
15* SKIP_BOOTSTRAP_TEMPLATES_CHECK Skip bootstrap templates preflight checks, useful in case of KAAS_CUSTOM_DEPLOYMENT_BOOTSTRAP_TEMPLATES_TARBALL
16*
17* # Variables used to specify tests
18* DEPLOY_CHILD_CLUSTER Deploy child cluster according to specified release version
19* UPGRADE_CHILD_CLUSTER Upgrade child cluster according to specified release version
20* UPGRADE_MGMT_CLUSTER Upgrade mgmt cluster release
21* KAAS_CHILD_CLUSTER_NAME Desired name for child cluster [DEPLOY_CHILD_CLUSTER=true]
22* KAAS_CHILD_CLUSTER_NAMESPACE Desired namespace for child cluster [DEPLOY_CHILD_CLUSTER=true]
23* KAAS_CHILD_CLUSTER_RELEASE_NAME Desired release name for child deployment
24* KAAS_CHILD_CLUSTER_DNS Desired dns for child cluster
25* KAAS_CHILD_CLUSTER_SLAVE_NODES_COUNT Amount of child worker nodes
26*
27* RUN_UI_E2E Run UI e2e tests against mgmt cluster
28* RUN_MGMT_CFM Run SI conformance tests against mgmt cluster
29*
30* # Remote access parameters
31* OPENSTACK_API_CREDENTIALS Jenkins credential ID with OpenStack OS_USERNAME and OS_PASSWORD, example: system-integration-team-ci
32* CLOUD_KEY_NAME OpenStack keypair name to create the 'seed' node in the OpenStack, example: kaas-vm-seed-node
33* SEED_PRIVATE_KEY_CREDENTIAL_ID Jenkins credential ID with username and private key to access the 'seed' node created with CLOUD_KEY_NAME
34*
35* # Variables used to render clouds.yaml for OpenStack
36* OS_AUTH_URL OpenStack auth URL, example for EU cloud: https://ic-eu.ssl.mirantis.net:5000/v3
37* OS_IDENTITY_API_VERSION OpenStack auth API version, example: 3
38* OS_INTERFACE OpenStack endpoints interface, example: public
39* OS_PROJECT_ID OpenStack project ID, used for bootstrap.sh, example for 'systest-team': 7fd2d1904af849ccb2d72fcfb8469c97
40* OS_PROJECT_NAME OpenStack project name, used for si-tests, example: systest-team
41* OS_REGION_NAME OpenStack region name, example: RegionOne
42* OS_USER_DOMAIN_NAME OpenStack domain name, example: default
43* OPENSTACK_ENVIRONMENT OpenStack environment key name for ceed stack cleanup
44*
45* Optional parameters:
46* TOTAL_TIMEOUT Total workflow timeout
47* SI_TESTS_REFSPEC Refspec of patchset in gerrit.mcp.mirantis.com for the kaas/si-tests repository
48* REPORT_TO_TESTRAIL Report test results to TestRail
49* SLACK_CHANNEL_NOTIFY If not empty, send build results in slack channel
50*/
51common = new com.mirantis.mk.Common()
52def jUtils = new com.mirantis.mk.JenkinsUtils()
53def workflow = new com.mirantis.mk.Workflow()
54def total_timeout = env.TOTAL_TIMEOUT ?: 14400
55
56// sane defaults for job running process in scenario
57continueIfFailure = 'true'
58breakIfFailure = 'false'
59
60node('python') {
61 // Check if dependency jobs passed successfully
62 depsResult = jUtils.checkDependencyJobs()
63 if (!depsResult.status){
64 return
65 }
66
67 // Import external kaas groovy library
68 stage('Getting kaas-libraries') {
69 checkout scm
70 baseKaas = load 'hack/backend/kaasLibrary.groovy'
71 }
72
73 // Determine if custom trigger keywords forwarded from gerrit
74 def triggers = baseKaas.checkCustomGerritTriggers()
75 deployChild = triggers.deployChildEnabled
76 upgradeChild = triggers.upgradeChildEnabled
77 upgradeMgmt = triggers.upgradeMgmtEnabled
78 runUie2e = triggers.runUie2eEnabled
79 runMgmtConformance = triggers.runMgmtConformanceEnabled
80
81 // Deploy latest stable version in case of upgrade testing
82 def kaasDeploymentReleaseMetadata = upgradeMgmt ? 'KAAS_RELEASE_STABLE_FILE' : 'KAAS_RELEASE_CANDIDATE_FILE'
83
84 // Changes in below scenario boilerplate may affect predefined job var-set, described in kaasLibrary.groovy
85 scenario_yaml = """\
86workflow:
87- job: kaas-testing-core-release-artifact
88 parameters:
89 KAAS_RELEASES_REFSPEC:
90 type: StringParameterValue
91 use_variable: GERRIT_REFSPEC
92 KAAS_PIPELINE_REFSPEC:
93 type: StringParameterValue
94 use_variable: KAAS_PIPELINE_REFSPEC
95 artifacts:
96 KAAS_RELEASE_STABLE_FILE: release_stable_version.txt
97 KAAS_RELEASE_CANDIDATE_FILE: release_candidate_version.txt
98 KAAS_RELEASE_REPO_URL: release_repo_url.txt
99 KAAS_CUSTOM_DEPLOYMENT_RELEASE_REPO_URL: release_custom_repo_url.txt.txt
100
101- job: kaas-testing-core-bootstrap-template-artifact
102 parameters:
103 KAAS_RELEASES_REFSPEC:
104 type: StringParameterValue
105 use_variable: GERRIT_REFSPEC
106 KAAS_PIPELINE_REFSPEC:
107 type: StringParameterValue
108 use_variable: KAAS_PIPELINE_REFSPEC
109 OS_MANAGEMENT_CLUSTER_FLAVOR:
110 type: StringParameterValue
111 use_variable: KAAS_MANAGEMENT_CLUSTER_FLAVOR
112 OS_MANAGEMENT_CLUSTER_NAME:
113 type: StringParameterValue
114 use_variable: CLUSTER_NAME
115 OS_MANAGEMENT_MACHINE_NAME_PREFIX:
116 type: StringParameterValue
117 use_variable: CLUSTER_NAME
118 KAAS_RELEASE_REPO_URL:
119 type: StringParameterValue
120 get_variable_from_url: KAAS_RELEASE_REPO_URL
121 artifacts:
122 KAAS_CUSTOM_DEPLOYMENT_BOOTSTRAP_TEMPLATES_TARBALL: release_custom_bootstrap_templates_url.txt
123
124- job: si-test-create-vm-kaas-management
125 ignore_failed: false
126 parameters:
127 ENV_NAME:
128 type: StringParameterValue
129 use_variable: ENV_NAME
130 CLUSTER_NAME:
131 type: StringParameterValue
132 use_variable: CLUSTER_NAME
133 CDN_REGION:
134 type: StringParameterValue
135 use_variable: CDN_REGION
136 # KaaS Core release customization
137 KAAS_RELEASE_REPO_URL:
138 type: StringParameterValue
139 get_variable_from_url: KAAS_RELEASE_REPO_URL
140 KAAS_RELEASE_FILE:
141 type: StringParameterValue
142 get_variable_from_url: ${kaasDeploymentReleaseMetadata}
143 KAAS_CUSTOM_DEPLOYMENT_RELEASE_REPO_URL:
144 type: StringParameterValue
145 get_variable_from_url: KAAS_CUSTOM_DEPLOYMENT_RELEASE_REPO_URL
146 KAAS_CUSTOM_DEPLOYMENT_BOOTSTRAP_TEMPLATES_TARBALL:
147 type: StringParameterValue
148 get_variable_from_url: KAAS_CUSTOM_DEPLOYMENT_BOOTSTRAP_TEMPLATES_TARBALL
149 SKIP_BOOTSTRAP_TEMPLATES_CHECK:
150 type: BooleanParameterValue
151 use_variable: SKIP_BOOTSTRAP_TEMPLATES_CHECK
152 KAAS_RELEASES_REFSPEC:
153 type: StringParameterValue
154 use_variable: ""
155 # Creds
156 OPENSTACK_API_CREDENTIALS:
157 type: StringParameterValue
158 use_variable: OPENSTACK_API_CREDENTIALS
159 OS_AUTH_URL:
160 type: StringParameterValue
161 use_variable: OS_AUTH_URL
162 OS_IDENTITY_API_VERSION:
163 type: StringParameterValue
164 use_variable: OS_IDENTITY_API_VERSION
165 OS_INTERFACE:
166 type: StringParameterValue
167 use_variable: OS_INTERFACE
168 OS_PROJECT_ID:
169 type: StringParameterValue
170 use_variable: OS_PROJECT_ID
171 OS_PROJECT_NAME:
172 type: StringParameterValue
173 use_variable: OS_PROJECT_NAME
174 OS_REGION_NAME:
175 type: StringParameterValue
176 use_variable: OS_REGION_NAME
177 OS_USER_DOMAIN_NAME:
178 type: StringParameterValue
179 use_variable: OS_USER_DOMAIN_NAME
180 KAAS_EXTERNAL_NETWORK_ID:
181 type: StringParameterValue
182 use_variable: KAAS_EXTERNAL_NETWORK_ID
183 CLOUD_KEY_NAME:
184 type: StringParameterValue
185 use_variable: CLOUD_KEY_NAME
186 SEED_PRIVATE_KEY_CREDENTIAL_ID:
187 type: StringParameterValue
188 use_variable: SEED_PRIVATE_KEY_CREDENTIAL_ID
189 SI_TESTS_REFSPEC:
190 type: StringParameterValue
191 use_variable: SI_TESTS_REFSPEC
192 REPORT_TO_TESTRAIL:
193 type: BooleanParameterValue
194 use_variable: REPORT_TO_TESTRAIL
195 artifacts:
196 KUBECONFIG_ARTIFACT: artifacts/management_kubeconfig
197 DEPLOYED_KAAS_VERSION: artifacts/management_version
198 MGMT_K8S_VERSION: artifacts/management_k8s_version
199 KAAS_MGMT_CLUSTER_PRIVATE_KEY_FILE: artifacts/management_id_rsa
200 SHARED_PUBLIC_KEY: artifacts/management_id_rsa_pub
201"""
202
203 stage('Generating workflow scenario') {
204 if (upgradeMgmt) {
205 scenario_yaml += baseKaas.siMgmtUpgrade(breakIfFailure)
206 }
207
208 if (runMgmtConformance) {
209 scenario_yaml += baseKaas.siMgmtRunCfm(continueIfFailure)
210 }
211
212 if (deployChild) {
213 scenario_yaml += baseKaas.siChildOsCreate(breakIfFailure)
214 scenario_yaml += baseKaas.siChildCollectLogs(continueIfFailure)
215 if (upgradeChild) {
216 scenario_yaml += baseKaas.siChildUpgrade(breakIfFailure)
217 scenario_yaml += baseKaas.siChildCollectLogs(continueIfFailure)
218 }
219 scenario_yaml += baseKaas.siChildDelete(breakIfFailure)
220 }
221
222 if (runUie2e) {
223 scenario_yaml += baseKaas.siMgmtRunUiE2e(breakIfFailure)
224 }
225 }
226
227 stage('Generating final steps in scenario') {
228 scenario_yaml += '\nfinally:'
229
230 if (deployChild) {
231 scenario_yaml += baseKaas.siChildCollectLogs(continueIfFailure)
232 }
233 scenario_yaml += baseKaas.siMgmtOsDelete(continueIfFailure)
234 scenario_yaml += baseKaas.siMgmtSeedDelete(breakIfFailure)
235
236 scenario = readYaml text: scenario_yaml
237 common.infoMsg('Scenario generated successfully')
238 writeYaml file: 'generated_scenario.yaml', data: scenario
239 archiveArtifacts(
240 artifacts: 'generated_scenario.yaml',
241 )
242 }
243
244 stage('Running scenario') {
245 timeout(time: total_timeout.toInteger(), unit: 'SECONDS') {
246 workflow.runScenario(scenario)
247 } // timeout
248 }
249
250 if (SLACK_CHANNEL_NOTIFY) {
251 def slack = new com.mirantis.mcp.SlackNotification()
252 slack.jobResultNotification(currentBuild.result, SLACK_CHANNEL_NOTIFY, '', null, '', 'slack_webhook_url')
253 }
254}