#!/bin/groovy /* * SPDX-License-Identifier: LicenseRef-CSSL-1.0 */ // Location of the python executor node shall be in the same subnet as the others servers def nodeExecutor = params.nodeExecutor // SSH URL of the internal git repository def internalRepoURL = params.internalRepoURL // Name of the resource def lockResources = [] if (params.LockResources != null && params.LockResources.trim().length() > 0) params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]} pipeline { agent { label nodeExecutor } options { ansiColor('xterm') lock(extra: lockResources) } stages { stage("Job init") { steps { buildName "${params.requestNumber ?: params.targetBranch}" buildDescription "Branch: ${params.sourceBranch}" } } stage('Checkout') { steps { script { if (params.mergeWithTarget) { echo "PR triggered - checking out merge ref for PR #${params.requestNumber}" try { checkout([ $class: 'GitSCM', branches: [[name: "refs/remotes/origin/pr/${params.requestNumber}/merge"]], userRemoteConfigs: [[ url: params.targetRepo, refspec: "+refs/pull/${params.requestNumber}/merge:refs/remotes/origin/pr/${params.requestNumber}/merge", credentialsId: 'github-jenkins-duranta' ]] ]) } catch (e) { error("Checkout failed for PR #${params.requestNumber} - " + "merge ref not found. The PR likely has a conflict with ${params.targetBranch} " + "that must be resolved before CI can run. (${e.message})") } } else { echo "Push triggered - checking out branch ${params.targetBranch}" try { checkout([ $class: 'GitSCM', branches: [[name: params.targetBranch]], userRemoteConfigs: [[ url: params.targetRepo, credentialsId: 'github-jenkins-duranta' ]] ]) } catch (e) { error("Checkout failed for branch ${params.targetBranch} from ${params.targetRepo}. (${e.message})") } } } } } stage('Verify parameters') { steps { script { def missingParams = [] if (!params.sourceBranch?.trim()) { missingParams << 'sourceBranch' } if (!params.sourceCommit?.trim()) { missingParams << 'sourceCommit' } if (params.mergeWithTarget) { if (!params.targetRepo?.trim()) { missingParams << 'targetRepo' } if (!params.targetBranch?.trim()) { missingParams << 'targetBranch' } } if (missingParams) { error "Missing required parameters: ${missingParams.join(', ')}" } echo "Source Branch : ${params.sourceBranch}" echo "Source Commit : ${params.sourceCommit}" echo "Merge : ${params.mergeWithTarget}" if (params.mergeWithTarget) { echo "Target Branch : ${params.targetBranch}" echo "Target Repo : ${params.targetRepo}" } } } } stage('Prepare workspace') { steps { sh """ git config user.email "oaicicdteam@openairinterface.org" git config user.name "Duranta Jenkins" git remote remove internal-repo || true """ } } stage('Create testing branch for CI') { steps { sh """ # Checkout source commit git checkout -B ${params.branch} """ } } stage('Push merged branch to internal repository') { steps { sh """ git remote add internal-repo ${params.repository} || true echo "Pushing ${params.branch} to internal repo" git push --force internal-repo ${params.branch} """ } } } }