blob: 9144bd3d2f0a28e16ab59acce75643c9f48b8a2a [file] [log] [blame]
chnydad66d6fa2017-06-22 09:34:43 +02001
2/**
3 * Test salt models pipeline
4 * DEFAULT_GIT_REF
5 * DEFAULT_GIT_URL
6 * CREDENTIALS_ID
7 * EXTRA_FORMULAS
Jakub Josef107769c2017-08-17 13:38:15 +02008 * CLUSTER_NAME
chnydad66d6fa2017-06-22 09:34:43 +02009 * NODE_TARGET
10 * SYSTEM_GIT_URL
11 * SYSTEM_GIT_REF
Mykyta Karpinc0758f32017-06-23 18:10:24 +030012 * FORMULAS_SOURCE
Jakub Josefe40bbf92018-03-22 15:02:46 +010013 * RECLASS_VERSION
chnydabb6d2a62017-07-31 14:09:16 +020014 * MAX_CPU_PER_JOB
Jakub Josef6e4a09d2017-10-05 16:53:02 +020015 * LEGACY_TEST_MODE
Jakub Josefb1c81632017-10-05 17:19:53 +020016 * RECLASS_IGNORE_CLASS_NOTFOUND
Dmitry Ukovb2aa6db2017-10-23 12:30:31 +040017 * APT_REPOSITORY
18 * APT_REPOSITORY_GPG
chnydad66d6fa2017-06-22 09:34:43 +020019 */
20
21def common = new com.mirantis.mk.Common()
22def gerrit = new com.mirantis.mk.Gerrit()
chnyda4ed3c272017-06-22 14:50:09 +020023def git = new com.mirantis.mk.Git()
chnydac6092a22017-06-22 14:47:10 +020024def ssh = new com.mirantis.mk.Ssh()
chnydad66d6fa2017-06-22 09:34:43 +020025def saltModelTesting = new com.mirantis.mk.SaltModelTesting()
26
27def defaultGitRef = DEFAULT_GIT_REF
28def defaultGitUrl = DEFAULT_GIT_URL
29
30def checkouted = false
chnyda03f3ad42017-09-19 14:41:07 +020031
Vasyl Saienko772e1232018-07-23 14:42:24 +030032def reclassVersion = '1.5.4'
33if (common.validInputParam('RECLASS_VERSION')) {
34 reclassVersion = RECLASS_VERSION
35}
36
chnyda03f3ad42017-09-19 14:41:07 +020037throttle(['test-model']) {
Jakub Josefdb3ddd82018-01-23 13:30:47 +010038 timeout(time: 1, unit: 'HOURS') {
Jakub Josef22815b02018-01-30 16:05:26 +010039 node("python&&docker") {
Jakub Josefa63f9862018-01-11 17:58:38 +010040 try{
41 stage("checkout") {
42 if(defaultGitRef != "" && defaultGitUrl != "") {
43 checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID)
44 } else {
45 throw new Exception("Cannot checkout gerrit patchset, DEFAULT_GIT_URL or DEFAULT_GIT_REF is null")
46 }
47 if(checkouted) {
48 if (fileExists('classes/system')) {
49 if (SYSTEM_GIT_URL == "") {
50 ssh.prepareSshAgentKey(CREDENTIALS_ID)
51 dir('classes/system') {
52 remoteUrl = git.getGitRemote()
53 ssh.ensureKnownHosts(remoteUrl)
54 }
55 ssh.agentSh("git submodule init; git submodule sync; git submodule update --recursive")
56 } else {
57 dir('classes/system') {
58 if (!gerrit.gerritPatchsetCheckout(SYSTEM_GIT_URL, SYSTEM_GIT_REF, "HEAD", CREDENTIALS_ID)) {
59 common.errorMsg("Failed to obtain system reclass with url: ${SYSTEM_GIT_URL} and ${SYSTEM_GIT_REF}")
60 }
chnyda03f3ad42017-09-19 14:41:07 +020061 }
chnydad66d6fa2017-06-22 09:34:43 +020062 }
63 }
64 }
65 }
chnydad66d6fa2017-06-22 09:34:43 +020066
Jakub Josefa63f9862018-01-11 17:58:38 +010067 stage("test node") {
68 if (checkouted) {
69 def workspace = common.getWorkspace()
azvyagintsev7c4a3cf2018-07-08 08:43:33 +030070 def testResult = false
Jakub Josefa63f9862018-01-11 17:58:38 +010071 common.infoMsg("Running salt model test for node ${NODE_TARGET} in cluster ${CLUSTER_NAME}")
72 try {
Kirill Mashchenko18071f62018-06-29 12:42:16 +030073 def DockerCName = "${env.JOB_NAME.toLowerCase()}_${env.BUILD_TAG.toLowerCase()}"
azvyagintsev7c4a3cf2018-07-08 08:43:33 +030074 testResult = saltModelTesting.setupAndTestNode(
azvyagintsev1c9801f2018-07-07 23:02:53 +030075 NODE_TARGET,
76 CLUSTER_NAME,
77 EXTRA_FORMULAS,
78 workspace,
79 FORMULAS_SOURCE,
80 FORMULAS_REVISION,
Vasyl Saienko772e1232018-07-23 14:42:24 +030081 reclassVerstion,
azvyagintsev1c9801f2018-07-07 23:02:53 +030082 MAX_CPU_PER_JOB.toInteger(),
83 RECLASS_IGNORE_CLASS_NOTFOUND,
84 LEGACY_TEST_MODE,
85 APT_REPOSITORY,
86 APT_REPOSITORY_GPG,
87 DockerCName)
Jakub Josefa63f9862018-01-11 17:58:38 +010088 } catch (Exception e) {
89 if (e.getMessage() == "script returned exit code 124") {
90 common.errorMsg("Impossible to test node due to timeout of salt-master, ABORTING BUILD")
91 currentBuild.result = "ABORTED"
92 } else {
93 throw e
94 }
chnyda3dcf0bd2017-11-30 11:49:24 +010095 }
azvyagintsev7c4a3cf2018-07-08 08:43:33 +030096 if (testResult) {
azvyagintsev1c9801f2018-07-07 23:02:53 +030097 common.infoMsg("Test finished: SUCCESS")
98 } else {
azvyagintsev3ed704f2018-07-09 15:49:27 +030099 error('Test node finished: FAILURE')
100 throw new RuntimeException('Test node stage finished: FAILURE')
azvyagintsev1c9801f2018-07-07 23:02:53 +0300101 }
chnyda3dcf0bd2017-11-30 11:49:24 +0100102 }
chnyda03f3ad42017-09-19 14:41:07 +0200103 }
Jakub Josefa63f9862018-01-11 17:58:38 +0100104 } catch (Throwable e) {
azvyagintsev1c9801f2018-07-07 23:02:53 +0300105 // If there was an error or exception thrown, the build failed
106 currentBuild.result = "FAILURE"
107 currentBuild.description = currentBuild.description ? e.message + " " + currentBuild.description : e.message
108 throw e
chnydad66d6fa2017-06-22 09:34:43 +0200109 }
110 }
chnydad66d6fa2017-06-22 09:34:43 +0200111 }
112}