From 4ff15a703e4d906a9666c2f246bf80b56c0cbc24 Mon Sep 17 00:00:00 2001
From: "prajwal.amin" <prajwal.amin@niveussolutions.com>
Date: Thu, 4 Apr 2024 09:12:29 +0530
Subject: [PATCH] Initial commit by containerization

---
 Jenkinsfile        | 99 ++++++++++++++++++++++++++++++++++++++++++++++
 build.gradle       |  1 +
 k8/deployment.yaml | 19 +++++++++
 k8/service.yaml    | 11 ++++++
 4 files changed, 130 insertions(+)
 create mode 100644 Jenkinsfile
 create mode 100644 k8/deployment.yaml
 create mode 100644 k8/service.yaml

diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..c0f12d6
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,99 @@
+pipeline {
+    agent any
+
+    tools {
+        gradle 'Gradle'
+    }
+    environment {
+             PROJECT_ID = "tech-rnd-project"
+             CLUSTER_NAME = "cluster"
+             LOCATION = "us-central1-a"
+             CREDENTIALS_ID = "kubernetes"
+    }
+
+    stages {
+        stage('Scm Checkout') {
+            steps {
+                    checkout scm
+            }
+        }
+
+        stage('Build') {
+            steps {
+                sh 'chmod u+x gradlew'
+                sh './gradlew'
+                sh './gradlew build'
+            }
+        }
+
+        stage('Test') {
+            steps {
+                sh './gradlew test'
+            }
+        }
+
+        stage('SonarQube analysis') {
+            steps {
+                withSonarQubeEnv('java-sonarqube-server') {
+                    sh "./gradlew sonarqube"
+                }
+            }
+        }
+
+        stage('Build Docker Image') {
+            steps {
+                sh 'whoami'
+                sh 'sudo chmod 777 /var/run/docker.sock'
+                sh 'sudo apt update'
+                sh 'sudo apt install software-properties-common'
+                sh 'sudo add-apt-repository ppa:cncf-buildpacks/pack-cli'
+                sh 'sudo  apt-get update'
+                sh 'sudo apt-get install pack-cli'
+                sh 'pack build java-postgress --builder gcr.io/buildpacks/google-22/builder@sha256:ffa092c09ffb147b2ce9658eb6590aa9af2caffb2d513ab8546bb510b74e0225'
+            }
+        }
+
+        // stage('Image Scan') {
+        //     steps {
+        //         //add steps here
+        //         echo 'image scanning'
+        //         sh 'trivy image --no-progress --exit-code 1 --severity CRITICAL java-postgress'
+        //     }
+        // }
+
+        stage('Push Docker Image') {
+            steps {
+                script {
+                    echo 'Push Docker Image'
+                    sh 'docker tag java-postgress us-central1-docker.pkg.dev/tech-rnd-project/container-node/nodejs'
+                    sh 'gcloud auth configure-docker us-central1-docker.pkg.dev'
+                    sh 'docker push us-central1-docker.pkg.dev/tech-rnd-project/container-node/nodejs'
+                    // sh 'curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl'
+                    // sh 'chmod +x kubectl'
+                    // sh "sudo mv kubectl \$(which kubectl)"
+
+                }
+            }
+        }
+        stage('Deploy to K8s') {
+            steps {
+                echo 'Deployment started ...'
+                sh 'ls -ltr'
+                sh 'pwd'
+                echo 'Start deployment of deployment.yaml'
+                step([$class: 'KubernetesEngineBuilder', projectId: env.PROJECT_ID, clusterName: env.CLUSTER_NAME, location: env.LOCATION, manifestPattern: 'k8', credentialsId: env.CREDENTIALS_ID, verifyDeployments: true])
+                    echo 'Deployment Finished ...'
+                sh '''
+                '''
+            }
+        }
+    }
+    post {
+        always {
+            emailext to: 'prajwal.amin@niveussolutions.com',
+            subject: "jenkins build:${currentBuild.currentResult}: ${env.JOB_NAME}",
+            body: "${currentBuild.currentResult}: Job ${env.JOB_NAME}\nMore Info can be found in the attached log",
+            attachLog: true
+        }
+    }
+}
diff --git a/build.gradle b/build.gradle
index f49a17b..0dae865 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,4 +1,5 @@
 plugins {
+    id "org.sonarqube" version "4.4.1.3373"
 	id 'java'
 	id 'org.springframework.boot' version '3.1.5'
 	id 'io.spring.dependency-management' version '1.1.3'
diff --git a/k8/deployment.yaml b/k8/deployment.yaml
new file mode 100644
index 0000000..752e2be
--- /dev/null
+++ b/k8/deployment.yaml
@@ -0,0 +1,19 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: java-gradle-app
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: java-gradle-app
+  template:
+    metadata:
+      labels:
+        app: java-gradle-app
+    spec:
+      containers:
+        - name: java-gradle-app
+          image: us-central1-docker.pkg.dev/tech-rnd-project/container-node/nodejs
+          ports:
+            - containerPort: 8080
diff --git a/k8/service.yaml b/k8/service.yaml
new file mode 100644
index 0000000..9c3a748
--- /dev/null
+++ b/k8/service.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: java-gradle-app
+spec:
+  ports:
+    - port: 8080
+      targetPort: 8080
+  type: LoadBalancer
+  selector:
+    app: java-gradle-app
-- 
GitLab