NAM-APJATEL-BACKEND/Jenkinsfile

118 lines
4.0 KiB
Groovy

pipeline {
agent {
kubernetes {
yaml '''
apiVersion: v1
kind: Pod
spec:
containers:
- name: docker
image: docker:latest
command:
- cat
tty: true
volumeMounts:
- name: docker-sock
mountPath: /var/run/docker.sock
- name: kubectl
image: bitnami/kubectl:latest
command:
- cat
tty: true
volumes:
- name: docker-sock
hostPath:
path: /var/run/docker.sock
'''
}
}
environment {
REGISTRY_URL = 'git.winteraccess.id'
IMAGE_NAME = 'winter-access/backend_nam'
KUBE_CONFIG_ID = '1c8bd8d9-1590-468c-afc7-24495d4330dc'
CREDENTIALS_ID = '45c25ade-b1f8-455b-bdd6-e11ff141b70c'
DOCKERUSRPASS = '08063d26-0005-4942-9b87-9d819a13b973'
}
stages {
stage('Checkout Code') {
steps {
git branch: 'dev', url: 'https://git.winteraccess.id/winter-access/backend_nam.git', credentialsId: "${CREDENTIALS_ID}"
}
}
stage('Get Short SHA') {
steps {
script {
env.SHORT_SHA = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
}
}
}
stage('Login to Docker Registry') {
steps {
container('docker'){
withCredentials([usernamePassword(credentialsId: "08063d26-0005-4942-9b87-9d819a13b973",
usernameVariable: 'DOCKER_USER',
passwordVariable: 'DOCKER_PASS')]) {
sh "docker login -u ${DOCKER_USER} -p ${DOCKER_PASS} ${REGISTRY_URL}"
}
}
}
}
stage('Build and Push Docker Image') {
steps {
container('docker') { // Runs in the Docker container inside Kubernetes
script {
def imageTag = "dev-${env.SHORT_SHA}"
sh """
docker build -t ${REGISTRY_URL}/${IMAGE_NAME}:${imageTag} \
-t ${REGISTRY_URL}/${IMAGE_NAME}:dev \
-t ${REGISTRY_URL}/${IMAGE_NAME}:latest \
-f deploy/docker/Dockerfile .
docker push ${REGISTRY_URL}/${IMAGE_NAME}:${imageTag}
docker push ${REGISTRY_URL}/${IMAGE_NAME}:dev
docker push ${REGISTRY_URL}/${IMAGE_NAME}:latest
"""
}
}
}
}
stage('Deploy to Kubernetes') {
steps {
container('kubectl') {
script {
// Print container info for diagnostics
sh 'echo "Running in $(hostname) with kubectl version: $(kubectl version --client)"'
withCredentials([file(credentialsId: "${KUBE_CONFIG_ID}", variable: 'KUBE_CONFIG')]) {
// Copy kubeconfig to a location with proper permissions
sh 'mkdir -p ~/.kube'
sh 'cp $KUBE_CONFIG ~/.kube/config'
sh 'chmod 600 ~/.kube/config'
// Apply deployment with proper error handling
sh """
set -xe
kubectl apply -f deploy/kubernetes/dev.yaml
kubectl set image deployment/backend backend=${REGISTRY_URL}/${IMAGE_NAME}:dev-${env.SHORT_SHA} -n nam-backend-dev
kubectl rollout status deployment/backend -n nam-backend-dev --timeout=60s
"""
}
}
}
}
}
}
post {
always {
cleanWs()
}
}
}