Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 121 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
pipeline {
agent any
tools {
jdk 'jdk17'
maven 'maven1'
}

stages {
stage('Checkout') {
steps {
git(
url: 'https://github.com/manish-g0u74m/Ekart-Java-Webapp.git',
branch: 'devops'
)
}
}

stage('Compile') {
steps {
sh 'mvn clean compile'
}
}

stage('SonarQube Scan') {
steps {
withSonarQubeEnv('sonar') {
script {
def scanner = tool name: 'sonar', type: 'hudson.plugins.sonar.SonarRunnerInstallation'
sh """
"${scanner}/bin/sonar-scanner" \
-Dsonar.projectKey="Ekart-Java-WebApp" \
-Dsonar.projectName="Ekart-Java-WebApp" \
-Dsonar.sources=src \
-Dsonar.java.binaries=target/classes
"""
}
}
}
}

stage('Trivy file system scan') {
steps {
sh 'trivy fs --format table -o trivy-fs-report.html .'
}
}

stage('Check SonarQube Quality Gate') {
steps {
echo 'Waiting for SonarQube Quality Gate result...'
timeout(time: 2, unit: 'MINUTES') {
waitForQualityGate abortPipeline: false
}
}
}

stage('OWASP Dependency Check') {
steps {
dependencyCheck additionalArguments: '--scan ./ --nvdApiKey b588dcc5-7433-4160-b160-8d774e5b866', odcInstallation: 'dc'
dependencyCheckPublisher pattern: '**/dependency-check-report.xml'
}
}
stage('Build') {
steps {
sh "mvn clean package -DskipTests=true"
}
}
stage("docker Image build") {
steps {
echo "Code Build Stage"
sh "docker build -t ekart-java-webapp:latest -f ./docker/Dockerfile ."
}
}

stage("TRIVY image Scane") {
steps {
sh "trivy image ekart-java-webapp:latest > trivy-frontend-image.txt"
}
}

stage("Push To DockerHub") {
steps {
withCredentials([usernamePassword(
credentialsId: "dockerHubCreds",
usernameVariable: "dockerHubUser",
passwordVariable: "dockerHubPass"
)]) {
sh 'echo $dockerHubPass | docker login -u $dockerHubUser --password-stdin'
sh "docker image tag ekart-java-webapp:latest ${env.dockerHubUser}/ekart-java-webapp:latest"

echo "Push Ekart-Java-Webapp image"
sh "docker push ${env.dockerHubUser}/ekart-java-webapp:latest"
}
}
}
stage("Deploy on K8s") {
steps {
withKubeConfig([credentialsId: 'kube-cred-id']) {
sh "kubectl apply -f ./k8s/ekart-ns.yml"
sh "kubectl apply -f ./k8s/ekart-service.yml"
sh "kubectl apply -f ./k8s/ekart-deployment.yml"
}
}
}
}
post {
success {
emailext(
to: '[email protected]',
subject: 'Build Successful for Ekart Springboot Application',
body: 'The build has completed successfully for Ekart Springboot Application.'
)
}
failure {
emailext(
to: '[email protected]',
subject: 'Build Failed for Ekart Springboot Application',
body: 'The build has failed for Ekart Springboot Application. Please check the Jenkins logs for details.'
)
}
}
}
36 changes: 0 additions & 36 deletions deploymentservice.yml

This file was deleted.

121 changes: 121 additions & 0 deletions docker/Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
pipeline {
agent any
tools {
jdk 'jdk17'
maven 'maven1'
}

stages {
stage('Checkout') {
steps {
git(
url: 'https://github.com/manish-g0u74m/Ekart-Java-Webapp.git',
branch: 'devops'
)
}
}

stage('Compile') {
steps {
sh 'mvn clean compile'
}
}

stage('SonarQube Scan') {
steps {
withSonarQubeEnv('sonar') {
script {
def scanner = tool name: 'sonar', type: 'hudson.plugins.sonar.SonarRunnerInstallation'
sh """
"${scanner}/bin/sonar-scanner" \
-Dsonar.projectKey="Ekart-Java-WebApp" \
-Dsonar.projectName="Ekart-Java-WebApp" \
-Dsonar.sources=src \
-Dsonar.java.binaries=target/classes
"""
}
}
}
}

stage('Trivy file system scan') {
steps {
sh 'trivy fs --format table -o trivy-fs-report.html .'
}
}

stage('Check SonarQube Quality Gate') {
steps {
echo 'Waiting for SonarQube Quality Gate result...'
timeout(time: 2, unit: 'MINUTES') {
waitForQualityGate abortPipeline: false
}
}
}

stage('OWASP Dependency Check') {
steps {
dependencyCheck additionalArguments: '--scan ./ --nvdApiKey b588dcc5-7433-4160-b160-8d774e5b866', odcInstallation: 'dc'
dependencyCheckPublisher pattern: '**/dependency-check-report.xml'
}
}
stage('Build') {
steps {
sh "mvn clean package -DskipTests=true"
}
}
stage("docker Image build") {
steps {
echo "Code Build Stage"
sh "docker build -t ekart-java-webapp:latest -f ./docker/Dockerfile ."
}
}

stage("TRIVY image Scane") {
steps {
sh "trivy image ekart-java-webapp:latest > trivy-frontend-image.txt"
}
}

stage("Push To DockerHub") {
steps {
withCredentials([usernamePassword(
credentialsId: "dockerHubCreds",
usernameVariable: "dockerHubUser",
passwordVariable: "dockerHubPass"
)]) {
sh 'echo $dockerHubPass | docker login -u $dockerHubUser --password-stdin'
sh "docker image tag ekart-java-webapp:latest ${env.dockerHubUser}/ekart-java-webapp:latest"

echo "Push Ekart-Java-Webapp image"
sh "docker push ${env.dockerHubUser}/ekart-java-webapp:latest"
}
}
}
stage("Deploy on K8s") {
steps {
withKubeConfig([credentialsId: 'kube-cred-id']) {
sh "kubectl apply -f ./k8s/ekart-ns.yml"
sh "kubectl apply -f ./k8s/ekart-service.yml"
sh "kubectl apply -f ./k8s/ekart-deployment.yml"
}
}
}
}
post {
success {
emailext(
to: '[email protected]',
subject: 'Build Successful for Ekart Springboot Application',
body: 'The build has completed successfully for Ekart Springboot Application.'
)
}
failure {
emailext(
to: '[email protected]',
subject: 'Build Failed for Ekart Springboot Application',
body: 'The build has failed for Ekart Springboot Application. Please check the Jenkins logs for details.'
)
}
}
}
20 changes: 20 additions & 0 deletions k8s/ekart-deployment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: ekart-deployment
namespace: ekart-ns
spec:
replicas: 2
selector:
matchLabels:
app: ekart-app
template:
metadata:
labels:
app: ekart-app
spec:
containers:
- name: ekart-container
image: g0u74m/ekart-java-webapp:latest
ports:
- containerPort: 8070
18 changes: 18 additions & 0 deletions k8s/ekart-ingress.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ekart-ingress
namespace: ekart-ns
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /ekart
pathType: Prefix
backend:
service:
name: ekart-service
port:
number: 8070
4 changes: 4 additions & 0 deletions k8s/ekart-ns.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: ekart-ns
14 changes: 14 additions & 0 deletions k8s/ekart-service.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: ekart-service
namespace: ekart-ns
spec:
selector:
app: ekart-app
ports:
- protocol: TCP
port: 8070
targetPort: 8070
nodePort: 30003
type: NodePort