diff --git a/dockerfile b/dockerfile new file mode 100644 index 0000000..4e32d96 --- /dev/null +++ b/dockerfile @@ -0,0 +1,33 @@ +# ---------- Build stage ---------- + FROM maven:3.9.9-eclipse-temurin-11 AS build + + WORKDIR /app + + # Copy only the pom.xml first to leverage Docker layer caching + COPY pom.xml . + + # Download dependencies + RUN mvn dependency:go-offline + + # Now copy the rest of the source + COPY src ./src + + # Package the application + RUN mvn clean package -DskipTests + + + FROM tomcat:11.0.6-jdk21-temurin-noble + + # Remove default apps to clean up Tomcat + RUN rm -rf /usr/local/tomcat/webapps/* + + # Copy the built WAR file from the Maven build stage + COPY --from=build /app/target/*.war /usr/local/tomcat/webapps/ROOT.war + + # Expose the default Tomcat port + EXPOSE 8080 + + # Start Tomcat + CMD ["catalina.sh", "run"] + + \ No newline at end of file diff --git a/jenkinsfile b/jenkinsfile new file mode 100644 index 0000000..ce4437d --- /dev/null +++ b/jenkinsfile @@ -0,0 +1,61 @@ +pipeline { + agent any + + environment { + DOCKER_IMAGE = 'jntglory/javaweb3' + DOCKER_CREDENTIALS_ID = 'dockercredentials' + } + + stages { + // Stage 1: Clone Repository + stage('Clone Code') { + steps { + git branch: 'master', url: 'https://github.com/JNTGLORY/JavaWeb3.git' + } + } + + // Stage 2: Build Docker Image + stage('Docker Build') { + steps { + script { + sh "docker build -t ${DOCKER_IMAGE}:${env.BUILD_NUMBER} -t ${DOCKER_IMAGE}:latest ." + } + } + } + + // Stage 3: Push to Docker Hub + stage('Docker Push') { + steps { + script { + docker.withRegistry('https://index.docker.io/v1/', DOCKER_CREDENTIALS_ID) { + docker.image("${DOCKER_IMAGE}:${env.BUILD_NUMBER}").push() + docker.image("${DOCKER_IMAGE}:latest").push() + } + } + } + } + + // Stage 4: Run Docker Container + stage('Run Container') { + steps { + script { + sh """ + docker ps -q --filter ancestor=${DOCKER_IMAGE}:latest | xargs -r docker stop + docker ps -a -q --filter ancestor=${DOCKER_IMAGE}:latest | xargs -r docker rm + docker run -d -p 8000:8080 ${DOCKER_IMAGE}:latest + """ + } + } + } + } + + post { + success { + echo 'Pipeline completed successfully!' + } + failure { + echo 'Pipeline failed.' + } + } +} +