continuous deployment with jenkins on kubernetes

27
Proprietary + Confidential Proprietary + Confidential Continuous Deployment With Jenkins On Kubernetes

Upload: matt-baldwin

Post on 07-Jan-2017

714 views

Category:

Internet


8 download

TRANSCRIPT

Page 1: Continuous Deployment with Jenkins on Kubernetes

Proprietary + ConfidentialProprietary + Confidential

Continuous DeploymentWith JenkinsOn Kubernetes

Page 2: Continuous Deployment with Jenkins on Kubernetes

A Very Special

Thank You,@vicnastea

Page 3: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Evan Brown

● Software Engineer, Google

● @evandbrown

Page 4: Continuous Deployment with Jenkins on Kubernetes

Proprietary + ConfidentialProprietary + Confidential

Proprietary + Confidential

Agenda

Deploying Jenkins to Kubernetes

Jenkins Pipelines

Continuous Deployment on Kubernetes

Canary Deployments

How to change text

1. Place cursor on text box and enter new text or copy and paste from another document

Page 5: Continuous Deployment with Jenkins on Kubernetes

Proprietary + ConfidentialProprietary + Confidential

Proprietary + Confidential

Deploying Jenkins

Page 6: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Deploying Jenkins to Kubernetes

Page 7: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Jenkins Master

Page 8: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Jenkins MasterDefinition

apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: jenkins namespace: jenkinsspec: replicas: 1 template: metadata: labels: app: master spec: containers: - name: master image: jenkins:1.642.4 ports: - containerPort: 8080 - containerPort: 50000 env: volumeMounts: - mountPath: /var/jenkins_home name: jenkins-home volumes: - name: jenkins-home gcePersistentDisk: pdName: jenkins-home fsType: ext4 partition: 1

Page 9: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Jenkins Master

Page 10: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Jenkins IngressDefinition

apiVersion: extensions/v1beta1kind: Ingressmetadata: name: jenkins namespace: jenkinsspec: tls: - secretName: tls backend: serviceName: jenkins-ui servicePort: 8080

Page 11: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Jenkins Executors

Page 12: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Kubernetes Plugin

● Map pod templates to Jenkins labels

● Spins up/down pods on demand (per build)

● Bring your own Docker image

● Use k8s service account credentials for

authentication

Page 13: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Jenkins PodDefinition

Page 14: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Kubernetes Plugin

Thank you Carlos Sanchez

@csanchez

Page 15: Continuous Deployment with Jenkins on Kubernetes

Proprietary + ConfidentialProprietary + Confidential

Proprietary + Confidential

Jenkins Pipelines

Page 16: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Jenkins Pipelines

Build Test DeployDevelop Observe

Flexible

Reproducible

Auditable

Page 17: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Jenkins Pipelinesnode { def project = 'vic-goog' def appName = 'gceme' def feSvcName = "${appName}-frontend" def imageTag = "gcr.io/${project}/${appName}:${env.BUILD_NUMBER}"

checkout scm

stage 'Build image' sh("docker build -t ${imageTag} .")

stage 'Run Go tests' sh("docker run ${imageTag} go test")

stage 'Push image to registry' sh("gcloud docker push ${imageTag}")

stage "Deploy Application" sh("sed -i.bak 's#IMAGE_NAME#${imageTag}#' ./k8s/*.yaml") sh("kubectl --namespace=production apply -f k8s/")}

Page 18: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Jenkins Pipelines

Page 19: Continuous Deployment with Jenkins on Kubernetes

Proprietary + ConfidentialProprietary + Confidential

Proprietary + Confidential

Continuous Deployment

Page 20: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Canary Deployments in Kubernetes

kind: ServiceapiVersion: v1metadata: name: frontendspec: type: LoadBalancer ports: - name: http port: 80 targetPort: 80 protocol: TCP selector: app: awesome-stuff role: frontend

kind: DeploymentapiVersion: extensions/v1beta1metadata: name: frontend-prodspec: replicas: 90 template: metadata: name: frontend labels: app: awesome-stuff role: frontend env: prod spec: containers: - name: frontend image: my-img:v1 ports: - name: ui containerPort: 80

kind: DeploymentapiVersion: extensions/v1beta1metadata: name: frontend-stagingspec: replicas: 10 template: metadata: name: frontend labels: app: awesome-stuff role: frontend env: staging spec: containers: - name: frontend image:my-img:v2 ports: - name: ui containerPort: 80

Page 21: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Kubernetes CD Pipeline Overview

Page 22: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Canary Deployments in Kubernetes

kind: ServiceapiVersion: v1metadata: name: frontendspec: type: LoadBalancer ports: - name: http port: 80 targetPort: 80 protocol: TCP selector: app: awesome-stuff role: frontend

kind: DeploymentapiVersion: extensions/v1beta1metadata: name: frontend-prodspec: replicas: 90 template: metadata: name: frontend labels: app: awesome-stuff role: frontend env: prod spec: containers: - name: frontend image: my-img:v1 ports: - name: ui containerPort: 80

kind: DeploymentapiVersion: extensions/v1beta1metadata: name: frontend-stagingspec: replicas: 10 template: metadata: name: frontend labels: app: awesome-stuff role: frontend env: staging spec: containers: - name: frontend image:my-img:v2 ports: - name: ui containerPort: 80

Page 23: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Canary Deployments in Kubernetes

kind: ServiceapiVersion: v1metadata: name: frontendspec: type: LoadBalancer ports: - name: http port: 80 targetPort: 80 protocol: TCP selector: app: awesome-stuff role: frontend

kind: DeploymentapiVersion: extensions/v1beta1metadata: name: frontend-prodspec: replicas: 90 template: metadata: name: frontend labels: app: awesome-stuff role: frontend env: prod spec: containers: - name: frontend image: my-img:v1 ports: - name: ui containerPort: 80

kind: DeploymentapiVersion: extensions/v1beta1metadata: name: frontend-stagingspec: replicas: 10 template: metadata: name: frontend labels: app: awesome-stuff role: frontend env: staging spec: containers: - name: frontend image:my-img:v2 ports: - name: ui containerPort: 80

Page 24: Continuous Deployment with Jenkins on Kubernetes

Proprietary + ConfidentialProprietary + Confidential

Proprietary + Confidential

Developer Workflow Example

Deploy canary to stagingDeploy new features

Rollback

Page 25: Continuous Deployment with Jenkins on Kubernetes

Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem

Proprietary + Confidential

Sample App

Kubernetes Cluster

Node 2Node 1

Backend

Frontend Frontend

Backend Service

Frontend

Frontend Service

Backend Backend

Page 26: Continuous Deployment with Jenkins on Kubernetes

Tutorial and Sample Appgithub.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes

Page 27: Continuous Deployment with Jenkins on Kubernetes

THANK YOU@evandbrown