updated jenekinsfile2
Some checks failed
DevSecOps-Multibranch/pipeline/head There was a failure building this commit
Some checks failed
DevSecOps-Multibranch/pipeline/head There was a failure building this commit
more updates
This commit is contained in:
97
Jenkinsfile
vendored
97
Jenkinsfile
vendored
@@ -1,40 +1,99 @@
|
|||||||
pipeline {
|
pipeline {
|
||||||
agent any
|
// 1. Run on your specific agent
|
||||||
|
agent { label 'jenkins-agent' }
|
||||||
|
|
||||||
|
environment {
|
||||||
|
REGISTRY_URL = 'registry.digitalocean.com/kongseng'
|
||||||
|
|
||||||
|
// 2. Dynamic Naming: Image tag includes Branch Name to prevent conflicts
|
||||||
|
// Example: registry.../backend:Dev-42 or registry.../backend:main-42
|
||||||
|
BACKEND_IMAGE = "${REGISTRY_URL}/devsecops-backend:${env.BRANCH_NAME}-${env.BUILD_NUMBER}"
|
||||||
|
FRONTEND_IMAGE = "${REGISTRY_URL}/devsecops-frontend:${env.BRANCH_NAME}-${env.BUILD_NUMBER}"
|
||||||
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
stage('Checkout') {
|
stage('Checkout') {
|
||||||
steps {
|
steps {
|
||||||
checkout scm
|
checkout scm
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('Install Dependencies') {
|
stage('Install Dependencies') {
|
||||||
steps {
|
steps {
|
||||||
sh 'npm install' // or mvn install / pip install
|
echo "Installing dependencies for ${env.BRANCH_NAME} branch..."
|
||||||
|
dir('backend') { sh 'npm install' }
|
||||||
|
dir('frontend') { sh 'npm install' }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('SAST - Semgrep') {
|
stage('Build Docker Images') {
|
||||||
steps {
|
steps {
|
||||||
sh 'semgrep scan --config auto --json > semgrep-report.json || true'
|
script {
|
||||||
}
|
echo "Building Images for branch: ${env.BRANCH_NAME}..."
|
||||||
post {
|
sh "docker build -t ${BACKEND_IMAGE} ./backend"
|
||||||
always {
|
sh "docker build -t ${FRONTEND_IMAGE} ./frontend"
|
||||||
archiveArtifacts artifacts: 'semgrep-report.json'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('Unit Tests') {
|
stage('Push to Registry') {
|
||||||
steps {
|
steps {
|
||||||
sh 'npm test || true'
|
script {
|
||||||
|
echo "Pushing images to DigitalOcean..."
|
||||||
|
sh "docker push ${BACKEND_IMAGE}"
|
||||||
|
sh "docker push ${FRONTEND_IMAGE}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- DYNAMIC DEPLOYMENT ---
|
||||||
|
stage('Deploy') {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
// Define ports and names based on the branch
|
||||||
|
def appPort = "3000" // Fallback
|
||||||
|
def containerName = "backend-app"
|
||||||
|
|
||||||
|
if (env.BRANCH_NAME == 'Dev') {
|
||||||
|
appPort = "3001"
|
||||||
|
containerName = "backend-dev"
|
||||||
|
echo "Deploying to DEV Environment (Port 3001)"
|
||||||
|
}
|
||||||
|
else if (env.BRANCH_NAME == 'Release') {
|
||||||
|
appPort = "3002"
|
||||||
|
containerName = "backend-release"
|
||||||
|
echo "Deploying to STAGING Environment (Port 3002)"
|
||||||
|
}
|
||||||
|
else if (env.BRANCH_NAME == 'main') {
|
||||||
|
appPort = "3003"
|
||||||
|
containerName = "backend-prod"
|
||||||
|
echo "Deploying to PRODUCTION Environment (Port 3003)"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Logic for any future feature branches
|
||||||
|
appPort = "3004"
|
||||||
|
containerName = "backend-feature-${env.BRANCH_NAME}"
|
||||||
|
echo "Deploying Feature Branch"
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. Clean up old container
|
||||||
|
try {
|
||||||
|
sh "docker stop ${containerName} || true"
|
||||||
|
sh "docker rm ${containerName} || true"
|
||||||
|
} catch (Exception e) {
|
||||||
|
echo "No container to stop"
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Run new container on the assigned port
|
||||||
|
sh """
|
||||||
|
docker run -d \
|
||||||
|
--name ${containerName} \
|
||||||
|
--restart always \
|
||||||
|
-p ${appPort}:3000 \
|
||||||
|
${BACKEND_IMAGE}
|
||||||
|
"""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
post {
|
|
||||||
always {
|
|
||||||
echo "Dev pipeline finished"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user