@Library(['jlib']) _

node("docker") {
    // Временная метка в логе Jenkins
    timestamps() {
        // Цветные букавы в логе Jenkins
        ansiColor("xterm"){
            // Получаем актуальную версию репы, где лежит пайп
            checkout scm

            stage("Prepare environments") {
                if (env.BRANCH_NAME == 'master') 
                    envConfig = "build/vars/master.yaml"
                else if (env.BRANCH_NAME == 'dev')
                    envConfig = "build/vars/dev.yaml"
                else
                    error("Unsupported branch: ${env.BRANCH_NAME}")
                
                support.getVarsV2(envConfig)
                println "Success prepare"
            }

            stage("Build image") {
                println "Start building image ${env.registryContainerName}:${env.version}"

                app = docker.build("${env.registryContainerName}:${env.version}", "--no-cache -f ./build/Dockerfile .")
                
                println "Start uploading image ${env.registryContainerName}:${env.version} to Nexus"
                docker.withRegistry("https://${registryUrl}", "nexus-jenkins-cred") {
                    app.push("${env.version}")
                    app.push("latest")
                }
                
            }

            stage("Update version in Kubernetes") {
                dir ("build") {
                    // Надо создать пачку кредов в Jenkins, а также пространство с кредами подключения в Vault
                    creds = ["auth", "certificate", "key", "k8scluster", "endpoint"]

                    creds.each { cred ->
                        withCredentials([vaultString(credentialsId: "${env.registryContainerName}-${cred}-${stand}", variable: "key")]) {
                            env."${cred}" = key
                        }
                    }
                    convertJinja("auth.config.tmpl", "auth.config")
                    convertJinja("microservice.yaml.tmpl", "microservice.yaml")
                    
                    sh "kubectl --kubeconfig=auth.config get pods --namespace ${env.namespace}"
                    sh "kubectl --kubeconfig=auth.config apply -f microservice.yaml"
                }
            } 
            
            println "Success build job. Now start cleanup"

            cleanWs(
                deleteDirs: true,
                disableDeferredWipeout: true
            )
        }
    }
}
