void run()

in src/com/epam/digital/data/platform/pipelines/stages/impl/deleteRelease/CleanUpTrigger.groovy [28:130]


    void run() {

        LinkedHashMap parallelDeletion = [:]
        boolean deleteRegistryRegulationsGerritRepo = context.getParameterValue("DELETE_REGISTRY_REGULATIONS_GERRIT_REPOSITORY", "false").toBoolean()

        context.logger.info("Calculate the timeout for cleanup job")
        int registryRegulationsVersions = context.script.sh(script: "oc -n ${context.namespace} get codebases " +
                "--no-headers | wc -l ", returnStdout: true).trim().toInteger()
        int cleanUpTimeout = (registryRegulationsVersions == 0) ? 5 : registryRegulationsVersions * 3
        context.logger.info("Timeout is $cleanUpTimeout minutes")

        parallelDeletion["clearDataFromRegulationManagement"] = {
            ArrayList registryRegulationManagementPods = context.script.sh(script: "kubectl get pod -l app=registry-regulation-management " +
                    "-o jsonpath='{range .items[*]}{.metadata.name}{\"\\n\"}{end}' -n ${context.namespace}", returnStdout: true).tokenize('\n')
            String registryRegulationManagementPodRepositoriesData = context.script.sh(script: "kubectl get pod -l app=registry-regulation-management " +
                    "-o jsonpath='{.items[*].spec.containers[*].volumeMounts[?(@.name==\"repositories-data\")].mountPath}' -n ${context.namespace}", returnStdout: true).trim()

            registryRegulationManagementPods.each { pod ->
                context.script.sh(script: "kubectl exec -n ${context.namespace} ${pod} -c registry-regulation-management -- bash -c \'rm -rf ${registryRegulationManagementPodRepositoriesData}/*\'")
            }
        }

        // Remove multiple-version of data-services
        parallelDeletion["removeDataServices"] = {
            context.logger.info("Removing Data Services codebasebranches")
            try {
                context.script.timeout(unit: 'MINUTES', time: cleanUpTimeout) {
                    context.platform.deleteObject(Codebase.CODEBASEBRANCH_CR, "-l type=data-component")
                    context.platform.deleteObject(Codebase.CODEBASE_CR, "-l type=data-component")
                }
            } catch (any) {
                context.script.error("Cannot gracefully remove data services codebase and codebasebranch CRs")
            }
        }

        parallelDeletion["removeHistoryExcerptor"] = {
            context.logger.info("Removing ${context.codebase.historyName} codebasebranch and codebase CRs")
            try {
                context.script.timeout(unit: 'MINUTES', time: cleanUpTimeout) {
                    context.platform.deleteObject(Codebase.CODEBASEBRANCH_CR, "-l affiliatedWith=$context.codebase.historyName")
                    context.platform.deleteObject(Codebase.CODEBASE_CR, context.codebase.historyName)
                }
            } catch (any) {
                context.script.error("Cannot gracefully remove ${context.codebase.historyName} codebase and codebasebranch CRs")
            }
        }

        parallelDeletion["cleanUpNexus"] = {
            context.logger.info("Remove artifacts from Nexus repositories")
            ["Cleanup service":true, "docker-delete-unused-manifest-and-tags":true,
             "rebuild-repository-index":true, "compact-blobstore-docker-registry":true,
             "compact-blobstore-edp-maven":true].each { taskName, waitTask ->
                context.cleanup.triggerManualNexusTask(taskName, waitTask)
            }
        }
        context.script.parallel(parallelDeletion)

        if (deleteRegistryRegulationsGerritRepo) {
            try {
                context.script.timeout(unit: 'MINUTES', time: 10) {
                    context.logger.info("Removing ${context.codebase.name} codebasebranch and codebase CRs")
                    context.platform.deleteObject(Codebase.CODEBASEBRANCH_CR, "-l affiliatedWith=$context.codebase.name")
                    context.platform.deleteObject(Codebase.CODEBASE_CR, context.codebase.name)
                    context.platform.deleteObject("secret", "registry-regulation-state")
                }
            } catch (any) {
                context.script.error("Cannot gracefully remove ${context.codebase.name} codebase, codebasebranch CRs or registry-regulation-state secret")
            }
            context.logger.info("Removing ${context.codebase.name} repo")
            context.gitServer.deleteRepository(context.codebase.name)

            context.logger.info("Create ${context.codebase.name} and ${redashJobName} resources")
            context.cleanup.createTempSecret(context.codebase.name)
            context.cleanup.createResource(context.codebase.name)
            context.cleanup.createResource(redashJobName)
        } else {
            try {
                context.logger.info("Execute Delete-release-${context.codebase.name} pipeline")
                context.script.build job: "${context.codebase.name}/Delete-release-${context.codebase.name}",
                        wait: true, propagate: true
            } catch (any) {
                context.script.error("Delete-release-${context.codebase.name} pipeline has been failed")
            }
            try {
                context.logger.info("Recreate ${redashJobName} job")
                context.cleanup.createResource(redashJobName)
                context.script.retry(3) {
                    context.platform.waitFor("job/${redashJobName}", "condition=complete", "60s")
                }
                context.logger.info("Execute Build-${context.codebase.name} pipeline")
                context.script.build job: "${context.codebase.name}/MASTER-Build-${context.codebase.name}",
                        wait: false, propagate: true, parameters: [[$class: 'BooleanParameterValue',
                                                                    name  : 'FULL_DEPLOY', value: true]]
            } catch (any) {
                context.script.error("MASTER-Build-${context.codebase.name} pipeline has been failed")
            }
        }

        context.logger.info("Creating ${context.codebase.historyName} codebase resources")
        context.cleanup.createTempSecret(context.codebase.historyName)
        context.cleanup.createResource(context.codebase.historyName)

    }