Continuous Delivery in Enterprise Environments
using Docker, Ansible and Jenkins_
Dennis Schulte, Marcel Birkner
codecentric AG
2
Our Project Experience
3
Our experiences using Docker_
4
Build/Test/Deployment
Infrastructure
Getting Started with Docker
JBoss / Java EE
Standardization, Conformity, Compliance
(Security)
Dashboard
Microservices, Lightweight, Technology
Flexibility
Greenfield Enterprise Speed, Flexibility, Duplicated Environments
20 % Learning / using new technologies
Our experiences using Docker_
5
Build/Test/Deployment
Infrastructure
Getting Started with Docker
JBoss / Java EE
Standardization, Conformity, Compliance
(Security)
Dashboard
Microservices, Lightweight, Technology
Flexibility
Greenfield Enterprise Speed, Flexibility, Duplicated Environments
20 % Learning / using new technologies
JBoss / Java EE_
CI/CD Pipeline
Jenkins GitLab SonarQube Nexus SeleniumHub
Backend
DB2
ERP
LDAP
IMS
Applications
JBoss EE JBoss EEJBoss EE JBoss EE JBoss EE
JBoss EE JBoss EEJBoss EE JBoss EE JBoss EE
JBoss EE JBoss EEJBoss EE JBoss EE JBoss EE
JBoss EE JBoss EEJBoss EE JBoss EE JBoss EE
Platform
VMWareVagrant
Our experiences using Docker_
7
Build/Test/Deployment
Infrastructure
Getting Started with Docker
JBoss / Java EE
Standardization, Conformity, Compliance
(Security)
Dashboard
Microservices, Lightweight, Technology
Flexibility
Greenfield Enterprise Speed, Flexibility, Duplicated Environments
20 % Learning / using new technologies
Platform
CI/CD Pipeline
Jenkins
GitHub EE
SonarQube Nexus SeleniumHub
Backend
JIRA
WordPress
Xing
IMS
OpenStack
Dashboard_
Application
ReactJS Spring Boot Cassandra Spring Boot
AngularJS Scala Postgres Spring Boot
Static HTML NodeJS SpringBatch Keycloak
Neo4J JBoss EE NginxReactJS
Our experiences using Docker_
9
Build/Test/Deployment
Infrastructure
Getting Started with Docker
JBoss / Java EE
Standardization, Conformity, Compliance
(Security)
Dashboard
Microservices, Lightweight, Technology
Flexibility
Greenfield Enterprise Speed, Flexibility, Duplicated Environments
20 % Learning / using new technologies
Greenfield Enterprise_
Application
ReactJS Spring Boot DB2
SpringBatch
PostgresNginx
HSQL
SpringBatch
SpringBatch
SpringBatch
SpringBatch
SpringBatch
SpringBatch
SpringBatch
Spring Boot
Spring Boot
Admin
Platform
OpenStack
Backend
WebServices
Oracle
SAP
LDAP
Vagrant VMWare
CI/CD Pipeline
Jenkins
GitHub EE
SonarQube Nexus SeleniumHub
INFRASTRUCTURE AS CODE
11
12
WRITE, PLAN, AND CREATE
INFRASTRUCTURE AS CODE
13
OpenStack
AWS
VMWare
Platform
Compute
Instances
Compute
Instances
Compute
Instances
Compute
Instances
JBoss EE
Spring Boot
ReactJS
Neo4j
Infrastructure Automation_
Terraform :: Define Region & SSH Key Pair_
14
Terraform :: Define Security Group_
15
Terraform :: Define Resource_
16
Terraform :: Roll out_
•terraform plan
•terraform apply
17
18
APP DEPLOYMENT, CONFIGURATION
MANAGEMENTAND ORCHESTRATION
Ansible :: CD Infrastructure Provisioning_
•ansible-playbook site.yml
19
CI/CD Pipeline
Jenkins GitLab SonarQube Nexus SeleniumHub
Ansible :: Jenkins Role (directory listing)_
20
Ansible :: Jenkins Role (Ansible Task Excerpt)_
21
Ansible :: Application Provisioning_
•ansible-playbook site.yml
22
Application
ReactJS Spring Boot Postgres
Ansible :: Spring Boot Role (excerpt)_
23
Ansible :: Application Deployment_
•ansible-playbook deploy-example-application.yml

--extra-vars "version=1.0.0"
•ansible-playbook undeploy-example-application.yml
24
ReactJS Spring Boot Postgres
25
Ansible :: Infrastructure Repository :: Inventory & Playbooks_
Ansible Playbooks & Settings
{Environment specific settings
{
Continuous Delivery
using Docker
26
Software Development Process_
27
Developer
GitLab Jenkins
SonarQube
Nexus
Build and Release
SeleniumHub
Docker Registry
Deployment
Jenkins
GitLab
Staging
Spring Boot
Test
Spring Boot
Prod
Spring Boot
Dev
Spring Boot
Live Demo
28
29
Jenkins :: Docker Images Build Jobs_
30
Jenkins :: Example App Build & Deploy Jobs_
31
Jenkins :: Application Deployment Job_
32
Jenkins :: Example Spring Boot Application_
Demo End
33
Docker :: Image Hierarchy_
34
centos:7
jre:8jdk:8
jenkins-master:LTS example-application:
1.0.0
nexus:LTS sonarqube:LTS example-application:
1.0.0
example-application:
1.0.0
example-application:
1.0.0
example-application:
1.0.0
Docker :: JRE & Example Application Dockerfile_
35
jre:8
example-application:
1.0.0
Docker :: Image Hierarchy :: JBoss Migration_
rhel:7.2
jre:8jdk:8
jenkins-master:LTS eap:6.4nexus:LTS sonarqube:LTS
jboss-application:
1.0.0
jboss-application:
1.1.0
jboss-application:
1.2.0
Docker :: EAP Dockerfile_
37
eap:6.4
Docker :: JBoss Dockerfile_
38
jboss-application:1.0.0
Best Practices
39
•Everything is in version control
•Use Ansible inventory for environment specific information
•Use Ansible Vault for secure storage for passwords
•Generate Jenkins Jobs automatically via Job DSL
• GitLab REST API
•One Click Release & Deployments
Best practices_
40
Automate Everything
•All application run in Docker container
•Environment independent Docker images
•Use latest OS version (recent Kernel)
•Use fixed Docker / Ansible versions
•Have a clone of every system for testing new versions
• incl. CI/CD Pipeline
•Create User / Group (uid/gid) per Application Type
• required for volume mount permissions
•Do not run Docker Container under root!
Docker_
41
Stable Docker Setup
42
•Company Proxies
• HTTPs / Man-in-the-Middle
•Self-signed Certificates (HTTPs)
•Freedom to spin up servers using Terraform
•Automate network configuration
•Keynote
• Jean-Jacques van Oosten: "Do not compromise!"
Enterprise Environments_
43
Typical problems
44
“Thanks for your attention.”
45
Marcel Birkner,
Software-Consultant
codecentric AG
Hochstraße 11
42697 Solingen, Deutschland
marcel.birkner@codecentric.de
www.codecentric.de
blog.codecentric.de
marcelbirkner
Senior IT-Consultant
codecentric AG
Hochstraße 11
42697 Solingen, Deutschland
dennis.schulte@codecentric.de
www.codecentric.de
blog.codecentric.de
denschu
Dennis Schulte,

Continuous Delivery in Enterprise Environments using Docker, Ansible and Jenkins

  • 1.
    Continuous Delivery inEnterprise Environments using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner codecentric AG
  • 2.
  • 3.
  • 4.
    Our experiences usingDocker_ 4 Build/Test/Deployment Infrastructure Getting Started with Docker JBoss / Java EE Standardization, Conformity, Compliance (Security) Dashboard Microservices, Lightweight, Technology Flexibility Greenfield Enterprise Speed, Flexibility, Duplicated Environments 20 % Learning / using new technologies
  • 5.
    Our experiences usingDocker_ 5 Build/Test/Deployment Infrastructure Getting Started with Docker JBoss / Java EE Standardization, Conformity, Compliance (Security) Dashboard Microservices, Lightweight, Technology Flexibility Greenfield Enterprise Speed, Flexibility, Duplicated Environments 20 % Learning / using new technologies
  • 6.
    JBoss / JavaEE_ CI/CD Pipeline Jenkins GitLab SonarQube Nexus SeleniumHub Backend DB2 ERP LDAP IMS Applications JBoss EE JBoss EEJBoss EE JBoss EE JBoss EE JBoss EE JBoss EEJBoss EE JBoss EE JBoss EE JBoss EE JBoss EEJBoss EE JBoss EE JBoss EE JBoss EE JBoss EEJBoss EE JBoss EE JBoss EE Platform VMWareVagrant
  • 7.
    Our experiences usingDocker_ 7 Build/Test/Deployment Infrastructure Getting Started with Docker JBoss / Java EE Standardization, Conformity, Compliance (Security) Dashboard Microservices, Lightweight, Technology Flexibility Greenfield Enterprise Speed, Flexibility, Duplicated Environments 20 % Learning / using new technologies
  • 8.
    Platform CI/CD Pipeline Jenkins GitHub EE SonarQubeNexus SeleniumHub Backend JIRA WordPress Xing IMS OpenStack Dashboard_ Application ReactJS Spring Boot Cassandra Spring Boot AngularJS Scala Postgres Spring Boot Static HTML NodeJS SpringBatch Keycloak Neo4J JBoss EE NginxReactJS
  • 9.
    Our experiences usingDocker_ 9 Build/Test/Deployment Infrastructure Getting Started with Docker JBoss / Java EE Standardization, Conformity, Compliance (Security) Dashboard Microservices, Lightweight, Technology Flexibility Greenfield Enterprise Speed, Flexibility, Duplicated Environments 20 % Learning / using new technologies
  • 10.
    Greenfield Enterprise_ Application ReactJS SpringBoot DB2 SpringBatch PostgresNginx HSQL SpringBatch SpringBatch SpringBatch SpringBatch SpringBatch SpringBatch SpringBatch Spring Boot Spring Boot Admin Platform OpenStack Backend WebServices Oracle SAP LDAP Vagrant VMWare CI/CD Pipeline Jenkins GitHub EE SonarQube Nexus SeleniumHub
  • 11.
  • 12.
    12 WRITE, PLAN, ANDCREATE INFRASTRUCTURE AS CODE
  • 13.
  • 14.
    Terraform :: DefineRegion & SSH Key Pair_ 14
  • 15.
    Terraform :: DefineSecurity Group_ 15
  • 16.
  • 17.
    Terraform :: Rollout_ •terraform plan •terraform apply 17
  • 18.
  • 19.
    Ansible :: CDInfrastructure Provisioning_ •ansible-playbook site.yml 19 CI/CD Pipeline Jenkins GitLab SonarQube Nexus SeleniumHub
  • 20.
    Ansible :: JenkinsRole (directory listing)_ 20
  • 21.
    Ansible :: JenkinsRole (Ansible Task Excerpt)_ 21
  • 22.
    Ansible :: ApplicationProvisioning_ •ansible-playbook site.yml 22 Application ReactJS Spring Boot Postgres
  • 23.
    Ansible :: SpringBoot Role (excerpt)_ 23
  • 24.
    Ansible :: ApplicationDeployment_ •ansible-playbook deploy-example-application.yml
 --extra-vars "version=1.0.0" •ansible-playbook undeploy-example-application.yml 24 ReactJS Spring Boot Postgres
  • 25.
    25 Ansible :: InfrastructureRepository :: Inventory & Playbooks_ Ansible Playbooks & Settings {Environment specific settings {
  • 26.
  • 27.
    Software Development Process_ 27 Developer GitLabJenkins SonarQube Nexus Build and Release SeleniumHub Docker Registry Deployment Jenkins GitLab Staging Spring Boot Test Spring Boot Prod Spring Boot Dev Spring Boot
  • 28.
  • 29.
    29 Jenkins :: DockerImages Build Jobs_
  • 30.
    30 Jenkins :: ExampleApp Build & Deploy Jobs_
  • 31.
  • 32.
    32 Jenkins :: ExampleSpring Boot Application_
  • 33.
  • 34.
    Docker :: ImageHierarchy_ 34 centos:7 jre:8jdk:8 jenkins-master:LTS example-application: 1.0.0 nexus:LTS sonarqube:LTS example-application: 1.0.0 example-application: 1.0.0 example-application: 1.0.0 example-application: 1.0.0
  • 35.
    Docker :: JRE& Example Application Dockerfile_ 35 jre:8 example-application: 1.0.0
  • 36.
    Docker :: ImageHierarchy :: JBoss Migration_ rhel:7.2 jre:8jdk:8 jenkins-master:LTS eap:6.4nexus:LTS sonarqube:LTS jboss-application: 1.0.0 jboss-application: 1.1.0 jboss-application: 1.2.0
  • 37.
    Docker :: EAPDockerfile_ 37 eap:6.4
  • 38.
    Docker :: JBossDockerfile_ 38 jboss-application:1.0.0
  • 39.
  • 40.
    •Everything is inversion control •Use Ansible inventory for environment specific information •Use Ansible Vault for secure storage for passwords •Generate Jenkins Jobs automatically via Job DSL • GitLab REST API •One Click Release & Deployments Best practices_ 40 Automate Everything
  • 41.
    •All application runin Docker container •Environment independent Docker images •Use latest OS version (recent Kernel) •Use fixed Docker / Ansible versions •Have a clone of every system for testing new versions • incl. CI/CD Pipeline •Create User / Group (uid/gid) per Application Type • required for volume mount permissions •Do not run Docker Container under root! Docker_ 41 Stable Docker Setup
  • 42.
  • 43.
    •Company Proxies • HTTPs/ Man-in-the-Middle •Self-signed Certificates (HTTPs) •Freedom to spin up servers using Terraform •Automate network configuration •Keynote • Jean-Jacques van Oosten: "Do not compromise!" Enterprise Environments_ 43 Typical problems
  • 44.
  • 45.
    “Thanks for yourattention.” 45 Marcel Birkner, Software-Consultant codecentric AG Hochstraße 11 42697 Solingen, Deutschland marcel.birkner@codecentric.de www.codecentric.de blog.codecentric.de marcelbirkner Senior IT-Consultant codecentric AG Hochstraße 11 42697 Solingen, Deutschland dennis.schulte@codecentric.de www.codecentric.de blog.codecentric.de denschu Dennis Schulte,