Jakub Josef | c5a223a | 2017-03-01 14:40:08 +0100 | [diff] [blame] | 1 | def common = new com.mirantis.mk.Common() |
| 2 | def aptly = new com.mirantis.mk.Aptly() |
Jakub Josef | 70fb4bc | 2018-02-20 16:05:44 +0100 | [diff] [blame] | 3 | def jenkinsUtils = new com.mirantis.mk.JenkinsUtils() |
chnyda | 6a3553e | 2017-03-21 13:20:15 +0100 | [diff] [blame] | 4 | |
| 5 | def packages |
| 6 | try { |
Kirill Mashchenko | 91abe13 | 2018-12-04 12:51:55 +0400 | [diff] [blame] | 7 | packages = PACKAGES |
chnyda | 6a3553e | 2017-03-21 13:20:15 +0100 | [diff] [blame] | 8 | } catch (MissingPropertyException e) { |
Kirill Mashchenko | 91abe13 | 2018-12-04 12:51:55 +0400 | [diff] [blame] | 9 | packages = "" |
chnyda | 6a3553e | 2017-03-21 13:20:15 +0100 | [diff] [blame] | 10 | } |
| 11 | |
| 12 | def components |
| 13 | try { |
Kirill Mashchenko | 91abe13 | 2018-12-04 12:51:55 +0400 | [diff] [blame] | 14 | components = COMPONENTS |
chnyda | 6a3553e | 2017-03-21 13:20:15 +0100 | [diff] [blame] | 15 | } catch (MissingPropertyException e) { |
Kirill Mashchenko | 91abe13 | 2018-12-04 12:51:55 +0400 | [diff] [blame] | 16 | components = "" |
chnyda | 6a3553e | 2017-03-21 13:20:15 +0100 | [diff] [blame] | 17 | } |
| 18 | |
chnyda | 5626fc9 | 2017-11-28 17:34:06 +0100 | [diff] [blame] | 19 | def storages |
| 20 | try { |
| 21 | storages = STORAGES.tokenize(',') |
| 22 | } catch (MissingPropertyException e) { |
| 23 | storages = ['local'] |
| 24 | } |
Jakub Josef | 5a2258a | 2018-03-13 11:45:35 +0100 | [diff] [blame] | 25 | |
| 26 | def insufficientPermissions = false |
| 27 | |
Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 28 | timeout(time: 12, unit: 'HOURS') { |
Kirill Mashchenko | 91abe13 | 2018-12-04 12:51:55 +0400 | [diff] [blame] | 29 | node("docker&&hardware") { |
| 30 | try { |
Kirill Mashchenko | 824fd55 | 2018-12-05 12:58:40 +0400 | [diff] [blame^] | 31 | if ("testing" in TARGET && !jenkinsUtils.currentUserInGroup(["release-engineering", "aptly-promote-users"])) { |
| 32 | insufficientPermissions = true |
| 33 | throw new Exception("Only release-engineering or aptly-promote-users can perform promote to testing.") |
| 34 | } else if (!jenkinsUtils.currentUserInGroup(["release-engineering"])) { |
| 35 | insufficientPermissions = true |
| 36 | throw new Exception("Only release-engineering team can perform promote.") |
| 37 | } |
Kirill Mashchenko | 91abe13 | 2018-12-04 12:51:55 +0400 | [diff] [blame] | 38 | stage("promote") { |
| 39 | // promote is restricted to users in aptly-promote-users LDAP group |
Kirill Mashchenko | 824fd55 | 2018-12-05 12:58:40 +0400 | [diff] [blame^] | 40 | lock("aptly-api") { |
| 41 | for (storage in storages) { |
| 42 | if (storage == "local") { |
| 43 | storage = "" |
| 44 | } |
| 45 | retry(2) { |
| 46 | aptly.promotePublish(APTLY_URL, SOURCE, TARGET, RECREATE, components, packages, DIFF_ONLY, '-d --timeout 600', DUMP_PUBLISH.toBoolean(), storage) |
Kirill Mashchenko | 91abe13 | 2018-12-04 12:51:55 +0400 | [diff] [blame] | 47 | } |
| 48 | } |
Kirill Mashchenko | 91abe13 | 2018-12-04 12:51:55 +0400 | [diff] [blame] | 49 | } |
Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 50 | } |
Kirill Mashchenko | 91abe13 | 2018-12-04 12:51:55 +0400 | [diff] [blame] | 51 | } catch (Throwable e) { |
| 52 | // If there was an error or exception thrown, the build failed |
| 53 | if (insufficientPermissions) { |
| 54 | currentBuild.result = "ABORTED" |
| 55 | currentBuild.description = "Promote aborted due to insufficient permissions" |
| 56 | } else { |
| 57 | currentBuild.result = "FAILURE" |
| 58 | currentBuild.description = currentBuild.description ? e.message + " " + currentBuild.description : e.message |
| 59 | } |
| 60 | throw e |
| 61 | } finally { |
| 62 | if (!insufficientPermissions) { |
| 63 | common.sendNotification(currentBuild.result, "", ["slack"]) |
| 64 | def _extra_descr = "${SOURCE}=>${TARGET}:\n${COMPONENTS} ${packages}" |
| 65 | currentBuild.description = currentBuild.description ? _extra_descr + " " + currentBuild.description : _extra_descr |
| 66 | } |
chnyda | 5626fc9 | 2017-11-28 17:34:06 +0100 | [diff] [blame] | 67 | } |
Jakub Josef | c5a223a | 2017-03-01 14:40:08 +0100 | [diff] [blame] | 68 | } |
azvyagintsev | 1e5a967 | 2018-01-15 16:21:44 +0200 | [diff] [blame] | 69 | } |
Jakub Josef | e70fdf0 | 2018-02-14 13:29:41 +0100 | [diff] [blame] | 70 | |