Compare commits

...

12 commits

Author SHA1 Message Date
Mihailo
f23aa04562 Modify Jenkins file to build image every time 2025-03-07 15:22:14 +01:00
Mihailo
15b228d198 Add config file for KIND cluster 2025-03-07 13:17:58 +01:00
MMarceticGrid
fd0e30c72f
Merge branch 'main' into feature_branch 2025-03-07 13:13:11 +01:00
Mihailo
29b73475db Add more stages to Jenkinsfile 2025-03-07 12:43:55 +01:00
Mihailo
61a75b5570 Add deployment and service for kind cluster
Signed-off-by: Mihailo <mmarcetic@griddynamcis.com>
2025-03-07 10:23:11 +01:00
MMarceticGrid
0dce1f7d2b Update Jenkinsfile
Signed-off-by: Mihailo <mmarcetic@griddynamcis.com>
2025-03-07 10:23:11 +01:00
Mihailo Marcetic
684e04e703 Add Jenkinsfile
Signed-off-by: Mihailo <mmarcetic@griddynamcis.com>
2025-03-07 10:23:11 +01:00
Mihailo Marcetic
ba9fd2a991 Add Dockerfile
Signed-off-by: Mihailo <mmarcetic@griddynamcis.com>
2025-03-07 10:23:11 +01:00
Mihailo Marcetic
a2848f9132 Add docker-compose file that run application with database
Signed-off-by: Mihailo <mmarcetic@griddynamcis.com>
2025-03-07 10:23:11 +01:00
Mihailo Marcetic
ceb2bc79db Remove dependence on Nexus in build.gradle file
Signed-off-by: Mihailo <mmarcetic@griddynamcis.com>
2025-03-07 10:23:11 +01:00
Mihailo Marcetic
89511d3b42 Add task for deploying artifacts to Nexus
Signed-off-by: Mihailo <mmarcetic@griddynamcis.com>
2025-03-07 10:23:11 +01:00
Mihailo Marcetic
f32d17fd42 Create task that opens test results
Signed-off-by: Mihailo <mmarcetic@griddynamcis.com>
2025-03-07 10:23:11 +01:00
4 changed files with 123 additions and 8 deletions

83
Jenkinsfile vendored
View file

@ -4,7 +4,9 @@ pipeline {
environment {
// Define environment variables
DOCKER_REGISTRY = "docker.io"
DOCKER_IMAGE = "mmarcetic/main"
DOCKER_IMAGE_MAIN = 'mmarcetic/main'
DOCKER_IMAGE_MR = 'mmarcetic/mr'
GIT_COMMIT = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
}
stages {
@ -15,23 +17,88 @@ pipeline {
}
}
stage('Build Docker Image') {
stage('Set Docker Image') {
steps {
script {
// Build the Docker image
def gitCommit = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
sh "docker build -t ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${gitCommit} ."
// Set Docker image based on the branch name
if (env.BRANCH_NAME == 'main') {
env.DOCKER_IMAGE = DOCKER_IMAGE_MAIN
} else {
env.DOCKER_IMAGE = DOCKER_IMAGE_MR
}
echo "Using Docker image: ${env.DOCKER_IMAGE}"
}
}
}
stage('Push Docker Image') {
stage('Checkstyle Report') {
when {
changeRequest()
}
steps {
script {
// Checkstyle with Gradle
sh './gradlew checkstyleMain'
archiveArtifacts artifacts: 'build/reports/checkstyle/*.xml', allowEmptyArchive: true
}
}
}
stage('Test') {
when {
changeRequest()
}
steps {
// Test using Gradle
sh './gradlew clean test'
}
}
stage('Build Without Tests') {
when {
changeRequest()
}
steps {
script {
// Build without tests using Gradle
sh './gradlew build -x test'
}
}
}
stage('Build Docker Image') {
steps {
script {
// Build the Docker image
sh "docker build -t ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${GIT_COMMIT} ."
}
}
}
stage('Push Docker Image for Change Request') {
when {
changeRequest()
}
steps {
script {
def gitCommit = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
withCredentials([usernamePassword(credentialsId: "docker-login", usernameVariable: "DOCKER_USER", passwordVariable: "DOCKER_PASSWORD")]) {
sh "docker login -u ${DOCKER_USER} -p ${DOCKER_PASSWORD}"
sh "docker push ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${gitCommit}"
sh "docker push ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${GIT_COMMIT}"
}
}
}
}
stage('Push Docker Image for Main') {
when {
branch "main"
}
steps {
script {
withCredentials([usernamePassword(credentialsId: "docker-login", usernameVariable: "DOCKER_USER", passwordVariable: "DOCKER_PASSWORD")]) {
sh "docker login -u ${DOCKER_USER} -p ${DOCKER_PASSWORD}"
sh "docker push ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${GIT_COMMIT}"
}
}
}

11
config.yaml Normal file
View file

@ -0,0 +1,11 @@
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30950
hostPort: 30950
listenAddress: "127.0.0.1"
protocol: TCP

22
deployment.yaml Normal file
View file

@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-boot-app
namespace: petclinic
spec:
replicas: 2
selector:
matchLabels:
app: spring-boot-app
template:
metadata:
labels:
app: spring-boot-app
spec:
containers:
- name: spring-boot-app
image: docker.io/mmarcetic/main:2.0
imagePullPolicy: Always
ports:
- containerPort: 8080

15
service.yaml Normal file
View file

@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: spring-boot-app-service
namespace: petclinic
spec:
selector:
app: spring-boot-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30950
type: NodePort