diff --git a/Jenkinsfile b/Jenkinsfile index a4ae5dd..0c74ed0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,38 +2,104 @@ pipeline { agent any environment { - GIT_CREDENTIALS = '8242519c-ed9e-447a-ad63-1f8d7368cf68' // This should be the ID of your Jenkins credentials + REGISTRY_URL = 'git.winteraccess.id' + IMAGE_NAME = 'winter-access/backend_nam' + KUBE_NAMESPACE = 'nam-backend-dev' } stages { stage('Checkout') { steps { - checkout([ - $class: 'GitSCM', - branches: [[name: '*/dev']], - doGenerateSubmoduleConfigurations: false, - extensions: [], - userRemoteConfigs: [[ - url: 'https://git.winteraccess.id/winter-access/backend_nam.git', - credentialsId: env.GIT_CREDENTIALS - ]] - ]) + git branch: 'dev', url: 'https://git.winteraccess.id/winter-access/backend_nam.git' } } - stage('Build and Deploy') { + stage('Get Short SHA') { steps { - sh 'go mod tidy' - sh 'go build -o myapp' - sh 'sudo cp myapp /home/developer/backend_nam/' + script { + env.SHORT_SHA = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim() + } } } - stage('Restart Service') { + stage('Login to Registry') { steps { - sh 'sudo systemctl daemon-reload' - sh 'sudo systemctl restart backend-nam' + script { + sh "echo ${env.REGISTRY_TOKEN} | docker login ${REGISTRY_URL} --username ${env.REGISTRY_USER} --password-stdin" + } + } + } + + stage('Build Docker Image') { + steps { + script { + sh """ + docker build -t ${REGISTRY_URL}/${IMAGE_NAME}:dev-${SHORT_SHA} \ + -t ${REGISTRY_URL}/${IMAGE_NAME}:dev \ + -t ${REGISTRY_URL}/${IMAGE_NAME}:latest \ + -f src/Dockerfile . + """ + } + } + } + + stage('Push Docker Image') { + steps { + script { + sh """ + docker push ${REGISTRY_URL}/${IMAGE_NAME}:dev-${SHORT_SHA} + docker push ${REGISTRY_URL}/${IMAGE_NAME}:dev + docker push ${REGISTRY_URL}/${IMAGE_NAME}:latest + """ + } + } + } + + stage('SonarQube Analysis') { + steps { + script { + withSonarQubeEnv('SonarQube') { + sh 'mvn sonar:sonar' + } + } + } + } + + stage('Setup Kubectl') { + steps { + script { + sh 'kubectl version --client' + } + } + } + + stage('Create Kubeconfig') { + steps { + script { + sh """ + mkdir -p \$HOME/.kube + echo "${env.KUBECONFIG}" > \$HOME/.kube/config + chmod 600 \$HOME/.kube/config + """ + } + } + } + + stage('Deploy to Kubernetes') { + steps { + script { + sh """ + kubectl apply -f deploy/kubernetes/dev.yaml + kubectl set image deployment/backend backend=${REGISTRY_URL}/${IMAGE_NAME}:dev-${SHORT_SHA} -n ${KUBE_NAMESPACE} + """ + } } } } -} \ No newline at end of file + + post { + always { + cleanWs() + } + } +}