This commit is contained in:
2026-05-09 14:29:38 +07:00
parent 76f8ee11f7
commit 548a43de01
7 changed files with 214 additions and 42 deletions
Vendored
+111
View File
@@ -0,0 +1,111 @@
pipeline {
agent any
environment {
MAVEN_CACHE = "${env.WORKSPACE}/.m2"
NPM_CACHE = "${env.WORKSPACE}/.npm-cache"
SONAR_TOKEN = credentials('sonar-token')
}
options {
ansiColor('xterm')
timestamps()
skipStagesAfterUnstable()
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Backend: Build & Test') {
agent {
docker {
image 'maven:3.9.9-eclipse-temurin-21'
args "-v ${env.WORKSPACE}/.m2:/root/.m2"
}
}
environment {
MAVEN_OPTS = '-Dmaven.repo.local=/root/.m2/repository'
}
steps {
dir('backend') {
sh './mvnw --version'
sh './mvnw clean test -Dmaven.repo.local=/root/.m2/repository'
sh './mvnw package -DskipTests -Dmaven.repo.local=/root/.m2/repository'
}
}
post {
always {
junit 'backend/target/surefire-reports/*.xml'
}
}
}
stage('Backend: SonarQube Analysis') {
agent {
docker {
image 'maven:3.9.9-eclipse-temurin-21'
args "-v ${env.WORKSPACE}/.m2:/root/.m2"
}
}
steps {
withSonarQubeEnv('SonarQube') {
dir('backend') {
sh './mvnw sonar:sonar -Dsonar.projectKey=code-journey-backend -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_TOKEN} -Dmaven.repo.local=/root/.m2/repository'
}
}
}
}
stage('Frontend: Install & Build') {
agent {
docker {
image 'node:20-alpine'
args "-v ${env.WORKSPACE}/.npm-cache:/root/.npm -u root"
}
}
steps {
dir('frontend') {
sh 'npm ci --cache /root/.npm --prefer-offline'
sh 'npm run build'
}
}
}
stage('Frontend: SonarQube Analysis') {
agent {
docker {
image 'node:20-alpine'
args "-v ${env.WORKSPACE}/.npm-cache:/root/.npm -u root"
}
}
steps {
withSonarQubeEnv('SonarQube') {
dir('frontend') {
sh 'npm install -g sonar-scanner'
sh 'sonar-scanner -Dsonar.projectKey=code-journey-frontend -Dsonar.sources=src -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_TOKEN}'
}
}
}
}
stage('Docker: Build Images') {
when {
anyOf {
branch 'main'
branch 'develop'
}
}
agent {
docker {
image 'docker:24.0.5-dind'
args '--privileged -v /var/run/docker.sock:/var/run/docker.sock'
}
}
steps {
sh 'docker build -t code-journey-backend:latest backend'
sh 'docker build -t code-journey-frontend:latest frontend'
}
}
}
post {
always {
archiveArtifacts artifacts: 'backend/target/*.jar,frontend/.next/**', allowEmptyArchive: true
}
}
}