From ce0683ba24a514f9b55a313966e4f70093aac59f Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Tue, 28 Jul 2026 11:00:43 +0500 Subject: [PATCH 01/14] Add CI workflow for Java project with Gradle This workflow builds a Java project using Gradle and submits a dependency graph for Dependabot Alerts. --- .github/workflows/CITest.yml | 67 ++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 .github/workflows/CITest.yml diff --git a/.github/workflows/CITest.yml b/.github/workflows/CITest.yml new file mode 100644 index 000000000..0885752ac --- /dev/null +++ b/.github/workflows/CITest.yml @@ -0,0 +1,67 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle + +name: Java CI with Gradle + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + # Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies. + # See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md + - name: Setup Gradle + uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 + + - name: Build with Gradle Wrapper + run: ./gradlew build + + # NOTE: The Gradle Wrapper is the default and recommended way to run Gradle (https://docs.gradle.org/current/userguide/gradle_wrapper.html). + # If your project does not have the Gradle Wrapper configured, you can use the following configuration to run Gradle with a specified version. + # + # - name: Setup Gradle + # uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 + # with: + # gradle-version: '8.9' + # + # - name: Build with Gradle 8.9 + # run: gradle build + + dependency-submission: + + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + # Generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies. + # See: https://github.com/gradle/actions/blob/main/dependency-submission/README.md + - name: Generate and submit dependency graph + uses: gradle/actions/dependency-submission@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 From e6471bc98d408fed1db82ada059a119a18bdd6b6 Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Tue, 28 Jul 2026 11:31:15 +0500 Subject: [PATCH 02/14] fixed yaml --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a429a2a98..571288664 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,7 @@ jobs: - name: Build and Push Docker Image uses: mr-smithers-excellent/docker-build-push@v4 with: - image: nanajanashia/demo-app + image: sherry31/testci registry: docker.io username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} From 3619ef8ff5fbd8370fa8f5da645350df4324f5b1 Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Tue, 28 Jul 2026 11:46:11 +0500 Subject: [PATCH 03/14] fix: replace deprecated openjdk:8-jre-alpine image --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d2b1dc574..16841a2cc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM openjdk:8-jre-alpine +FROM eclipse-temurin:8-jre-alpine EXPOSE 8080 From 4ce9e204f148bebd8816913199b3752afd1f6285 Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 12:02:39 +0500 Subject: [PATCH 04/14] jenkins test --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 6a6245acc..16f68452e 100644 --- a/README.md +++ b/README.md @@ -9,4 +9,7 @@ ##### push image to repo docker tag java-app demo-app:java-1.0 + +###### Testing jenkins + jenkins testtt From 2b27b18d0722617a3ab4ce2ef97247214a8461ef Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 12:07:27 +0500 Subject: [PATCH 05/14] Add Jenkinsfile --- Jenkinsfile | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..f3e565f2b --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,46 @@ +pipeline { + agent any + + environment { + DOCKERHUB_CREDENTIALS = credentials('dockerhub-credentials') + IMAGE_NAME = "Sherr31/my-project" // change if needed + } + + stages { + stage('Checkout') { + steps { + checkout scm + } + } + + stage('Build Docker Image') { + steps { + script { + dockerImage = docker.build("${IMAGE_NAME}:${env.BUILD_NUMBER}") + dockerImage.tag("latest") + } + } + } + + stage('Login to Docker Hub') { + steps { + sh 'echo $DOCKERHUB_CREDENTIALS_PSW | docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin' + } + } + + stage('Push Image') { + steps { + script { + dockerImage.push("${env.BUILD_NUMBER}") + dockerImage.push("latest") + } + } + } + } + + post { + always { + sh 'docker logout' + } + } +} From fcc2bec5877b8787a11d96e31cc4e713e38a43a6 Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 12:09:02 +0500 Subject: [PATCH 06/14] fixed --- .github/workflows/ci.yml | 38 -------------------------------------- 1 file changed, 38 deletions(-) delete mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 571288664..000000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,38 +0,0 @@ -# This workflow will build a Java project with Gradle -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle - -name: Java CI with Gradle - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - build-java: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Build with Gradle - run: ./gradlew build - - - name: Build and Push Docker Image - uses: mr-smithers-excellent/docker-build-push@v4 - with: - image: sherry31/testci - registry: docker.io - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - From 1c4f9c5b6c65a48c44c6b0e0fcd8c4c1e8e2ba9d Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 12:16:12 +0500 Subject: [PATCH 07/14] Fix Dockerfile JAR name and add Gradle build stage --- Dockerfile | 4 ++-- Jenkinsfile | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 16841a2cc..9e4f892a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM eclipse-temurin:8-jre-alpine EXPOSE 8080 -COPY ./build/libs/my-app-1.0-SNAPSHOT.jar /usr/app/ +COPY ./build/libs/java-app-1.0-SNAPSHOT.jar /usr/app/app.jar WORKDIR /usr/app -ENTRYPOINT ["java", "-jar", "my-app-1.0-SNAPSHOT.jar"] +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/Jenkinsfile b/Jenkinsfile index f3e565f2b..28a5e8331 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,7 +3,7 @@ pipeline { environment { DOCKERHUB_CREDENTIALS = credentials('dockerhub-credentials') - IMAGE_NAME = "Sherr31/my-project" // change if needed + IMAGE_NAME = "Sherr31/my-project" } stages { @@ -13,6 +13,13 @@ pipeline { } } + stage('Build JAR') { + steps { + sh 'chmod +x gradlew' + sh './gradlew clean build -x test' + } + } + stage('Build Docker Image') { steps { script { From f92ab2beaad359c6298efa73f9cab193b6bf528f Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 12:20:30 +0500 Subject: [PATCH 08/14] Fix Gradle build with Java 8 container --- Jenkinsfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 28a5e8331..3642796f8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -14,6 +14,12 @@ pipeline { } stage('Build JAR') { + agent { + docker { + image 'eclipse-temurin:8-jdk' + reuseNode true + } + } steps { sh 'chmod +x gradlew' sh './gradlew clean build -x test' @@ -51,3 +57,4 @@ pipeline { } } } + From f62b4982305c1032ec3cf50cf9b70eeb7f1b3ab1 Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 12:30:43 +0500 Subject: [PATCH 09/14] Fix Docker Hub username case --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 3642796f8..1e2eb0409 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,7 +3,7 @@ pipeline { environment { DOCKERHUB_CREDENTIALS = credentials('dockerhub-credentials') - IMAGE_NAME = "Sherr31/my-project" + IMAGE_NAME = "sherr31/my-project" } stages { From 932ae353558fd5a77c74923c14df5621b773aace Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 12:39:28 +0500 Subject: [PATCH 10/14] jenkins updated --- Jenkinsfile | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 1e2eb0409..0a49c174a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,8 +2,7 @@ pipeline { agent any environment { - DOCKERHUB_CREDENTIALS = credentials('dockerhub-credentials') - IMAGE_NAME = "sherr31/my-project" + IMAGE_NAME = "sherry31/my-project" } stages { @@ -35,26 +34,15 @@ pipeline { } } - stage('Login to Docker Hub') { - steps { - sh 'echo $DOCKERHUB_CREDENTIALS_PSW | docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin' - } - } - stage('Push Image') { steps { script { - dockerImage.push("${env.BUILD_NUMBER}") - dockerImage.push("latest") + docker.withRegistry('https://index.docker.io/v1/', 'dockerhub-credentials') { + dockerImage.push("${env.BUILD_NUMBER}") + dockerImage.push("latest") + } } } } } - - post { - always { - sh 'docker logout' - } - } } - From 0e9a68e36faf946a5c34d92471681fb8df9f359a Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 12:50:57 +0500 Subject: [PATCH 11/14] test webhooks --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 16f68452e..4188733be 100644 --- a/README.md +++ b/README.md @@ -12,4 +12,7 @@ ###### Testing jenkins jenkins testtt + +##### Testing WebHooks auto push +test test test hooks From 1ce8af8f7cef9433e0fe0a4b8507a90d4556ba33 Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 15:34:45 +0500 Subject: [PATCH 12/14] Convert to multi-stage Dockerfile --- Dockerfile | 16 ++++++++++++---- Jenkinsfile | 23 ++--------------------- 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9e4f892a9..444764019 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,16 @@ -FROM eclipse-temurin:8-jre-alpine +# ===== Stage 1: Build the JAR ===== +FROM eclipse-temurin:8-jdk AS builder -EXPOSE 8080 +WORKDIR /app +COPY . . +RUN chmod +x gradlew +RUN ./gradlew clean build -x test -COPY ./build/libs/java-app-1.0-SNAPSHOT.jar /usr/app/app.jar -WORKDIR /usr/app +# ===== Stage 2: Final small image ===== +FROM eclipse-temurin:8-jre-alpine +WORKDIR /app +COPY --from=builder /app/build/libs/java-app-1.0-SNAPSHOT.jar app.jar + +EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/Jenkinsfile b/Jenkinsfile index 0a49c174a..4a3108822 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,31 +12,12 @@ pipeline { } } - stage('Build JAR') { - agent { - docker { - image 'eclipse-temurin:8-jdk' - reuseNode true - } - } - steps { - sh 'chmod +x gradlew' - sh './gradlew clean build -x test' - } - } - - stage('Build Docker Image') { + stage('Build & Push Docker Image') { steps { script { - dockerImage = docker.build("${IMAGE_NAME}:${env.BUILD_NUMBER}") + def dockerImage = docker.build("${IMAGE_NAME}:${env.BUILD_NUMBER}") dockerImage.tag("latest") - } - } - } - stage('Push Image') { - steps { - script { docker.withRegistry('https://index.docker.io/v1/', 'dockerhub-credentials') { dockerImage.push("${env.BUILD_NUMBER}") dockerImage.push("latest") From e048580277ff80b1b8ef9b26d0d841a07395048c Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 15:45:59 +0500 Subject: [PATCH 13/14] Docker Multistage fixed --- Dockerfile | 12 ++++-------- Jenkinsfile | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 444764019..c94c7e1f8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,12 @@ -# ===== Stage 1: Build the JAR ===== -FROM eclipse-temurin:8-jdk AS builder - +# Stage 1 - Build +FROM eclipse-temurin:8-jdk-alpine AS builder WORKDIR /app COPY . . -RUN chmod +x gradlew -RUN ./gradlew clean build -x test +RUN chmod +x gradlew && ./gradlew clean build -x test -# ===== Stage 2: Final small image ===== +# Stage 2 - Final small image FROM eclipse-temurin:8-jre-alpine - WORKDIR /app COPY --from=builder /app/build/libs/java-app-1.0-SNAPSHOT.jar app.jar - EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/Jenkinsfile b/Jenkinsfile index 4a3108822..0dfa6981b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -15,7 +15,7 @@ pipeline { stage('Build & Push Docker Image') { steps { script { - def dockerImage = docker.build("${IMAGE_NAME}:${env.BUILD_NUMBER}") + def dockerImage = docker.build("${IMAGE_NAME}:${env.BUILD_NUMBER}", "--no-cache .") dockerImage.tag("latest") docker.withRegistry('https://index.docker.io/v1/', 'dockerhub-credentials') { From 25960af49c9732e92e3c0646a57d2dec02ee4c39 Mon Sep 17 00:00:00 2001 From: Shehryar Rasheed Date: Wed, 29 Jul 2026 15:49:48 +0500 Subject: [PATCH 14/14] Fix multi-stage Dockerfile --- Dockerfile | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index c94c7e1f8..c462eff19 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,23 @@ -# Stage 1 - Build -FROM eclipse-temurin:8-jdk-alpine AS builder +# ===== Stage 1: Build ===== +FROM eclipse-temurin:8-jdk AS builder + WORKDIR /app -COPY . . -RUN chmod +x gradlew && ./gradlew clean build -x test -# Stage 2 - Final small image +# Copy only necessary files first (better caching) +COPY gradlew . +COPY gradle gradle +COPY build.gradle . +COPY settings.gradle . +COPY src src + +RUN chmod +x gradlew +RUN ./gradlew clean build -x test --no-daemon + +# ===== Stage 2: Final small image ===== FROM eclipse-temurin:8-jre-alpine + WORKDIR /app COPY --from=builder /app/build/libs/java-app-1.0-SNAPSHOT.jar app.jar + EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]