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.
279 lines
19 KiB
Groovy
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)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|