diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..59f7ad060 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +From tomcat:9 +ADD target/addressbook.war /usr/local/tomcat/webapps +EXPOSE 8080 +CMD ["catalina.sh", "run"] diff --git a/JenkinsFile1 b/JenkinsFile1 deleted file mode 100644 index 2733d6494..000000000 --- a/JenkinsFile1 +++ /dev/null @@ -1,48 +0,0 @@ -new commit pipeline{ - new chnage for commit tools{ - jdk 'myjava' - maven 'mymaven131' - } - //commit on github-- new one - agent any - new ctsage added - stages{ - stage('Checkout on git'){ - agent any - steps{ - git 'https://github.com/devops-trainer/DevOpsClassCodes.git' - } - } - stage('Compile'){ - agent any - steps{ - sh 'mvn compile' - } - } - stage('CodeReview'){ - agent any - steps{ - sh 'mvn pmd:pmd' - } - } - stage('UnitTest'){ - agent {label 'win_slave'} - steps{ - git 'https://github.com/devops-trainer/DevOpsClassCodes.git' - bat 'mvn test' - } - } - stage('MetricCheck'){ - agent any - steps{ - sh 'mvn cobertura:cobertura -Dcobertura.report.format=xml' - } - } - stage('Package'){ - agent{label 'win_slave'} - steps{ - bat 'mvn package' - } - } - } -} diff --git a/Jenkinsfile b/Jenkinsfile index 5ebf9def9..709a2ae2b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,60 +1,58 @@ +pipeline { + options { + ansiColor('xterm') + } + agent { + kubernetes { + yamlFile 'builder.yaml' + } + } + tools{ + jdk 'myjava' + maven 'mymaven' + } + + stages { -pipeline{ - tools{ - jdk 'myjava' - maven 'mymaven' + stage("Checkout code") { + steps { + checkout scm + } } - agent any - stages{ - stage('Checkout'){ - - steps{ - echo 'cloning..' - git 'https://github.com/Sonal0409/DevOpsClassCodes.git' - } - } - stage('Compile'){ - - steps{ - echo 'compiling..' - sh 'mvn compile' - } - } - stage('CodeReview'){ - - steps{ - - echo 'codeReview' - sh 'mvn pmd:pmd' - } - } - stage('UnitTest'){ - - steps{ - echo 'Testing' - sh 'mvn test' - } - post { - success { - junit 'target/surefire-reports/*.xml' - } - } - } - stage('MetricCheck'){ - - steps{ - sh 'mvn cobertura:cobertura -Dcobertura.report.format=xml' - } - + stage("Package") { + steps { + sh "mvn clean package" + } + } + + stage('Kaniko Build & Push Image') { + environment { + PATH = "/busybox:/kaniko:$PATH" + } + steps { + container(name: 'kaniko', shell: '/busybox/sh') { + script { + sh '''#!/busybox/sh + /kaniko/executor --dockerfile `pwd`/Dockerfile \ + --context `pwd` \ + --destination=kalyand14/myimage:${BUILD_NUMBER} + ''' } - stage('Package'){ - - steps{ - - sh 'mvn package' - } + } + } + } + + + stage('Deploy App to Kubernetes') { + steps { + container('kubectl') { + withCredentials([file(credentialsId: 'mykubeconfig', variable: 'KUBECONFIG')]) { + sh 'sed -i "s//${BUILD_NUMBER}/" deployment.yaml' + sh 'kubectl apply -f deployment.yaml' } - - + } } + } + + } } diff --git a/builder.yaml b/builder.yaml new file mode 100644 index 000000000..22a489006 --- /dev/null +++ b/builder.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Pod +metadata: + name: kaniko +spec: + containers: + - name: kubectl + image: joshendriks/alpine-k8s + command: + - /bin/cat + tty: true + - name: kaniko + image: gcr.io/kaniko-project/executor:debug + command: + - /busybox/cat + tty: true + volumeMounts: + - name: kaniko-secret + mountPath: /kaniko/.docker + volumes: + - name: kaniko-secret + secret: + secretName: regcred + items: + - key: .dockerconfigjson + path: config.json diff --git a/deployment.yaml b/deployment.yaml new file mode 100644 index 000000000..00f67810b --- /dev/null +++ b/deployment.yaml @@ -0,0 +1,39 @@ +kind: Deployment +apiVersion: apps/v1 +metadata: + name: kubeserve +spec: + replicas: 2 + minReadySeconds: 10 # wait for 45 sec before going to deploy next pod + strategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 1 + maxSurge: 1 # max number of pods to run for the deployment + selector: + matchLabels: + app: kubeserve + template: + metadata: + name: kubeserve + labels: + app: kubeserve + spec: + containers: + - name: app + image: kalyand14/myimage: + imagePullPolicy: Always + +--- +kind: Service +apiVersion: v1 +metadata: + name: kubeserve-svc +spec: + type: NodePort + ports: + - port: 8080 + targetPort: 8080 + nodePort: 30009 + selector: + app: kubeserve