blob: e74268200e47ba52eb7d12c9c0760774af7204de [file] [log] [blame]
Richard Felkl37ee1e32017-12-11 10:01:39 +01001/**
2 *
Richard Felkl56082e92017-12-20 23:39:53 +01003 * Promote MCP
Richard Felkl37ee1e32017-12-11 10:01:39 +01004 *
5 * Expected parameters:
Richard Felkl56082e92017-12-20 23:39:53 +01006 * SOURCE_REVISION
7 * TARGET_REVISION
Richard Felkl37ee1e32017-12-11 10:01:39 +01008 * RELEASE_APTLY
Richard Felkl56082e92017-12-20 23:39:53 +01009 * RELEASE_DEB_MIRRORS
Richard Felkl37ee1e32017-12-11 10:01:39 +010010 * RELEASE_DOCKER
11 * RELEASE_GIT
12 * APTLY_URL
13 * APTLY_STORAGES
14 * DOCKER_CREDENTIALS
15 * DOCKER_URL
16 * DOCKER_IMAGES
17 * GIT_CREDENTIALS
18 * GIT_REPO_LIST
azvyagintsev87781882018-08-30 18:45:22 +030019 * VCP_IMAGE_LIST - list of images
azvyagintsev759734c2018-10-03 13:57:54 +030020 * SYNC_VCP_IMAGE_TO_S3 - boolean
azvyagintsev87781882018-08-30 18:45:22 +030021 * RELEASE_VCP_IMAGES - boolean
Richard Felklc8c5a5a2018-04-19 17:06:30 +020022 * EMAIL_NOTIFY
23 * NOTIFY_RECIPIENTS
azvyagintsev759734c2018-10-03 13:57:54 +030024 *
azvyagintsev87781882018-08-30 18:45:22 +030025 */
Richard Felkl37ee1e32017-12-11 10:01:39 +010026
Richard Felkl55175f52017-12-20 14:53:41 +010027common = new com.mirantis.mk.Common()
azvyagintsev759734c2018-10-03 13:57:54 +030028
azvyagintsev79778662018-11-23 18:07:16 +020029syncVcpImagesToS3 = env.SYNC_VCP_IMAGE_TO_S3 ?: false
30emailNotify = env.EMAIL_NOTIFY ?: false
Richard Felkl37ee1e32017-12-11 10:01:39 +010031
azvyagintsev87781882018-08-30 18:45:22 +030032def triggerAptlyPromoteJob(aptlyUrl, components, diffOnly, dumpPublish, packages, recreate, source, storages, target) {
33 build job: "aptly-promote-all-testing-stable", parameters: [
34 [$class: 'StringParameterValue', name: 'APTLY_URL', value: aptlyUrl],
35 [$class: 'StringParameterValue', name: 'COMPONENTS', value: components],
36 [$class: 'BooleanParameterValue', name: 'DIFF_ONLY', value: diffOnly],
37 [$class: 'BooleanParameterValue', name: 'DUMP_PUBLISH', value: dumpPublish],
38 [$class: 'StringParameterValue', name: 'PACKAGES', value: packages],
39 [$class: 'BooleanParameterValue', name: 'RECREATE', value: recreate],
40 [$class: 'StringParameterValue', name: 'SOURCE', value: source],
41 [$class: 'StringParameterValue', name: 'STORAGES', value: storages],
42 [$class: 'StringParameterValue', name: 'TARGET', value: target],
43 ]
Richard Felkl37ee1e32017-12-11 10:01:39 +010044}
45
azvyagintsevd162b912018-07-26 10:52:14 +020046def triggerDockerMirrorJob(dockerCredentials, dockerRegistryUrl, targetTag, imageList, sourceImageTag) {
azvyagintsev87781882018-08-30 18:45:22 +030047 build job: "docker-images-mirror", parameters: [
48 [$class: 'StringParameterValue', name: 'TARGET_REGISTRY_CREDENTIALS_ID', value: dockerCredentials],
49 [$class: 'StringParameterValue', name: 'REGISTRY_URL', value: dockerRegistryUrl],
50 [$class: 'StringParameterValue', name: 'IMAGE_TAG', value: targetTag],
azvyagintsevf7c65fa2018-10-02 14:59:09 +030051 [$class: 'TextParameterValue', name: 'IMAGE_LIST', value: imageList],
azvyagintsev87781882018-08-30 18:45:22 +030052 [$class: 'StringParameterValue', name: 'SOURCE_IMAGE_TAG', value: sourceImageTag],
53 ]
Richard Felkl37ee1e32017-12-11 10:01:39 +010054}
55
Richard Felkl56082e92017-12-20 23:39:53 +010056def triggerMirrorRepoJob(snapshotId, snapshotName) {
azvyagintsev87781882018-08-30 18:45:22 +030057 build job: "mirror-snapshot-name-all", parameters: [
58 [$class: 'StringParameterValue', name: 'SNAPSHOT_NAME', value: snapshotName],
59 [$class: 'StringParameterValue', name: 'SNAPSHOT_ID', value: snapshotId],
60 ]
Richard Felkl56082e92017-12-20 23:39:53 +010061}
62
Alexander Evseeve704ca92018-09-11 11:30:55 +020063def triggerEbfRepoJob(snapshotId, snapshotName) {
64 build job: "ebf-snapshot-name-all", parameters: [
65 [$class: 'StringParameterValue', name: 'SNAPSHOT_NAME', value: snapshotName],
66 [$class: 'StringParameterValue', name: 'SNAPSHOT_ID', value: snapshotId],
67 ]
68}
69
azvyagintsev3280a0c2018-07-31 08:44:43 +020070def triggerGitTagJob(gitRepoList, gitCredentials, tag, sourceTag) {
Alexander Evseev85649372018-10-08 18:06:49 +020071 // There is no `nightly` and `testing` build-IDs` in release process
72 // for git repos
73 if ( sourceTag in ['nightly', 'testing'] ) sourceTag = 'master'
azvyagintsev21308d02018-08-30 17:49:33 +030074 build job: "tag-git-repos-all", parameters: [
azvyagintsevf7c65fa2018-10-02 14:59:09 +030075 [$class: 'TextParameterValue', name: 'GIT_REPO_LIST', value: gitRepoList],
azvyagintsev87781882018-08-30 18:45:22 +030076 [$class: 'StringParameterValue', name: 'GIT_CREDENTIALS', value: gitCredentials],
77 [$class: 'StringParameterValue', name: 'TAG', value: tag],
78 [$class: 'StringParameterValue', name: 'SOURCE_TAG', value: sourceTag],
79 ]
80}
81
82def triggerPromoteVCPJob(VcpImageList, tag, sourceTag) {
83 build job: "promote-vcp-images-all", parameters: [
azvyagintsevf7c65fa2018-10-02 14:59:09 +030084 [$class: 'TextParameterValue', name: 'VCP_IMAGE_LIST', value: VcpImageList],
azvyagintsev87781882018-08-30 18:45:22 +030085 [$class: 'StringParameterValue', name: 'TAG', value: tag],
azvyagintsevff65d402018-10-02 18:37:42 +030086 [$class: 'StringParameterValue', name: 'SOURCE_TAG', value: sourceTag],
87 [$class: 'BooleanParameterValue', name: 'FORCE_OVERWRITE', value: true],
azvyagintsev87781882018-08-30 18:45:22 +030088 ]
Richard Felkl37ee1e32017-12-11 10:01:39 +010089}
Richard Felklc8c5a5a2018-04-19 17:06:30 +020090
azvyagintsev79778662018-11-23 18:07:16 +020091def triggerSyncVCPJob(VcpImageList, targetTag) {
92 // Operation must be synced with triggerPromoteVCPJob procedure!
93 def images = VcpImageList.trim().tokenize()
94 TargetVcpImageList = ''
95 for (image in images) {
96 if (image.startsWith('#')) {
97 common.warningMsg("Skipping image ${image}")
98 continue
99 }
100 common.infoMsg("Replacing SUBS_SOURCE_VCP_IMAGE_TAG => ${targetTag}")
101 TargetVcpImageList += image.replace('SUBS_SOURCE_VCP_IMAGE_TAG', targetTag) + '\n'
102 }
azvyagintsev759734c2018-10-03 13:57:54 +0300103 build job: "upload-to-s3", parameters: [
104 [$class: 'TextParameterValue', name: 'FILENAMES',
azvyagintsev79778662018-11-23 18:07:16 +0200105 value: TargetVcpImageList + TargetVcpImageList.collect({it + '.md5'})]
azvyagintsev759734c2018-10-03 13:57:54 +0300106 ]
107}
108
Jakub Josefa63f9862018-01-11 17:58:38 +0100109timeout(time: 12, unit: 'HOURS') {
azvyagintsev87781882018-08-30 18:45:22 +0300110 node() {
111 try {
112 stage("Promote") {
113 if (RELEASE_APTLY.toBoolean()) {
114 common.infoMsg("Promoting Aptly")
115 triggerAptlyPromoteJob(APTLY_URL, 'all', false, true, 'all', false, "(.*)/${SOURCE_REVISION}", APTLY_STORAGES, "{0}/${TARGET_REVISION}")
116 }
Richard Felkl56082e92017-12-20 23:39:53 +0100117
azvyagintsev87781882018-08-30 18:45:22 +0300118 if (RELEASE_DEB_MIRRORS.toBoolean()) {
119 common.infoMsg("Promoting Debmirrors")
120 triggerMirrorRepoJob(SOURCE_REVISION, TARGET_REVISION)
121 }
Richard Felkl56082e92017-12-20 23:39:53 +0100122
Alexander Evseeve704ca92018-09-11 11:30:55 +0200123 if (RELEASE_EBF_MIRRORS.toBoolean()) {
124 common.infoMsg("Promoting Emergency Bug Fix Debmirrors")
125 triggerEbfRepoJob(SOURCE_REVISION, TARGET_REVISION)
126 }
127
azvyagintsev87781882018-08-30 18:45:22 +0300128 if (RELEASE_DOCKER.toBoolean()) {
129 common.infoMsg("Promoting Docker images")
130 triggerDockerMirrorJob(DOCKER_CREDENTIALS, DOCKER_URL, TARGET_REVISION, DOCKER_IMAGES, SOURCE_REVISION)
131 }
Richard Felkl56082e92017-12-20 23:39:53 +0100132
azvyagintsev87781882018-08-30 18:45:22 +0300133 if (RELEASE_GIT.toBoolean()) {
134 common.infoMsg("Promoting Git repositories")
135 triggerGitTagJob(GIT_REPO_LIST, GIT_CREDENTIALS, TARGET_REVISION, SOURCE_REVISION)
Richard Felklc8c5a5a2018-04-19 17:06:30 +0200136
azvyagintsev87781882018-08-30 18:45:22 +0300137 }
138 if (RELEASE_VCP_IMAGES.toBoolean()) {
139 common.infoMsg("Promoting VCP images")
140 triggerPromoteVCPJob(VCP_IMAGE_LIST, TARGET_REVISION, SOURCE_REVISION)
141
142 }
azvyagintsev79778662018-11-23 18:07:16 +0200143 if (syncVcpImagesToS3.toBoolean()) {
Alexander Evseev1edde6b2018-10-30 15:22:44 +0300144 common.infoMsg("Syncing VCP images from internal: http://images.mcp.mirantis.net/ to s3: images.mirantis.com")
azvyagintsev79778662018-11-23 18:07:16 +0200145 triggerSyncVCPJob(VCP_IMAGE_LIST, TARGET_REVISION)
azvyagintsev759734c2018-10-03 13:57:54 +0300146 }
147 if (emailNotify) {
148 notify_text = "MCP Promotion ${env.SOURCE_REVISION} => ${env.TARGET_REVISION} has been done"
azvyagintsev87781882018-08-30 18:45:22 +0300149 emailext(to: NOTIFY_RECIPIENTS,
azvyagintsev759734c2018-10-03 13:57:54 +0300150 body: notify_text,
azvyagintsev87781882018-08-30 18:45:22 +0300151 subject: "MCP Promotion has been done")
152 }
153 }
154 } catch (Throwable e) {
Jakub Josefa63f9862018-01-11 17:58:38 +0100155 // If there was an error or exception thrown, the build failed
156 currentBuild.result = "FAILURE"
157 throw e
Richard Felkl37ee1e32017-12-11 10:01:39 +0100158 }
azvyagintsev87781882018-08-30 18:45:22 +0300159 }
160}