jenkinsfile

This commit is contained in:
2026-02-14 04:07:50 +00:00
parent e9b410fd62
commit 4526d164ef

102
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,102 @@
pipeline {
agent any
environment {
// --- Shared Configuration ---
HARBOR_URL = 'harbor.example.com'
HARBOR_PROJECT = 'my-todo-app'
HARBOR_CREDS = 'harbor-credentials-id'
K8S_CREDENTIALS_ID = 'k8s-kubeconfig'
// Build Tag
IMAGE_TAG = "${env.BUILD_ID}"
}
stages {
stage('Parallel Build & Deploy') {
parallel {
stage('Backend Service') {
environment {
SERVICE_NAME = 'todo-backend'
DIR = 'backend'
FULL_IMAGE_PATH = "${HARBOR_URL}/${HARBOR_PROJECT}/${SERVICE_NAME}:${IMAGE_TAG}"
}
stages {
stage('Backend: Test') {
steps {
dir("${env.DIR}") {
sh 'npm install'
sh 'npm test || true'
}
}
}
stage('Backend: Push & Deploy') {
steps {
dir("${env.DIR}") {
script {
// Build & Push
sh "docker build -t ${FULL_IMAGE_PATH} ."
withCredentials([usernamePassword(credentialsId: "${HARBOR_CREDS}", usernameVariable: 'USER', passwordVariable: 'PASS')]) {
sh "docker login ${HARBOR_URL} -u ${USER} -p ${PASS}"
sh "docker push ${FULL_IMAGE_PATH}"
}
// K8s Deploy
sh "sed 's|IMAGE_PATH_PLACEHOLDER|${FULL_IMAGE_PATH}|g' k8s-deployment.yaml > backend-k8s-applied.yaml"
sh "kubectl apply -f backend-k8s-applied.yaml"
sh "kubectl rollout status deployment/${SERVICE_NAME}"
}
}
}
}
}
}
stage('Frontend Service') {
environment {
SERVICE_NAME = 'todo-frontend'
DIR = 'frontend'
FULL_IMAGE_PATH = "${HARBOR_URL}/${HARBOR_PROJECT}/${SERVICE_NAME}:${IMAGE_TAG}"
}
stages {
stage('Frontend: Test') {
steps {
dir("${env.DIR}") {
sh 'npm install'
sh 'npm test || true'
}
}
}
stage('Frontend: Push & Deploy') {
steps {
dir("${env.DIR}") {
script {
// Build & Push
sh "docker build -t ${FULL_IMAGE_PATH} ."
withCredentials([usernamePassword(credentialsId: "${HARBOR_CREDS}", usernameVariable: 'USER', passwordVariable: 'PASS')]) {
sh "docker login ${HARBOR_URL} -u ${USER} -p ${PASS}"
sh "docker push ${FULL_IMAGE_PATH}"
}
// K8s Deploy
sh "sed 's|IMAGE_PATH_PLACEHOLDER|${FULL_IMAGE_PATH}|g' k8s-deployment.yaml > frontend-k8s-applied.yaml"
sh "kubectl apply -f frontend-k8s-applied.yaml"
sh "kubectl rollout status deployment/${SERVICE_NAME}"
}
}
}
}
}
}
}
}
}
post {
always {
sh "docker logout ${HARBOR_URL} || true"
// Cleanup temporary manifest files
sh "rm -f backend/backend-k8s-applied.yaml frontend/frontend-k8s-applied.yaml"
}
}
}