pipeline {
agent {
label 'jenkins-dev-prod'
}
parameters {
choice(name: 'stage', choices: ['qa', 'pr'], description: 'Ambiente')
string(name: 'name_cluster', description: 'Cluster Ambiente')
string(name: 'namespace', description: 'Namespace')
choice(name: 'zone', choices: ['us-central1-b', 'us-central1-c','us-central1-a','us-central1-f'], description: 'Zona de despliegue')
choice(name: 'project', choices:['nutresa-165613', 'nutresa-lab', 'nutresa-prod'], description: 'Proyecto')
}
environment{
CREDENTIALQA = credentials('GCP_QA')
CREDENTIALPR = credentials('GCP_PR')
}
stages {
stage("Get Code"){
steps{
deleteDir()
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], gitTool: 'GitDefault', submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gitlab-infra', url: 'http://gitlab.gruponutresa.com/infra-as-code/deploy-efact-pr.git']]])
}
}
stage("Prepare Environment"){
steps{
script{
if(stage == 'qa'){
env.PROJECT_GCP="nutresa-lab"
env.CREDENTIALS=CREDENTIALQA
} else if(stage == 'pr'){
env.PROJECT_GCP="nutresa-prod"
env.CREDENTIALS=CREDENTIALPR
}
}
}
}
stage("Connect to Cluster") {
steps{
sh "gcloud container clusters get-credentials ${params.name_cluster} --zone ${params.zone} --project ${params.project}"
}
}
stage("Create Namespace") {
steps{ sh "kubectl create ns ${params.namespace}"
}
}
stage("Deploy ConfigMap"){
steps{
sh "kubectl apply -f configmap.yaml"
}
}
stage("Deploy Secrets"){
steps{
sh "kubectl apply -f secrets.yaml"
}
}
stage("Deploy Application") {
steps{
sh "kubectl apply -f deployment.yaml"
}
}
stage("Expose Application") {
steps{
sh "kubectl apply -f loadBalancer.yaml"
}
}
}
}