diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..86e64ac --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,69 @@ +@Library('cicd-library') _ + +pipeline { + agent any + + triggers { + githubPush() + } + + parameters { + string(name: 'BRANCH', defaultValue: '', description: 'Git branch') + choice(name: 'BUILD_ENV', choices: ['uat', 'stage', 'prod'], description: 'Environment') + choice(name: 'REQUIRED', choices: ['Build', 'Deploy'], description: 'Action') + } + + environment { + PARAMS_FILE = "${env.WORKSPACE}/build-params.env" + } + + stages { + + stage('Checkout') { + steps { + checkout scm + } + } + + stage('Validate Input') { + steps { + script { + if (!params.BRANCH || !params.BUILD_ENV) { + error "❌ Missing BRANCH or BUILD_ENV" + } + + echo "🚀 Branch: ${params.BRANCH}" + echo "🌍 Env: ${params.BUILD_ENV}" + echo "⚙️ Action: ${params.REQUIRED}" + } + } + } + + stage('Prepare Params') { + steps { + script { + env.BRANCH = params.BRANCH ?: env.GIT_BRANCH?.replaceAll('origin/', '') + env.COMMIT_HASH = sh(script: 'git rev-parse HEAD', returnStdout: true).trim() + + env.REQUIRED = params.REQUIRED + env.BUILD_ENV = params.BUILD_ENV + } + + writeFile file: env.PARAMS_FILE, text: """\ +JOB_NAME=${env.JOB_NAME} +BRANCH=${env.BRANCH} +COMMIT_HASH=${env.COMMIT_HASH} +BUILD_ENV=${env.BUILD_ENV} +REQUIRED=${env.REQUIRED} +WORKSPACE=${env.WORKSPACE} +""" + } + } + + stage('Run Deployment') { + steps { + deploy("${env.PARAMS_FILE}") + } + } + } +} \ No newline at end of file diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..14d81f1 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,97 @@ +#!/bin/bash +# java_deployment.sh +# Reads params from file and builds the WAR + +set -e +trap 'echo "❌ Failed at line $LINENO"' ERR + +# ── Step 1: Read the params file ────────────────────────── +PARAMS_FILE=$1 + +if [[ -z "$PARAMS_FILE" || ! -f "$PARAMS_FILE" ]]; then + echo "❌ ERROR: Params file not found: $PARAMS_FILE" + exit 1 +fi + +echo "📄 Reading params from: $PARAMS_FILE" +set -a # auto-export all variables +source "$PARAMS_FILE" +set +a + +# ── Step 2: Print what we got ───────────────────────────── +echo "===============================" +echo "JOB_NAME : $JOB_NAME" +echo "BRANCH : $BRANCH" +echo "COMMIT_HASH : $COMMIT_HASH" +echo "BUILD_ENV : $BUILD_ENV" +echo "REQUIRED : $REQUIRED" +echo "WORKSPACE : $WORKSPACE" +echo "===============================" + +# ── Step 3: Go to workspace and build WAR ───────────────── +cd "$WORKSPACE" + +echo "🔨 Starting Maven WAR build...." +mvn clean package -DskipTests + +# ── Step 4: Confirm WAR was created ─────────────────────── +WAR_FILE="$WORKSPACE/target/SampleWebApp.war" + +if [[ -f "$WAR_FILE" ]]; then + echo "✅ WAR built successfully: $WAR_FILE" + ls -lh "$WAR_FILE" +else + echo "❌ WAR file not found after build!" + exit 1 +fi + +DEPLOY_DIR="$WORKSPACE/app_scripts/" +cp "$WAR_FILE" "$DEPLOY_DIR/SampleWebAPP-${COMMIT_HASH:0:7}.war" + +if [[ -f "$DEPLOY_DIR/SampleWebAPP-${COMMIT_HASH:0:7}.war" ]]; then + echo "✅ WAR copied successfully!" +else + echo "❌ WAR copy failed" + exit 1 +fi + +# # ── Step 6: Deploy to Tomcat ────────────────────────────── +# TOMCAT_WEBAPPS="/var/lib/tomcat9/webapps" +# APP_NAME="SampleWebApp" + +# echo "🚀 Starting Tomcat deployment..." + +# # Stop Tomcat +# echo "⏹ Stopping Tomcat..." +# sudo systemctl stop tomcat9 + +# # Remove old deployment +# if [[ -d "$TOMCAT_WEBAPPS/$APP_NAME" ]]; then +# echo "🗑 Removing old deployment..." +# sudo rm -rf "$TOMCAT_WEBAPPS/$APP_NAME" +# fi + +# if [[ -f "$TOMCAT_WEBAPPS/$APP_NAME.war" ]]; then +# echo "🗑 Removing old WAR..." +# sudo rm -f "$TOMCAT_WEBAPPS/$APP_NAME.war" +# fi + +# # Copy new WAR to Tomcat +# echo "📂 Copying new WAR to Tomcat..." +# sudo cp "$WAR_FILE" "$TOMCAT_WEBAPPS/$APP_NAME.war" + +# # Start Tomcat +# echo "▶ Starting Tomcat..." +# sudo systemctl start tomcat9 + +# # ── Step 7: Verify Deployment ───────────────────────────── +# echo "⏳ Waiting for Tomcat to deploy WAR..." +# sleep 15 + +# if [[ -d "$TOMCAT_WEBAPPS/$APP_NAME" ]]; then +# echo "✅ Deployment successful!" +# echo "🌐 App available at: http://localhost:8080/$APP_NAME" +# else +# echo "❌ Deployment failed — folder not created by Tomcat" +# exit 1 +# fi \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..17e2212 --- /dev/null +++ b/pom.xml @@ -0,0 +1,44 @@ + + + + 4.0.0 + com.sample + SampleWebApp + war + 1.0 + SampleWebApp + + + web + + + org.apache.maven.plugins + maven-war-plugin + 3.3.2 + + + web + SampleWebApp + + false + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 11 + 11 + + + + + SampleWebApp + + +