OPENSHIFT CONTAINER PLATFORM
CI/CD Build & Deploy
$ oc get users
Natale Vinto
EMEA OpenShift Specialist Solution Architect
T: @natalevinto #RedHat #openshift #devops
Tero Ahonen
EMEA OpenShift Senior Specialist Solution Architect
T: @tpahonen #RedHat #openshift #devops
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA2
“IT WORKS ON MY COMPUTER” 
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA3
BUILD AND DEPLOY CONTAINER IMAGES
DEPLOY YOUR
SOURCE CODE
DEPLOY YOUR
CONTAINER IMAGE
DEPLOY YOUR
APP BINARY
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA4
DEPLOY SOURCE CODE WITH
SOURCE-TO-IMAGE (S2I)
Git
Repository
BUILD APP
(OpenShift)
Developer
code
Source-to-Image
(S2I)
Builder
Image
Image
Registry
BUILD IMAGE
(OpenShift)
DEPLOY
(OpenShift)
deployApplication
Container
OpenShift DoesUser/Tool Does
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA5
DEPLOY APP BINARY WITH
SOURCE-TO-IMAGE (S2I)
Application
Binary
(e.g. WAR)
BUILD APP
(Build Infra) Existing Build
Process
build
Source-to-Image
(S2I)
Builder
Image
Image
Registry
BUILD IMAGE
(OpenShift)
DEPLOY
(OpenShift)
deployApplication
Container
OpenShift DoesUser/Tool Does
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA
DEPLOY
(Openshift)
6
DEPLOY DOCKER IMAGE
build
Application
Container
deploy
Application
Image
Image
Registry
BUILD IMAGE
(Build Infra) Existing Image
Build Process
PUSH
(Build Infra)
OpenShift DoesUser/Tool Does
CONTINUOUS INTEGRATION (CI)
CONTINUOUS DELIVERY (CD)
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA
CI/CD WITH BUILD AND DEPLOYMENTS
8
BUILDS
● Webhook triggers: build the app image whenever the code changes
● Image trigger: build the app image whenever the base language or app runtime changes
● Build hooks: test the app image before pushing it to an image registry
DEPLOYMENTS
● Deployment triggers: redeploy app containers whenever configuration changes or the
image changes in the OpenShift integrated registry or upstream registries
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA9
CONTINUOUS DELIVERY WITH CONTAINERS
source
repository
CI/CD
engine
dev container
physical
virtual
private cloud
public cloud
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA10
OPENSHIFT LOVES CI/CD
JENKINS-AS-A SERVICE
ON OPENSHIFT
HYBRID JENKINS INFRA
WITH OPENSHIFT
EXISTING CI/CD
DEPLOY TO OPENSHIFT
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA11
JENKINS-AS-A-SERVICE ON OPENSHIFT
● Certified Jenkins images with pre-configured plugins
● Jenkins S2I Builder for customizing the image
● OpenShift plugins to integrate authentication with
OpenShift and also CI/CD pipelines
● Dynamically deploys Jenkins slave containers
Plugins
Jobs
Configuration
Jenkins
(S2I)
Custom
Jenkins
Image
Jenkins
Image
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA
● Scale existing Jenkins infrastructure by dynamically provisioning Jenkins slaves on OpenShift
● Use Kubernetes plug-in on existing Jenkin servers
12
HYBRID JENKINS INFRA WITH OPENSHIFT
OPENSHIFT
APP APPrun job
JENKINS
SLAVE
Run Job
JENKINS
SLAVE
Run Job
build
JENKINS
MASTER
deploy
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA13
OPENSHIFT PIPELINES
● OpenShift Pipelines allow defining a
CI/CD workflow via a Jenkins pipeline
which can be started, monitored, and
managed similar to other builds
● Dynamic provisioning of Jenkins slaves
● Auto-provisioning of Jenkins server
● OpenShift Pipeline strategies
○ Embedded Jenkinsfile
○ Jenkinsfile from a Git repository
apiVersion: v1
kind: BuildConfig
metadata:
name: app-pipeline
spec:
strategy:
type: JenkinsPipeline
jenkinsPipelineStrategy:
jenkinsfile: |-
node('maven') {
stage('build app') {
git url: 'https://git/app.git'
sh "mvn package"
}
stage('build image') {
sh "oc start-build app --from-file=target/app.jar
}
stage('deploy') {
openshiftDeploy deploymentConfig: 'app'
}
}
Provision a
Jenkins slave for
running Maven
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA
APPLICATION
IMAGE
14
CONTINUOUS DELIVERY PIPELINE
DEV TEAM GIT SERVER
ARTIFACT
REPOSITORY
JENKINS
IMAGE BUILD
● S2I build from source
code
● S2I build from app binary
● Existing docker container
image build process
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA
CONTINUOUS DELIVERY PIPELINE
OPENSHIFT
IMAGE
REGISTRY
OPENSHIFT
CLUSTER
15
DEVELOPER GIT SERVER ARTIFACT REPOSITORY
OPENSHIFT
CI/CD PIPELINE
(JENKINS)
IMAGE BUILD
& DEPLOY
OPENSHIFT
IMAGE
REGISTRY
OPENSHIFT
CLUSTER
NON-PROD PRODDEV
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA
OPENSHIFT
IMAGE
REGISTRY
OPENSHIFT
CLUSTER
16
CONTINUOUS DELIVERY PIPELINE
DEVELOPER GIT SERVER ARTIFACT REPOSITORY
OPENSHIFT
CI/CD PIPELINE
(JENKINS)
IMAGE BUILD
& DEPLOY
OPENSHIFT
IMAGE
REGISTRY
OPENSHIFT
CLUSTER
PROMOTE
TO TEST
NON-PROD PRODDEV TEST
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA
OPENSHIFT
IMAGE
REGISTRY
OPENSHIFT
CLUSTER
17
CONTINUOUS DELIVERY PIPELINE
DEVELOPER GIT SERVER ARTIFACT REPOSITORY
OPENSHIFT
CI/CD PIPELINE
(JENKINS)
IMAGE BUILD
& DEPLOY
OPENSHIFT
IMAGE
REGISTRY
OPENSHIFT
CLUSTER
PROMOTE
TO TEST
PROMOTE
TO UAT
NON-PROD PRODDEV TEST UAT
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA
ServiceNow
JIRA Service Desk
Zendeks
BMC Remedy
OPENSHIFT
IMAGE
REGISTRY
OPENSHIFT
CLUSTER
18
CONTINUOUS DELIVERY PIPELINE
DEVELOPER GIT SERVER ARTIFACT REPOSITORY
OPENSHIFT
CI/CD PIPELINE
(JENKINS)
IMAGE BUILD
& DEPLOY
OPENSHIFT
IMAGE
REGISTRY
OPENSHIFT
CLUSTER
GO
LIVE?
PROMOTE
TO TEST
PROMOTE
TO UAT
RELEASE MANAGER
NON-PROD PROD
☒
☑
DEV TEST UAT
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA
OPENSHIFT
IMAGE
REGISTRY
OPENSHIFT
CLUSTER
19
CONTINUOUS DELIVERY PIPELINE
DEVELOPER
GIT SERVER ARTIFACT REPOSITORY
OPENSHIFT
CI/CD PIPELINE
(JENKINS)
IMAGE BUILD
& DEPLOY
OPENSHIFT
IMAGE
REGISTRY
OPENSHIFT
CLUSTER
GO
LIVE?
PROMOTE
TO TEST
PROMOTE
TO UAT
PROMOTE
TO PROD
RELEASE MANAGER
NON-PROD PRODDEV TEST UAT
☒
☑
DEMO TIME
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA21
OPENSHIFT CI/CD PIPELINE
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA22
OCP NINJAS!
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA23
CONTAINERS & CLOUD-NATIVE ROADSHOW ROMA24
https://github.com/OpenShiftDemos/openshift-cd-demo
https://learn.openshift.com/introduction/
DEMO LINKS
THANK YOU
plus.google.com/+RedHat
linkedin.com/company/red-hat
youtube.com/user/RedHatVideos
facebook.com/redhatinc
twitter.com/RedHatNews

OPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy

  • 1.
    OPENSHIFT CONTAINER PLATFORM CI/CDBuild & Deploy $ oc get users Natale Vinto EMEA OpenShift Specialist Solution Architect T: @natalevinto #RedHat #openshift #devops Tero Ahonen EMEA OpenShift Senior Specialist Solution Architect T: @tpahonen #RedHat #openshift #devops
  • 2.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA2 “IT WORKS ON MY COMPUTER” 
  • 3.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA3 BUILD AND DEPLOY CONTAINER IMAGES DEPLOY YOUR SOURCE CODE DEPLOY YOUR CONTAINER IMAGE DEPLOY YOUR APP BINARY
  • 4.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA4 DEPLOY SOURCE CODE WITH SOURCE-TO-IMAGE (S2I) Git Repository BUILD APP (OpenShift) Developer code Source-to-Image (S2I) Builder Image Image Registry BUILD IMAGE (OpenShift) DEPLOY (OpenShift) deployApplication Container OpenShift DoesUser/Tool Does
  • 5.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA5 DEPLOY APP BINARY WITH SOURCE-TO-IMAGE (S2I) Application Binary (e.g. WAR) BUILD APP (Build Infra) Existing Build Process build Source-to-Image (S2I) Builder Image Image Registry BUILD IMAGE (OpenShift) DEPLOY (OpenShift) deployApplication Container OpenShift DoesUser/Tool Does
  • 6.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA DEPLOY (Openshift) 6 DEPLOY DOCKER IMAGE build Application Container deploy Application Image Image Registry BUILD IMAGE (Build Infra) Existing Image Build Process PUSH (Build Infra) OpenShift DoesUser/Tool Does
  • 7.
  • 8.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA CI/CD WITH BUILD AND DEPLOYMENTS 8 BUILDS ● Webhook triggers: build the app image whenever the code changes ● Image trigger: build the app image whenever the base language or app runtime changes ● Build hooks: test the app image before pushing it to an image registry DEPLOYMENTS ● Deployment triggers: redeploy app containers whenever configuration changes or the image changes in the OpenShift integrated registry or upstream registries
  • 9.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA9 CONTINUOUS DELIVERY WITH CONTAINERS source repository CI/CD engine dev container physical virtual private cloud public cloud
  • 10.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA10 OPENSHIFT LOVES CI/CD JENKINS-AS-A SERVICE ON OPENSHIFT HYBRID JENKINS INFRA WITH OPENSHIFT EXISTING CI/CD DEPLOY TO OPENSHIFT
  • 11.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA11 JENKINS-AS-A-SERVICE ON OPENSHIFT ● Certified Jenkins images with pre-configured plugins ● Jenkins S2I Builder for customizing the image ● OpenShift plugins to integrate authentication with OpenShift and also CI/CD pipelines ● Dynamically deploys Jenkins slave containers Plugins Jobs Configuration Jenkins (S2I) Custom Jenkins Image Jenkins Image
  • 12.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA ● Scale existing Jenkins infrastructure by dynamically provisioning Jenkins slaves on OpenShift ● Use Kubernetes plug-in on existing Jenkin servers 12 HYBRID JENKINS INFRA WITH OPENSHIFT OPENSHIFT APP APPrun job JENKINS SLAVE Run Job JENKINS SLAVE Run Job build JENKINS MASTER deploy
  • 13.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA13 OPENSHIFT PIPELINES ● OpenShift Pipelines allow defining a CI/CD workflow via a Jenkins pipeline which can be started, monitored, and managed similar to other builds ● Dynamic provisioning of Jenkins slaves ● Auto-provisioning of Jenkins server ● OpenShift Pipeline strategies ○ Embedded Jenkinsfile ○ Jenkinsfile from a Git repository apiVersion: v1 kind: BuildConfig metadata: name: app-pipeline spec: strategy: type: JenkinsPipeline jenkinsPipelineStrategy: jenkinsfile: |- node('maven') { stage('build app') { git url: 'https://git/app.git' sh "mvn package" } stage('build image') { sh "oc start-build app --from-file=target/app.jar } stage('deploy') { openshiftDeploy deploymentConfig: 'app' } } Provision a Jenkins slave for running Maven
  • 14.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA APPLICATION IMAGE 14 CONTINUOUS DELIVERY PIPELINE DEV TEAM GIT SERVER ARTIFACT REPOSITORY JENKINS IMAGE BUILD ● S2I build from source code ● S2I build from app binary ● Existing docker container image build process
  • 15.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA CONTINUOUS DELIVERY PIPELINE OPENSHIFT IMAGE REGISTRY OPENSHIFT CLUSTER 15 DEVELOPER GIT SERVER ARTIFACT REPOSITORY OPENSHIFT CI/CD PIPELINE (JENKINS) IMAGE BUILD & DEPLOY OPENSHIFT IMAGE REGISTRY OPENSHIFT CLUSTER NON-PROD PRODDEV
  • 16.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA OPENSHIFT IMAGE REGISTRY OPENSHIFT CLUSTER 16 CONTINUOUS DELIVERY PIPELINE DEVELOPER GIT SERVER ARTIFACT REPOSITORY OPENSHIFT CI/CD PIPELINE (JENKINS) IMAGE BUILD & DEPLOY OPENSHIFT IMAGE REGISTRY OPENSHIFT CLUSTER PROMOTE TO TEST NON-PROD PRODDEV TEST
  • 17.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA OPENSHIFT IMAGE REGISTRY OPENSHIFT CLUSTER 17 CONTINUOUS DELIVERY PIPELINE DEVELOPER GIT SERVER ARTIFACT REPOSITORY OPENSHIFT CI/CD PIPELINE (JENKINS) IMAGE BUILD & DEPLOY OPENSHIFT IMAGE REGISTRY OPENSHIFT CLUSTER PROMOTE TO TEST PROMOTE TO UAT NON-PROD PRODDEV TEST UAT
  • 18.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA ServiceNow JIRA Service Desk Zendeks BMC Remedy OPENSHIFT IMAGE REGISTRY OPENSHIFT CLUSTER 18 CONTINUOUS DELIVERY PIPELINE DEVELOPER GIT SERVER ARTIFACT REPOSITORY OPENSHIFT CI/CD PIPELINE (JENKINS) IMAGE BUILD & DEPLOY OPENSHIFT IMAGE REGISTRY OPENSHIFT CLUSTER GO LIVE? PROMOTE TO TEST PROMOTE TO UAT RELEASE MANAGER NON-PROD PROD ☒ ☑ DEV TEST UAT
  • 19.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA OPENSHIFT IMAGE REGISTRY OPENSHIFT CLUSTER 19 CONTINUOUS DELIVERY PIPELINE DEVELOPER GIT SERVER ARTIFACT REPOSITORY OPENSHIFT CI/CD PIPELINE (JENKINS) IMAGE BUILD & DEPLOY OPENSHIFT IMAGE REGISTRY OPENSHIFT CLUSTER GO LIVE? PROMOTE TO TEST PROMOTE TO UAT PROMOTE TO PROD RELEASE MANAGER NON-PROD PRODDEV TEST UAT ☒ ☑
  • 20.
  • 21.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA21 OPENSHIFT CI/CD PIPELINE
  • 22.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA22 OCP NINJAS!
  • 23.
  • 24.
    CONTAINERS & CLOUD-NATIVEROADSHOW ROMA24 https://github.com/OpenShiftDemos/openshift-cd-demo https://learn.openshift.com/introduction/ DEMO LINKS
  • 25.