Files
devops-lib-gcp/vars/gcpMigration.groovy
T
Mukul Sharma 83cbf62ec6 Rename com.meesho/org.meesho namespace to com.homelab/org.homelab
Renames src/com/meesho -> src/com/homelab, resources/com/meesho ->
resources/com/homelab, resources/org/meesho -> resources/org/homelab
(via git mv, preserving history), and sweeps every remaining
occurrence of "meesho" (any casing) out of package declarations,
imports, libraryResource() paths, and comments across the whole repo.

Also drops the per-user allowlist in vars/eksCICD.groovy, which
hardcoded real former-colleagues' emails and doesn't apply to a
single-person homelab — that branch is now permanently skipped rather
than deleted outright, to avoid hand-editing the escape-sequence-heavy
echo blocks it guards (eksCICD.groovy itself is unused legacy code,
not called by homelabPipeline.groovy).

Does not touch the ~114 files that were already missing from the
working tree but still tracked in the prior commit — that's unrelated
pre-existing state, left as-is.
2026-09-02 01:24:37 +05:30

279 lines
19 KiB
Groovy

import com.homelab.utilities.gitActions
import com.homelab.utilities.buTeamMapping
import com.homelab.utilities.getYamlParameter
import com.homelab.utilities.constructTemplate
import com.homelab.stages.multiBranchPipeline
import com.homelab.stages.deployArgoCD
def call(Map params){
podTemplate(yaml: libraryResource('org/homelab/pod.yaml')) {
node(POD_LABEL) {
container('devops-tools') {
timestamps{
ansiColor("xterm"){
env.GITHUB_CRED = 'svc-devops-homelab'
def gitObj = new gitActions()
def bu_team_obj = new buTeamMapping()
def constructObj = new constructTemplate()
def application_info_map = [:]
def repo_bu = ""
stage('App Repo: cloning the repo'){
gitObj.clone("${WORKSPACE}", params.repo_name, params.repo_main_branch)
}
stage('APP Repo: Create Jenkinsfile(gcp-main)'){
if (!params.skip_jenkinsfile){
def repo_branch_name = "gcp-main"
def config = ["repo_name":params.repo_name]
gitObj.branchCheckOut(params.repo_name, repo_branch_name)
dir(params.repo_name){
sh "chmod 777 Jenkinsfile"
constructObj.renderTemplate(config, 'Jenkinsfile', 'Jenkinsfile')
gitObj.add('.', 'Jenkinsfile')
}
def commit_status = gitObj.codeCommit(repo_name, repo_branch_name, 'Generating build and deployments files')
if (commit_status == 0) {
gitObj.codePush(repo_name, repo_branch_name)
}
}
else {
log.info("skipping this stage")
}
}
stage('Helm Repo: Update values_property file'){
def yaml_obj = new getYamlParameter()
gitObj.clone("${WORKSPACE}","devops-helm-charts","main")
def helm_repo_name = "devops-helm-charts"
def helm_checkout_branch = "gcp-migration-${params.repo_name}-${env.BUILD_NUMBER}"
def repo_branch_name = "gcp-main"
gitObj.branchCheckOut("devops-helm-charts", helm_checkout_branch)
gitObj.branchCheckOut(params.repo_name, repo_branch_name)
def build_config = yaml_obj.getParam(params.repo_name)
if (build_config['copy_file'] || (build_config['environment'] && build_config['environment']['prd']['copy_file'])){
// voilating naming convention willing to avoid confilct with deployment variables
log.info("Checking copy_file path")
def buSrt = bu_team_obj.get_bu_initials(build_config["bu"])
def teamSrt = bu_team_obj.get_team_initials(build_config["team"])
def copy_path = (build_config['copy_file'])? build_config.copy_file.path : build_config.environment.prd.copy_file.path
if (copy_path.startsWith("gs:")){
log.info("Copy file path already pointing to gcs")
} else {
def file_name = copy_path.split('/')[-1]
def new_path = "gs://gcs-${buSrt}-${teamSrt}-config-prd/${params.repo_name}/${file_name}"
if(build_config.copy_file){
build_config.copy_file.path = new_path
} else {
build_config.environment.prd.copy_file.path = new_path
}
dir(params.repo_name){
sh "chmod 777 config.yaml"
writeYaml file: 'config.yaml', data: build_config, overwrite: true
}
gitObj.add(params.repo_name, 'config.yaml')
def config_commit = gitObj.codeCommit(repo_name, repo_branch_name, 'Changed copy_file path to gcs')
if (config_commit == 0) {
gitObj.codePush(repo_name, repo_branch_name)
}
log.warning("Path for copy_file has been changed to gcs. Please upload the contents to ${new_path} from ${copy_path}")
}
}
if (build_config.containsKey('environment')) {
Map envrionment_config = build_config['environment'].collectEntries { key, value -> "prd".matches(key)? value: [:]}
build_config.remove('environment')
build_config.putAll(envrionment_config)
}
repo_bu = build_config.bu
env.skip_user_input = params.skip_userinput
def wait_obj = new deployArgoCD()
def deployment_order = build_config.deployment_order
timeout(unit: 'SECONDS', time: 300) {
userInput = wait_obj.wait_for_user_input(build_config.deployment_order)
}
if (userInput == '') {
log.info('No Deployments selected. Running remaining steps.')
return
}
else if (!userInput.contains('All')) {
deployment_order = userInput.split(',') as List
}
for (deployment in deployment_order){
def application_config = yaml_obj.getParam(params.repo_name,"deployments/${deployment}.yaml")
def bu_short = bu_team_obj.get_bu_initials(application_config["bu"])
def BU = application_config["bu"]
def team_short = bu_team_obj.get_team_initials(application_config["team"])
//def app_name_short = application_config.app_name.substring(0, Math.min(originalString.length(), 15))
def app_name_short = application_config.app_name
def values_version = env.cicd_environment == 'prd' ? 'values_v3' : 'values_v2'
def value_properties_path = "${values_version}/${bu_short}/${team_short}/${deployment}/values_properties.yaml"
def value_properties_content = yaml_obj.getParam(helm_repo_name,value_properties_path)
def canary_default = ['progressDeadlineSeconds': 300,'analysisInterval': '120s','analysisThreshold': 5,'analysisMaxWeight': 5,'analysisStepWeight': 5,'analysisMetrics':['thresholdRangeMin': 0.99,'interval': '1m'],'skipAnalysis': true]
// Set/change value_properties values for migration
value_properties_content['as_min']= 1
log.info("Setting canary skipAnalysis to true")
if (value_properties_content['canary']){
value_properties_content['canary']['skipAnalysis'] = true
} else {
value_properties_content['canary'] = canary_default
}
log.info("Canary skipAnalysis has been set to true")
log.info("set min and nodeselector")
if (value_properties_content['ingress_class']!= "contour-external"){
if(value_properties_content['host']){
value_properties_content.host = application_config['app_name']+".prd.homelab.int"
}
else if(value_properties_content.hosts){
for (host_arr in value_properties_content.hosts){
host_arr.host = application_config['app_name']+".prd.homelab.int"
}
}
if (application_config.priority_v2 == "up0" || application_config.priority_v2 == "sp0" || application_config.priority_v2 == "cp0"){
value_properties_content.ingress_class = "contour-internal-0"
}
else{
value_properties_content.ingress_class = "contour-internal-1"
}
}
else if (value_properties_content['ingress_class'] == "external"){
value_properties_content.ingress_class = "contour-external"
}
log.info("set host")
if (value_properties_content.serviceAccount){
value_properties_content.serviceAccount.annotations.remove('eks.amazonaws.com/role-arn')
value_properties_content.serviceAccount.annotations['iam.gke.io/gcp-service-account'] = "sa-${bu_short}-prd-${app_name_short}@homelab-${BU}-prd-0622.iam.gserviceaccount.com"
}
log.info("set service account")
dir(helm_repo_name){
sh "chmod 777 ${value_properties_path}"
writeYaml file: value_properties_path, data: value_properties_content, overwrite: true
}
def host = (value_properties_content.host)? value_properties_content.host : value_properties_content.hosts[0].host
log.info(host)
application_info_map[application_config.app_name]=[
"bu": application_config.bu,
"team": application_config.team,
"host": host,
"ingress_class": value_properties_content.ingress_class
]
log.info(application_info_map)
gitObj.add(helm_repo_name,value_properties_path)
}
commit_status = gitObj.codeCommit(helm_repo_name, helm_checkout_branch, "Modified all application of ${params.repo_name} repo")
if (commit_status == 0) {
try{
gitObj.codePush(helm_repo_name, helm_checkout_branch)
}
catch(Exception e){
log.error("Error in code push")
return
}
try{
pr_num = gitObj.createPR(params.repo_name, helm_repo_name, "main", helm_checkout_branch, "Merge ${params.repo_name} changes")
gitObj.mergePR(helm_repo_name, pr_num, helm_checkout_branch)
gitObj.deleteBranch(helm_repo_name, "main", helm_checkout_branch)
}
catch(Exception ex){
log.error("error in code push")
log.error(ex)
log.info("Deleting the branch")
gitObj.deleteBranch(helm_repo_name, "main", helm_checkout_branch)
}
}
}
stage('Jenkins: Create Jenkins job'){
def job_obj = new multiBranchPipeline()
job_obj.applicationOnboard(repo_bu,params.repo_name)
log.info("Jenkins job created")
}
// stage('GCP: Create DNS record'){
// def zone="pvt-homelab-admin-prd-homelab-int"
// def project="homelab-admin-prd-0622"
// def app_name_list = application_info_map.collect{ it.key }
// log.info(app_name_list)
// for (app_name in app_name_list) {
// def host=application_info_map[app_name].host
// def ingress_class=application_info_map[app_name].ingress_class
// def BU=application_info_map[app_name].bu
// def dns_status= sh(script: "gcloud dns --project=${project} record-sets describe ${host} --zone=${zone} --type='CNAME' ",returnStatus: true)
// if( dns_status != 0 ){
// dns_status = sh(script: "gcloud dns --project=${project} record-sets create ${host} --zone=${zone} --type=CNAME --ttl='300' --rrdatas='${ingress_class}.${BU}.prd.prd.homelab.int.' ",returnStatus: true)
// if(dns_status == 0 ){
// log.info("DNS recordSet ${host} created successfully")
// }
// else{
// log.info("DNS recordset failed with status ${dns_status}")
// }
// }
// }
// }
// stage('GCP: Create workload identity'){
// def bu_short=bu_team_obj.get_bu_initials(application_info_map[app_name].bu)
// def BU = application_info_map[app_name].bu
// def project="homelab-${BU}-prd-0622"
// def app_name_list = application_info_map.collect{ it.key }
// for (app_name in app_name_list){
// if (params.provide_service_role){
// //def app_name_short= app_name.substring(0, Math.min(originalString.length(), 15))
// def app_name_short=app_name
// def sa = "sa-${bu_short}-prd-${app_name_short}"
// sh(script: "gcloud iam service-accounts create ${sa} --display-name='service account for ${app_name}' --project=${project} ")
// sh(script: "gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member 'serviceAccount:${sa}@homelab-${BU}-prd-0622.iam.gserviceaccount.com' --project=homelab-${BU}-prd-0622")
// sh(script: "gcloud iam service-accounts add-iam-policy-binding --role roles/${params.SA_role} --member 'serviceAccount:${sa}@homelab-${BU}-prd-0622.iam.gserviceaccount.com' --project=homelab-${BU}-prd-0622")
// }
// }
// }
stage('CoreDNS: Add entry for svc-svc'){
def yaml_obj = new getYamlParameter()
def coredns_repo_name = "devops-infra-helm-charts"
def coredns_checkout_branch = "gcp-migration-${params.repo_name}-${env.BUILD_NUMBER}"
gitObj.clone("${WORKSPACE}",coredns_repo_name,"main")
gitObj.branchCheckOut(coredns_repo_name, coredns_checkout_branch)
def coredns_path= "helm-templates/coredns/values.yaml"
def coredns_content = yaml_obj.getParam(coredns_repo_name,coredns_path)
def app_name_list = application_info_map.collect{ it.key }
for (app_name in app_name_list) {
def host=application_info_map[app_name].host
def ingress_class=application_info_map[app_name].ingress_class
def BU=application_info_map[app_name].bu
coredns_content.rewrites[host]="${ingress_class}-${BU}-prd"
log.info("coredns entry for ${host} is set")
dir(coredns_repo_name){
sh "chmod 777 ${coredns_path}"
writeYaml file: coredns_path, data: coredns_content, overwrite: true
}
gitObj.add(coredns_repo_name,coredns_path)
}
commit_status = gitObj.codeCommit(coredns_repo_name, coredns_checkout_branch, "Modified all application of ${params.repo_name} repo")
if (commit_status == 0) {
try{
gitObj.codePush(coredns_repo_name, coredns_checkout_branch)
}
catch(Exception e){
log.error("Error in code push")
return
}
try{
pr_num = gitObj.createPR(params.repo_name, coredns_repo_name, "main", coredns_checkout_branch, "Merge ${params.repo_name} changes")
gitObj.mergePR(coredns_repo_name, pr_num, coredns_checkout_branch)
gitObj.deleteBranch(coredns_repo_name, "main", coredns_checkout_branch)
}
catch(Exception ex){
log.error("error in code push")
log.error(ex)
log.info("Deleting the branch")
gitObj.deleteBranch(coredns_repo_name, "main", coredns_checkout_branch)
}
}
}
}
}
}
}
}
}