node{

    properties(
        [
            pipelineTriggers([pollSCM('H/2 * * * *')]),
            disableConcurrentBuilds()
        ]
    )
    
    stage('Clone repository'){
        checkout scm

    }
    
    stage('Configuration'){

        repoName = 'foryou-vc-api-gateway'
        appName = repoName + '-' + env.BRANCH_NAME
        buildNumber = '1.0.' + env.BUILD_NUMBER
        dockerImage = env.Job_Name
        dockerRepo = 'gcr.io/giant-rnd/foryou/'
        dockerImageFullname = dockerRepo + dockerImage +':' + buildNumber
        
        echo "${dockerImageFullname}"

        sh "export appName=${appName} && export dockerImage=${dockerImage} && export dockerImageFullname=${dockerImageFullname} && envsubst < build/foryou-vc-api-gateway-demo-deployment.yaml > foryou-vc-api-gateway-demo-deployment.yaml"
    }

    stage('Build image'){
        app = docker.build("${dockerImageFullname}")
    }
    
    stage('Push image'){
        docker.withRegistry('https://gcr.io', 'gcr:giant-rnd') {
            app.push("${buildNumber}")
            app.push("latest")
        }   
    }

    stage ('Deploy to Demo'){
        def kubectlDocker = docker.image('gcr.io/giant-rnd/fx-kubectl:1.1')
        kubectlDocker.inside("-e repoName=${repoName} -e appName=${appName}") {
            withCredentials([[$class: "FileBinding", credentialsId: 'giant-alpha-kubeconfig', variable: 'KUBE_CONFIG'],
            [$class: "FileBinding", credentialsId: 'giant-rnd-gcr', variable: 'KEY_FILE']])
            {                
                sh 'kubectl --kubeconfig=${KUBE_CONFIG} apply -f foryou-vc-api-gateway-demo-deployment.yaml'
                sh 'kubectl --kubeconfig=${KUBE_CONFIG} apply -f build/foryou-vc-api-gateway-demo-external-service.yaml'
            }
        }

        echo "Service Deployed."
        echo "browse: http://vc-api-gateway-alpha.foryoubiz.com/${dockerImage}"	
    }
    
    stage('Completed'){
        echo "Completed"
    }
}
