From 8f7b47fe0dd62b0d11b855635e70bb94dcb07138 Mon Sep 17 00:00:00 2001 From: "aleksandr.vodyanov" Date: Mon, 26 Feb 2024 21:09:00 +0300 Subject: [PATCH] [DO-290] reafactoring Release-activities (!17) Reviewed-on: https://git.avroid.tech/DevOps/jenkins-pipelines/pulls/17 Co-authored-by: aleksandr.vodyanov Co-committed-by: aleksandr.vodyanov --- jobs-dsl/folders/Release_activity.groovy | 4 - .../code_freeze.groovy => tavro.groovy} | 18 +++- .../feature_freeze.groovy => tavro.groovy} | 73 ++++++------- .../Release-activity/tavro/code_freeze.groovy | 102 ------------------ pipelines/jobs-dsl/jobs-dsl.groovy | 5 + .../feature_freeze.groovy => tavro.groovy | 16 ++- 6 files changed, 62 insertions(+), 156 deletions(-) rename jobs-dsl/jobs/Release-activity/{tavro/code_freeze.groovy => tavro.groovy} (75%) rename pipelines/Release-activity/{tavro/feature_freeze.groovy => tavro.groovy} (56%) delete mode 100644 pipelines/Release-activity/tavro/code_freeze.groovy rename jobs-dsl/jobs/Release-activity/tavro/feature_freeze.groovy => tavro.groovy (81%) diff --git a/jobs-dsl/folders/Release_activity.groovy b/jobs-dsl/folders/Release_activity.groovy index 3845afb..743190f 100644 --- a/jobs-dsl/folders/Release_activity.groovy +++ b/jobs-dsl/folders/Release_activity.groovy @@ -2,7 +2,3 @@ folder('Release-activity') { displayName('Release-activity') description('Release activity') } - -folder('Release-activity/tavro') { - description('Release activity for TAVRO team') -} diff --git a/jobs-dsl/jobs/Release-activity/tavro/code_freeze.groovy b/jobs-dsl/jobs/Release-activity/tavro.groovy similarity index 75% rename from jobs-dsl/jobs/Release-activity/tavro/code_freeze.groovy rename to jobs-dsl/jobs/Release-activity/tavro.groovy index f4be000..dce43f6 100644 --- a/jobs-dsl/jobs/Release-activity/tavro/code_freeze.groovy +++ b/jobs-dsl/jobs/Release-activity/tavro.groovy @@ -1,10 +1,15 @@ -pipelineJob('Release-activity/tavro/code_freeze') { +pipelineJob('Release-activity/Tavro') { logRotator { numToKeep(10) artifactNumToKeep(10) } parameters { + choice { + name('BRANCH_TYPE') + choices(['Release', 'RC', 'Smoke']) + description('Select one of branch types') + } choiceParameter { name('SOURCE_BRANCH_NAME') randomName('') @@ -37,6 +42,12 @@ return branches.sort() } choiceType('PT_SINGLE_SELECT') } + + string { + name('VERSION') + defaultValue('') + description('Release version eg. (1.4 or 1.4-demo)') + } } definition { @@ -47,10 +58,11 @@ return branches.sort() url("${JENKINS_GIT_REPOSITORY_URL}/DevOps/jenkins-pipelines.git") credentials("${JENKINS_GIT_CREDENTIALS_HTTP}") } - branch('master') + branch('DO-290--reafactoring_release_activities') } } - scriptPath('pipelines/Release-activity/tavro/code_freeze.groovy') + scriptPath('pipelines/Release-activity/tavro.groovy') } } } + diff --git a/pipelines/Release-activity/tavro/feature_freeze.groovy b/pipelines/Release-activity/tavro.groovy similarity index 56% rename from pipelines/Release-activity/tavro/feature_freeze.groovy rename to pipelines/Release-activity/tavro.groovy index ab2acc1..a44f962 100644 --- a/pipelines/Release-activity/tavro/feature_freeze.groovy +++ b/pipelines/Release-activity/tavro.groovy @@ -2,8 +2,7 @@ import tech.avroid.api.Gitea -String rcBranch -String gitToken +String branch String apiRepoURL = "${env.JENKINS_GIT_REPOSITORY_URL}/api/v1/repos/TAVRO/TAVRO" List parentJobs = ['jobs-dsl'] @@ -19,7 +18,13 @@ properties([ numToKeepStr: '10')), disableConcurrentBuilds(), parameters( - [[$class: 'ChoiceParameter', + [ + choice( + name: 'BRANCH_TYPE', + choices: ['Release', 'RC', 'Smoke'], + description: 'Select one of branch types' + ), + [$class: 'ChoiceParameter', choiceType: 'PT_SINGLE_SELECT', filterLength: 1, filterable: true, @@ -38,17 +43,14 @@ branches.add(branch.name) return branches.sort() """]], ], - string(name: 'RC_VERSION', defaultValue: '', description: 'Release version eg. (1.4 or 1.4-demo)'), - booleanParam(name: 'TEST_RC_BRANCH', - defaultValue: false, - description: 'Test RC branch or no. If value is true, branch will be looks as test_rc_1.4') + string(name: 'VERSION', defaultValue: '', description: 'Release version eg. (1.4 for release and 1.4.1 for another branches)'), ] ) ]) // Check if job triggered by parent job -boolean isContainsParentJob = parentJobs.any {job -> currentBuild.upstreamBuilds.projectName.contains(job) } +Boolean isContainsParentJob = parentJobs.any {job -> currentBuild.upstreamBuilds.projectName.contains(job) } if (isContainsParentJob) { currentBuild.result = 'SUCCESS' @@ -57,51 +59,46 @@ if (isContainsParentJob) { } podTemplate(workspaceVolume: hostPathWorkspaceVolume(hostPath: "/data"), - yaml: ''' - apiVersion: v1 - kind: Pod - spec: - containers: - - name: linux - image: harbor.avroid.tech/devops/base-build-image:1.0 - tty: true - resources: - limits: - cpu: 300m - memory: 256Mi - requests: - cpu: 300m - memory: 256Mi - imagePullPolicy: Always - imagePullSecrets: - - name: harbor-registry-secret -''' + yaml: """ + apiVersion: v1 + kind: Pod + spec: + containers: + - name: linux + image: ${env.JENKINS_DOCKER_REGISTRY}/docker-hub-proxy/library/alpine:3.18.5 + tty: true + resources: + limits: + cpu: 100m + memory: 64Mi + requests: + cpu: 100m + memory: 64Mi +""" ) { node(POD_LABEL) { - stage('Create RC branch') { + stage('Create branch') { currentBuild.description = "Build from ${params.SOURCE_BRANCH_NAME}" + String versionPattern = (params.BRANCH_TYPE == 'Release') ? /^\d+\.\d+.*/ : /^\d+\.\d+\.\d+.*/ Gitea tavroRepo = new Gitea(this, apiRepoURL, "${env.JENKINS_GIT_CREDENTIALS_HTTP}") - String versionPattern = /^\d+\.\d+.*/ - String rcPrefix = 'rc' - String rcTest = params.TEST_RC_BRANCH == true ? 'test_' : '' - rcBranch = rcTest + rcPrefix + params.RC_VERSION - - if (!params.RC_VERSION.matches(versionPattern)) { + branch = params.BRANCH_TYPE.toLowerCase() + params.VERSION + + if (!params.VERSION.matches(versionPattern)) { println('You must specify correct version, see description!') error() } - boolean result = tavroRepo.createBranch(params.SOURCE_BRANCH_NAME, rcBranch) + Boolean result = tavroRepo.createBranch(params.SOURCE_BRANCH_NAME, branch) if (!result) { - println("RC Branch doesn't create, maybe ${rcBranch} already exists") + println("Branch doesn't create, maybe ${branch} already exists") error() } } stage('Run build') { - sleep(10) - build(job: "TAVRO Team/TAVRO/${rcBranch}") + sleep(5) + build(job: "TAVRO Team/TAVRO/${branch}") } } } diff --git a/pipelines/Release-activity/tavro/code_freeze.groovy b/pipelines/Release-activity/tavro/code_freeze.groovy deleted file mode 100644 index d912706..0000000 --- a/pipelines/Release-activity/tavro/code_freeze.groovy +++ /dev/null @@ -1,102 +0,0 @@ -@Library('shared-lib') _ - -import tech.avroid.api.Gitea - -String apiRepoURL = "${env.JENKINS_GIT_REPOSITORY_URL}/api/v1/repos" -List parentJobs = ['jobs-dsl'] - - -withCredentials([usernamePassword(credentialsId: "${JENKINS_GIT_CREDENTIALS_HTTP}", - usernameVariable: 'GITEA_USER', passwordVariable: 'GITEA_USER_PASSWORD')]) { - gitLogin = GITEA_USER - gitPass = GITEA_USER_PASSWORD -} - -properties([ - buildDiscarder(logRotator(artifactNumToKeepStr: '10', - numToKeepStr: '10')), - disableConcurrentBuilds(), - parameters( - [[$class: 'ChoiceParameter', - choiceType: 'PT_SINGLE_SELECT', - filterLength: 1, - filterable: true, - name: 'RC_BRANCH_NAME', - script: [$class: 'GroovyScript', - script: [sandbox: false, script: """import groovy.json.JsonSlurperClassic -def sout = new StringBuffer(), serr = new StringBuffer() -def proc = 'curl --connect-timeout 15 -u ${gitLogin}:${gitPass} ${apiRepoURL}/TAVRO/TAVRO/branches'.execute() -proc.consumeProcessOutput(sout, serr) -proc.waitForOrKill(5000) -JSONInfo = new JsonSlurperClassic().parseText(sout.toString()) -List branches = [] -JSONInfo.each{ branch -> -branches.add(branch.name) -} -return branches.sort() -"""]], - ]] -)]) - -String releaseBranch = params.RC_BRANCH_NAME -releaseBranch = 'release' + releaseBranch.split('rc').last() - -//// Check if job triggered by parent job -//boolean isContainsParentJob = Info.isTriggeredByParent( -// script: this, -// parentJobs: parentJobs -//) -// -//if (isContainsParentJob) { -// currentBuild.result = 'SUCCESS' -// println("This job was triggered by one or more of following upstream jobs ${parentJobs}, so it will be exited without running the steps.") -// return -//} - -podTemplate(workspaceVolume: hostPathWorkspaceVolume(hostPath: "/data"), - yaml: ''' - apiVersion: v1 - kind: Pod - spec: - containers: - - name: linux - image: harbor.avroid.tech/devops/base-build-image:1.0 - tty: true - resources: - limits: - cpu: 300m - memory: 256Mi - requests: - cpu: 300m - memory: 256Mi - imagePullPolicy: Always - imagePullSecrets: - - name: harbor-registry-secret -''' -) { - node(POD_LABEL) { - stage('Create Release branch') { - currentBuild.description = "Build from ${params.SOURCE_BRANCH_NAME}" - Gitea tavroRepo = new Gitea(this, "${apiRepoURL}/TAVRO/TAVRO", "${env.JENKINS_GIT_CREDENTIALS_HTTP}") - boolean result = tavroRepo.createBranch(params.RC_BRANCH_NAME, releaseBranch) - - if (!result) { - println("Realease Branch already exists") - error() - } else { - stage('Create SharedLib tag') { - Gitea sharedLibRepo = new Gitea(this, - "${apiRepoURL}/DevOps/jenkins-shared-lib", - "${env.JENKINS_GIT_CREDENTIALS_HTTP}") - - sharedLibRepo.createTag('master', releaseBranch) - } - } - } - - stage('Run build') { - sleep(10) - build(job: "TAVRO Team/TAVRO/${releaseBranch}") - } - } -} diff --git a/pipelines/jobs-dsl/jobs-dsl.groovy b/pipelines/jobs-dsl/jobs-dsl.groovy index 8bd1b4c..07260cd 100644 --- a/pipelines/jobs-dsl/jobs-dsl.groovy +++ b/pipelines/jobs-dsl/jobs-dsl.groovy @@ -40,6 +40,7 @@ podTemplate(workspaceVolume: hostPathWorkspaceVolume(hostPath: "/data"), } stage('Run job dsl') { + List launchJobs = [ 'Release-activity/Tavro' ] jobDsl( targets: 'jobs-dsl/folders/*.groovy\n' + 'jobs-dsl/jobs/**/*.groovy\n' + @@ -50,6 +51,10 @@ podTemplate(workspaceVolume: hostPathWorkspaceVolume(hostPath: "/data"), removedViewAction: 'IGNORE', removedConfigFilesAction: 'IGNORE' ) + + launchJobs.each { job -> + build(job: job, wait: false) + } } } } diff --git a/jobs-dsl/jobs/Release-activity/tavro/feature_freeze.groovy b/tavro.groovy similarity index 81% rename from jobs-dsl/jobs/Release-activity/tavro/feature_freeze.groovy rename to tavro.groovy index 5f4dfdf..0c1a54b 100644 --- a/jobs-dsl/jobs/Release-activity/tavro/feature_freeze.groovy +++ b/tavro.groovy @@ -1,10 +1,14 @@ -pipelineJob('Release-activity/tavro/feature_freeze') { +pipelineJob('Release-activity/Tavro') { logRotator { numToKeep(10) artifactNumToKeep(10) } parameters { + choice { + name('BRANCH_TYPE') + choices(['Release', 'RC', 'Smoke']), + description('Select one of branch types') choiceParameter { name('SOURCE_BRANCH_NAME') randomName('') @@ -39,16 +43,10 @@ return branches.sort() } string { - name('RC_VERSION') + name('VERSION') defaultValue('') description('Release version eg. (1.4 or 1.4-demo)') } - - booleanParam { - name('TEST_RC_BRANCH') - defaultValue(false) - description('Test RC branch or no. If value is true, branch will be looks as RC_MODC_test_2.0.0') - } } definition { @@ -62,7 +60,7 @@ return branches.sort() branch('master') } } - scriptPath('pipelines/Release-activity/tavro/feature_freeze.groovy') + scriptPath('pipelines/Release-activity/tavro.groovy') } } }