@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', 'Smoke'], 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}/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(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) } 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: emptyDirWorkspaceVolume(memory: false), yaml: getPodTemplate('alpine')) { node(POD_LABEL) { try { 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}/TAVRO/TAVRO", "${env.JENKINS_GIT_CREDENTIALS_HTTP}") branch = params.BRANCH_TYPE.toLowerCase() + params.VERSION println "Branch name: ${branch}" if (!params.VERSION.matches(versionPattern) || \ (params.BRANCH_TYPE == 'Release' && params.VERSION.matches(/^\d+\.\d+\.\d+.*/))) { 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', "tavro_${branch}") } } stage('Run build') { sleep(5) build(job: "TAVRO Team/TAVRO/${branch}") } } catch(err) { echo 'ERROR: ' + err.getMessage() currentBuild.result = 'FAILURE' } } }