adding workflow jenkins file

This commit is contained in:
areeqakbr 2025-02-24 14:02:13 +07:00
parent 0972d45aa7
commit 16e15bf85d
1 changed files with 85 additions and 19 deletions

102
Jenkinsfile vendored
View File

@ -2,38 +2,104 @@ pipeline {
agent any agent any
environment { 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 { stages {
stage('Checkout') { stage('Checkout') {
steps { steps {
checkout([ git branch: 'dev', url: 'https://git.winteraccess.id/winter-access/backend_nam.git'
$class: 'GitSCM',
branches: [[name: '*/dev']],
doGenerateSubmoduleConfigurations: false,
extensions: [],
userRemoteConfigs: [[
url: 'https://git.winteraccess.id/winter-access/backend_nam.git',
credentialsId: env.GIT_CREDENTIALS
]]
])
} }
} }
stage('Build and Deploy') { stage('Get Short SHA') {
steps { steps {
sh 'go mod tidy' script {
sh 'go build -o myapp' env.SHORT_SHA = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
sh 'sudo cp myapp /home/developer/backend_nam/' }
} }
} }
stage('Restart Service') { stage('Login to Registry') {
steps { steps {
sh 'sudo systemctl daemon-reload' script {
sh 'sudo systemctl restart backend-nam' 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}
"""
}
}
}
}
post {
always {
cleanWs()
}
}
}