@Library('shared-lib') _ import tech.avroid.api.Gitea String branch 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([ choice( name: 'BRANCH_TYPE', choices: ['Release', 'RC'], description: 'Select one of branch types' ), [$class: 'ChoiceParameter', choiceType: 'PT_SINGLE_SELECT', filterLength: 1, filterable: true, name: 'SOURCE_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}/BBL/platformng/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(name: 'VERSION', defaultValue: '', description: 'Release and RC version eg. 1.4'), ]) ]) // Check if job triggered by parent job Boolean isContainsParentJob = parentJobs.any {job -> currentBuild.upstreamBuilds.projectName.contains(job) } 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: getPodTemplate('alpine')) { node(POD_LABEL) { try { stage('Create branch') { currentBuild.description = "Build from ${params.SOURCE_BRANCH_NAME}" String versionPattern = /^\d+\.\d+.*/ Gitea tavroRepo = new Gitea(this, "${apiRepoURL}/BBL/platformng", "${env.JENKINS_GIT_CREDENTIALS_HTTP}") branch = params.BRANCH_TYPE.toLowerCase() + params.VERSION println "Branch name: ${branch}" if (!params.VERSION.matches(versionPattern) { println('You must specify correct version, see description!') error() } Boolean result = tavroRepo.createBranch(params.SOURCE_BRANCH_NAME, branch) if (!result) { println("Branch doesn't create, maybe ${branch} already exists") error() } } if (params.BRANCH_TYPE == 'Release') { stage('Create SharedLib tag') { Gitea sharedLibRepo = new Gitea(this, "${apiRepoURL}/DevOps/jenkins-shared-lib", "${env.JENKINS_GIT_CREDENTIALS_HTTP}") sharedLibRepo.createTag('master', "platformng_${branch}") } } stage('Run build') { sleep(5) build(job: "BBL Team/platformng/${branch}") } } catch(err) { echo 'ERROR: ' + err.getMessage() currentBuild.result = 'FAILURE' } finally { cleanWs() } } }