diff --git a/Docker_Jenkins b/Docker_Jenkins new file mode 100644 index 0000000..9536f52 --- /dev/null +++ b/Docker_Jenkins @@ -0,0 +1,55 @@ +pipeline { + agent { +label 'docker' + } + environment { + ACCOUNT_ID = "654654623396" + REGION = "ap-south-1" + ECR_REPO_NAME = "jenkins-docker" + IMAGE_TAG = "latest" + REPOSITORY_URI = "${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${ECR_REPO_NAME}" + } + stages { + stage('Logging into AWS ECR') { + steps { + script { + sh "aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com" + } + } + } + stage('Checkout') { + steps { + git branch: 'main', url: 'https://github.com/sindhukampli/java-example' + } + } + stage('Build') { + steps { + script { + sh "docker build -t ${REPOSITORY_URI}:${IMAGE_TAG} ." + } + } + } + stage('Push to ECR') { + steps { + script { + sh "docker push ${REPOSITORY_URI}:${IMAGE_TAG}" + } + } + } + stage('Deploy') { + steps { + script { + sh "docker run -itd -p 9090:8080 ${REPOSITORY_URI}:${IMAGE_TAG}" + } + } + } + } + post { + success { + echo 'Pipeline completed successfully!' + } + failure { + echo 'Pipeline failed!' + } + } +} diff --git a/Docker_jenkins_1 b/Docker_jenkins_1 new file mode 100644 index 0000000..6a37a74 --- /dev/null +++ b/Docker_jenkins_1 @@ -0,0 +1,48 @@ +pipeline { + agent any + environment { + IMAGE_NAME = "docker1-jenkins" + IMAGE_TAG = "latest" + DOCKERHUB_CREDENTIALS = 'Docker-Jenkins' + } + stages { + stage('Checkout') { + steps { + git branch: 'main', url: 'https://github.com/sindhukampli/java-example' + } + } + stage('Build') { + steps { + script { + sh "docker build -t ${IMAGE_NAME}:${IMAGE_TAG} ." + } + } + } + stage('Push to Docker Hub') { + steps { + script { + withCredentials([usernamePassword(credentialsId: "${DOCKERHUB_CREDENTIALS}", passwordVariable: 'Password', usernameVariable: 'Username')]) { + sh "docker login -u ${Username} -p ${Password}" + sh "docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${Username}/${IMAGE_NAME}:${IMAGE_TAG}" + sh "docker push ${Username}/${IMAGE_NAME}:${IMAGE_TAG}" + } + } + } + } + stage('Deploy') { + steps { + script { + sh "docker run -itd -p 8030:8080 ${IMAGE_NAME}:${IMAGE_TAG}" + } + } + } + } + post { + success { + echo 'Pipeline completed successfully!' + } + failure { + echo 'Pipeline failed!' + } + } +} diff --git a/Dockerfile b/Dockerfile index 0966445..8b54cf6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,13 @@ -FROM maven:amazoncorretto as build -WORKDIR /javaapp +FROM maven:amazoncorretto as builder + +WORKDIR /app + COPY . . + RUN mvn clean install -FROM adhig93/tomcat-conf -COPY --from=build /javaapp/target/*.war /usr/local/tomcat/webapps/ +FROM artisantek/tomcat:1 + +COPY --from=builder /app/target/*.war /usr/local/tomcat/webapps + +CMD ["catalina.sh", "run"] diff --git a/Jenkins-ECR b/Jenkins-ECR new file mode 100644 index 0000000..1abe98e --- /dev/null +++ b/Jenkins-ECR @@ -0,0 +1,44 @@ +pipeline { + agent { label 'master' } + environment { + IMAGE_TAG = "${BUILD_NUMBER}" + AWS_REGION = 'ap-south-1' + ECR_REPO_NAME = 'service-a' + ECR_REGISTRY = '654654623396.dkr.ecr.ap-south-1.amazonaws.com' + } + stages { + stage('Git Checkout Stage') { + steps { + git branch: 'main', url: 'https://github.com/sindhukampli/java-example.git' + } + } + stage('Build Docker Image') { + steps { + script { + sh """ + aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $ECR_REGISTRY + docker build -t $ECR_REGISTRY/$ECR_REPO_NAME:$IMAGE_TAG . + """ + } + } + } + stage('Push to ECR') { + steps { + script { + sh """ + docker push $ECR_REGISTRY/$ECR_REPO_NAME:$IMAGE_TAG + """ + } + } + } + stage('Deploy Stage') { + steps { + script { + sh """ + helm install helm ./helm -n dev + """ + } + } + } + } +} diff --git a/Jenkinsfile b/Jenkinsfile index 5912ca3..1b8e4d8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,27 +1,16 @@ pipeline { agent any stages { - stage('Checkout') { + + stage('git') { + steps { - echo 'Checkout completed' + git credentialsId: 'git_credentials', url:'https://github.com/sindhukampli/java-example.git' } } - stage('Static-test') { + stage('build') { steps { - echo 'Running static tests on code' - } - } - stage('Build') { - when { - branch "master" - } - steps { - sh 'echo "Building the code"' - } - } - stage('Deploy') { - steps { - echo 'Deploying into environment' + sh "mvn clean install" } } } diff --git a/deployment.yaml b/deployment.yaml new file mode 100644 index 0000000..04881de --- /dev/null +++ b/deployment.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: tomcat-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: tomcat + template: + metadata: + labels: + app: tomcat + spec: + containers: + - name: tomcat + image: skampli31/docker-jenkins-k8s:latest + ports: + - containerPort: 8080 diff --git a/helm/Chart.yaml b/helm/Chart.yaml new file mode 100644 index 0000000..1319284 --- /dev/null +++ b/helm/Chart.yaml @@ -0,0 +1,4 @@ +apiVersion: v2 +name: microservices +description: A Helm chart for deploying multiple microservices +version: 0.1.0 diff --git a/helm/templates/deploment.yaml b/helm/templates/deploment.yaml new file mode 100644 index 0000000..f5d3a98 --- /dev/null +++ b/helm/templates/deploment.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Chart.Name }}-service-a +spec: + replicas: {{ .Values.serviceA.replicaCount }} + selector: + matchLabels: + app: {{ .Chart.Name }}-service-a + template: + metadata: + labels: + app: {{ .Chart.Name }}-service-a + spec: + containers: + - name: service-a + image: {{ .Values.serviceA.image.repository }}:{{ .Values.serviceA.image.tag }} + ports: + - containerPort: {{ .Values.serviceA.service.targetPort }} diff --git a/helm/templates/service.yaml b/helm/templates/service.yaml new file mode 100644 index 0000000..1edf6a5 --- /dev/null +++ b/helm/templates/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }}-service-a +spec: + type: {{ .Values.serviceA.service.type }} + ports: + - port: {{ .Values.serviceA.service.port }} + targetPort: {{ .Values.serviceA.service.targetPort }} + selector: + app: {{ .Chart.Name }}-service-a + + diff --git a/helm/values.yaml b/helm/values.yaml new file mode 100644 index 0000000..d48e873 --- /dev/null +++ b/helm/values.yaml @@ -0,0 +1,9 @@ +serviceA: + replicaCount: 2 + image: + repository: 654654623396.dkr.ecr.ap-south-1.amazonaws.com/service-a + tag: latest + service: + type: ClusterIP + port: 80 + targetPort: 3000 diff --git a/k8s_docker_jenkins b/k8s_docker_jenkins new file mode 100644 index 0000000..aedfb2e --- /dev/null +++ b/k8s_docker_jenkins @@ -0,0 +1,42 @@ +pipeline { + agent any + environment { + IMAGE_NAME = "docker-jenkins-k8s" + IMAGE_TAG = "latest" + DOCKERHUB_CREDENTIALS = 'Docker-Jenkins' + } + stages { + stage('Checkout') { + steps { + git branch: 'main', url: 'https://github.com/sindhukampli/java-example' + } + } + stage('Build and Push Docker Image') { + steps { + withCredentials([usernamePassword(credentialsId: "${DOCKERHUB_CREDENTIALS}", passwordVariable: 'Password', usernameVariable: 'Username')]) { + sh "docker login -u ${Username} -p ${Password}" + sh "docker build -t ${IMAGE_NAME}:${IMAGE_TAG} ." + sh "docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${Username}/${IMAGE_NAME}:${IMAGE_TAG}" + sh "docker push ${Username}/${IMAGE_NAME}:${IMAGE_TAG}" + } + } + } + stage('Deploy to Kubernetes') { + agent { + label 'k8s' + } + steps { + sh "microk8s kubectl apply -f deployment.yaml" + sh "microk8s kubectl apply -f service.yaml" + } + } + } + post { + success { + echo 'Pipeline completed successfully!' + } + failure { + echo 'Pipeline failed!' + } + } +} diff --git a/pom.xml b/pom.xml index f7eacb3..7f5d8b9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,13 +6,10 @@ works-with-heroku 1.0 war - - - 17 - 17 + 1.6 + 1.6 - javax.servlet @@ -28,23 +25,18 @@ org.mockito - mockito-core - 3.12.4 + mockito-all + 1.10.19 test - - - org.apache.maven.plugins - maven-war-plugin - 3.3.1 - + org.apache.maven.plugins maven-dependency-plugin - 3.4.0 + 2.3 package diff --git a/service-a/Dockerfile b/service-a/Dockerfile new file mode 100644 index 0000000..fd0d618 --- /dev/null +++ b/service-a/Dockerfile @@ -0,0 +1,7 @@ +FROM node:14 +WORKDIR /usr/src/app +COPY package*.json ./ +RUN npm install +COPY . . +EXPOSE 3000 +CMD [ "node", "app.js" ] diff --git a/service-a/app.js b/service-a/app.js new file mode 100644 index 0000000..7213418 --- /dev/null +++ b/service-a/app.js @@ -0,0 +1,14 @@ +const http = require('http'); + +const hostname = '0.0.0.0'; +const port = 3000; + +const server = http.createServer((req, res) => { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end('Hello World\n'); +}); + +server.listen(port, hostname, () => { + console.log(`Server running at http://${hostname}:${port}/`); +}); diff --git a/service-a/package.json b/service-a/package.json new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/service-a/package.json @@ -0,0 +1 @@ + diff --git a/service.yaml b/service.yaml new file mode 100644 index 0000000..409dc12 --- /dev/null +++ b/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: tomcat-service +spec: + type: NodePort + ports: + - port: 8080 + targetPort: 8080 + nodePort: 30080 + selector: + app: tomcat