diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bd6f188 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +# Stage 1: Build with Maven +FROM maven:3.8.6-openjdk-8 AS builder + +# Set working directory +WORKDIR /app + +# Copy the pom.xml and source code +COPY pom.xml . +COPY src/ ./src/ + +# Build the project (produces target/*.war) +RUN mvn clean package + +# Stage 2: Deploy to Tomcat +FROM tomcat:9.0-jdk8-openjdk + +# Remove default webapps (optional) +RUN rm -rf /usr/local/tomcat/webapps/* + +# Copy built WAR to Tomcat webapps as ROOT.war +COPY --from=builder /app/target/*.war /usr/local/tomcat/webapps/ROOT.war + +# Expose Tomcat default port +EXPOSE 8080 + +# Start Tomcat +CMD ["catalina.sh", "run"] diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..3796300 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,62 @@ +pipeline { + agent any + + stages { + stage('Checkout') { + steps { + git 'https://github.com/Ayoyinka2456/JavaWeb3.git' + } + } + + stage('Install Docker') { + steps { + sh ''' + if ! command -v docker >/dev/null; then + sudo yum -y install docker + sudo systemctl start docker + sudo systemctl enable docker + fi + ''' + } + } + + stage('Docker Build') { + steps { + sh 'sudo docker build -t ayoyinka/javaweb-app .' + } + } + + stage('Run Container') { + steps { + sh ''' + if sudo docker ps -a --format '{{.Names}}' | grep -Eq '^jWeb1$'; then + sudo docker rm -f jWeb1 + fi + sudo docker run -d -p 50:8080 --name jWeb1 ayoyinka/javaweb-app + ''' + } + } + + stage('Push to Docker Hub') { + steps { + withCredentials([usernamePassword(credentialsId: 'docker_credential', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) { + sh ''' + echo "$DOCKER_PASS" | sudo docker login -u "$DOCKER_USER" --password-stdin + sudo docker push ayoyinka/javaweb-app + sudo docker logout + ''' + } + } + } + } + + post { + always { + emailext( + subject: '${PROJECT_NAME} - Build #${BUILD_NUMBER} - ${BUILD_STATUS}', + body: 'Check console output at ${BUILD_URL} to view the results.', + to: 'eas.adeyemi@gmail.com' + ) + } + } +}