Google Senior Software Engineer Evan Brown's presentation from the March 18, 2016 Seattle Kubernetes meetup hosted by StackPointCloud. Evan shows how you deploy Jenkins into Kubernetes, then takes us through CD and canary deployments. Join us in Seattle: http://www.meetup.com/Seattle-Kubernetes-Meetup/
3. Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Proprietary + Confidential
Evan Brown
● Software Engineer, Google
● @evandbrown
9. Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Proprietary + Confidential
Jenkins Master
10. Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Proprietary + Confidential
Jenkins Ingress
Definition
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: jenkins
namespace: jenkins
spec:
tls:
- secretName: tls
backend:
serviceName: jenkins-ui
servicePort: 8080
11. Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Proprietary + Confidential
Jenkins Executors
12. 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
13. Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Proprietary + Confidential
Jenkins Pod
Definition
14. Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Proprietary + Confidential
Kubernetes Plugin
Thank you Carlos Sanchez
@csanchez
16. Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Proprietary + Confidential
Jenkins Pipelines
Build Test DeployDevelop Observe
Flexible
Reproducible
Auditable
17. Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Proprietary + Confidential
Jenkins Pipelines
node {
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/")
}
18. Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Proprietary + Confidential
Jenkins Pipelines
24. Proprietary + ConfidentialProprietary + Confidential
Proprietary + Confidential
Developer Workflow
Example
Deploy canary to staging
Deploy new features
Rollback
25. 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
26. Tutorial and Sample App
github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes