KEMBAR78
Automated Image Builds in OpenShift and Kubernetes | PDF
Automated Image Builds
in OpenShift and
Kubernetes
Graham Dumpleton - Red Hat
@GrahamDumpleton
OpenShift Stack
Access and Control
Namespace
Pods
Persistent Volumes
Networking
Deployments
Builds
Docker Build
apiVersion: v1

kind: BuildConfig

metadata:

name: myimage

spec:

strategy:

type: Docker

dockerStrategy:

from:

kind: ImageStreamTag

name: centos:7

source:

type: Git

git:

uri: https://github.com/demo/myimage.git

output:

to:

kind: ImageStreamTag

name: myimage:latest
BuildConfig (Docker Strategy)
apiVersion: v1

kind: ImageStream

metadata:

name: centos

spec:

tags:

- from:

kind: DockerImage

name: centos:7

name: 7



apiVersion: v1

kind: ImageStream

metadata:

name: myimage
ImageStream(s)
Loading the Resources
oc create -f myimage-build-configuration.yaml
Short Cut for Creating Docker Build
oc new-build https://github.com/demo/myimage.git
Manually Trigger a Rebuild
oc start-build myimage
apiVersion: v1

kind: BuildConfig

metadata:

name: myimage

spec:

strategy:

type: Docker

…

source:

type: Git

git:

uri: https://github.com/demo/myimage.git

triggers:

- type: ConfigChange

- type: ImageChange

- type: GitHub 

github:

secret: kkDMDki2O40wtqDd_cxA

Build Triggers
Build ConfigChange Trigger
oc set env bc/myimage --env DEBUG=1
ImageChange Trigger
oc import-image centos:7
GitHub Trigger
Deployment
apiVersion: v1

kind: DeploymentConfig

metadata:

name: myimage

spec:

replicas: 1

selector:

app: myimage

template:

metadata:

labels:

app: myimage

spec:

containers:

- image: 172.30.240.125:5000/demo/myimage:latest

name: myimage

ports:

- containerPort: 8080

protocol: TCP
Deployment Configuration
apiVersion: v1

kind: Service

metadata:

name: myimage

spec:

ports:

- name: 8080-tcp

port: 8080

protocol: TCP

targetPort: 8080

selector:

app: myimage
Service
Short Cut for Deploy
oc new-app myimage
Short Cut for Build/Deploy
oc new-app https://github.com/demo/myimage.git
apiVersion: v1

kind: DeploymentConfig

metadata:

name: myimage

spec:

…

triggers:

- type: ConfigChange

- type: ImageChange

imageChangeParams:

containerNames:

- myimage

from:

kind: ImageStreamTag

name: myimage:latest

namespace: demo
Deployment Triggers
Deployment ConfigChange Trigger
oc set env dc/myimage --env DEBUG=1
apiVersion: v1

kind: Route

metadata:

name: myimage

spec:

host: ""

port:

targetPort: 8080-tcp

to:

name: myimage
Route
Short Cut for Exposing Service
oc expose svc/myimage
Source Build
apiVersion: v1

kind: BuildConfig

metadata:

name: myapp

spec:

strategy:

type: Source

sourceStrategy:

from:

kind: ImageStreamTag

namespace: openshift

name: python:2.7

source:

type: Git

git:

uri: https://github.com/demo/myapp.git

output:

to:

kind: ImageStreamTag

name: myapp:latest
BuildConfig (Source Strategy)
apiVersion: v1

kind: ImageStream

metadata:

name: python

namespace: openshift

spec:

tags:

- from:

kind: DockerImage

name: centos/python-27-centos7:latest

name: "2.7"
Builder ImageStream
Short Cut for Source Build/Deploy
oc new-app python:2.7~https://github.com/demo/myapp.git
S2I Execution Steps
S2I Application Image
cat /tmp/files.tar | docker run -i --name mybuild 

centos/python-27-centos7:latest 

bash -c "tar -C /tmp -xf - && 

/usr/libexec/s2i/bin/assemble"
docker commit mybuild myapp:latest
Assemble Script
#!/bin/bash



WARPDRIVE_APP_ROOT=/opt/app-root

WARPDRIVE_SRC_ROOT=$WARPDRIVE_APP_ROOT/src



cp -Rf /tmp/src/. $WARPDRIVE_SRC_ROOT

rm -rf /tmp/src



warpdrive build



chmod -Rf g+w $WARPDRIVE_SRC_ROOT || true
Running Image
docker run -p 8080:8080 myapp
Run Script
#!/bin/bash



exec warpdrive start
Using S2I Outside of OpenShift
s2i build https://github.com/demo/myapp.git 

centos/python-27-centos7:latest myapp



docker run -p 8080:8080 myapp
Source to Image Project
• https://github.com/openshift/source-to-image
Demo/Questions
OpenShift Resources
• OpenShift Origin

https://www.openshift.org
• OpenShift Enterprise/Dedicated

https://www.openshift.com
• OpenShift Commons

http://commons.openshift.org
Try OpenShift
• OpenShift TestDrive Lab on Amazon Web Services

https://www.openshift.com/dedicated/test-drive.html
• All-In-One Vagrant VM box

https://www.openshift.org/vm/
• Free Red Hat Container Development Kit (CDK)

http://developers.redhat.com/products/cdk/overview/
Automated Image Builds in OpenShift and Kubernetes

Automated Image Builds in OpenShift and Kubernetes