From 4526d164ef6c4436e8a612b34313dfd56ea4ed8a Mon Sep 17 00:00:00 2001 From: gitea_admin Date: Sat, 14 Feb 2026 04:07:50 +0000 Subject: [PATCH] jenkinsfile --- Jenkinsfile | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..5fe4e2b --- /dev/null +++ b/Jenkinsfile @@ -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" + } + } +}