Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_...

47
Continuous Delivery in Enterprise Environments using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner codecentric AG

Transcript of Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_...

Page 1: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Continuous Delivery in Enterprise Environments

using Docker, Ansible and Jenkins_

Dennis Schulte, Marcel Birkner codecentric AG

Page 2: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

2

Page 3: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Our Project Experience

3

Page 4: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Our experiences using Docker_

4

Build/Test/Deployment Infrastructure

Getting Started with Docker

JBoss / Java EEStandardization, Conformity, Compliance (Security)

DashboardMicroservices, Lightweight, Technology Flexibility

Greenfield Enterprise Speed, Flexibility, Duplicated Environments

20 % Learning / using new technologies

Page 5: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Our experiences using Docker_

5

Build/Test/Deployment Infrastructure

Getting Started with Docker

JBoss / Java EEStandardization, Conformity, Compliance (Security)

DashboardMicroservices, Lightweight, Technology Flexibility

Greenfield Enterprise Speed, Flexibility, Duplicated Environments

20 % Learning / using new technologies

Page 6: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

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

Page 7: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Our experiences using Docker_

7

Build/Test/Deployment Infrastructure

Getting Started with Docker

JBoss / Java EEStandardization, Conformity, Compliance (Security)

DashboardMicroservices, Lightweight, Technology Flexibility

Greenfield Enterprise Speed, Flexibility, Duplicated Environments

20 % Learning / using new technologies

Page 8: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Platform

CI/CD Pipeline

Jenkins GitHub EESonarQube 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

Page 9: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Our experiences using Docker_

9

Build/Test/Deployment Infrastructure

Getting Started with Docker

JBoss / Java EEStandardization, Conformity, Compliance (Security)

DashboardMicroservices, Lightweight, Technology Flexibility

Greenfield Enterprise Speed, Flexibility, Duplicated Environments

20 % Learning / using new technologies

Page 10: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Greenfield Enterprise_

Application

ReactJS Spring Boot DB2

SpringBatchPostgresNginx

HSQL

SpringBatchSpringBatchSpringBatchSpringBatchSpringBatchSpringBatchSpringBatchSpring Boot

Spring Boot Admin

Platform

OpenStack

Backend

WebServices

Oracle

SAP

LDAP

Vagrant VMWare

CI/CD Pipeline

Jenkins GitHub EESonarQube Nexus SeleniumHub

Page 11: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

INFRASTRUCTURE AS CODE

11

Page 12: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

12

WRITE, PLAN, AND CREATE INFRASTRUCTURE AS CODE

Page 13: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

13

OpenStack

AWS

VMWare

Platform

Compute Instances

Compute Instances

Compute Instances

Compute Instances

JBoss EE

Spring Boot

ReactJS

Neo4j

Infrastructure Automation_

Page 14: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Terraform :: Define Region & SSH Key Pair_

14

Page 15: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Terraform :: Define Security Group_

15

Page 16: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Terraform :: Define Resource_

16

Page 17: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Terraform :: Roll out_

• terraform plan

• terraform apply

17

Page 18: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

18

APP DEPLOYMENT, CONFIGURATION MANAGEMENT AND ORCHESTRATION

Page 19: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

19

OpenStack

AWS

VMWare

Platform

Compute Instances

Compute Instances

Compute Instances

Compute Instances

JBoss EE

Spring Boot

ReactJS

Neo4j

Infrastructure Automation_

Page 20: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Ansible :: CD Infrastructure Provisioning_

• ansible-playbook site.yml

20

CI/CD Pipeline

Jenkins GitLab SonarQube Nexus SeleniumHub

Page 21: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Ansible :: Jenkins Role (directory listing)_

21

Page 22: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Ansible :: Jenkins Role (Ansible Task Excerpt)_

22

Page 23: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Ansible :: Application Provisioning_

• ansible-playbook site.yml

23

Application

ReactJS Spring Boot Postgres

Page 24: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Ansible :: Spring Boot Role (excerpt)_

24

Page 25: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Ansible :: Application Deployment_

• ansible-playbook deploy-example-application.yml--extra-vars "version=1.0.0"

• ansible-playbook undeploy-example-application.yml

25

ReactJS Spring Boot Postgres

Page 26: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

26

Ansible :: Infrastructure Repository :: Inventory & Playbooks_

Ansible Playbooks & Settings

{Environment specific settings

{

Page 27: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Continuous Delivery using Docker

27

Page 28: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Software Development Process_

28

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

Page 29: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Live Demo

29

Page 30: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

30

Tool URL Credentials

Jenkins http://jenkins.example.local OpenLDAP

Nexus http://nexus.example.local OpenLDAP

SonarQube http://sonarqube.example.local OpenLDAP

Gitlab http://git.example.local OpenLDAP

Docker Registry http://docker.example.local:5000/v2/_catalog no login required

Testserver http://testserver.example.local:8080 no login required

Demo :: Links_

Page 31: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

31

Jenkins :: Docker Images Build Jobs_

Page 32: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

32

Jenkins :: Example App Build & Deploy Jobs_

Page 33: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

33

Jenkins :: Application Deployment Job_

Page 34: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

34

Jenkins :: Example Spring Boot Application_

Page 35: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Demo End

35

Page 36: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Docker :: Image Hierarchy_

36

centos:7

jre:8jdk:8

jenkins-master:LTS example-application:1.0.0nexus:LTS sonarqube:LTS example-application:

1.0.0example-application:

1.0.0example-application:

1.0.0example-application:

1.0.0

Page 37: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Docker :: JRE & Example Application Dockerfile_

37

jre:8

example-application:1.0.0

Page 38: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

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

Page 39: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Docker :: EAP Dockerfile_

39

eap:6.4

Page 40: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Docker :: JBoss Dockerfile_

40

jboss-application:1.0.0

Page 41: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

Best Practices

41

Page 42: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

•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_

42

Automate Everything

Page 43: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

•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_

43

Stable Docker Setup

Page 44: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

44

Page 45: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

•Company Proxies • HTTPs / Man-in-the-Middle

•Self-signed Certificates (HTTPs)

•Freedom to spin up servers using Terraform

•Automate network configuration

•Docker Registry: "No space left on device"

•Keynote • Jean-Jacques van Oosten: "Do not compromise!"

Enterprise Environments_

45

Typical problems

Page 46: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

46

Page 47: Continuous Delivery in Enterprise Environments using ... · using Docker, Ansible and Jenkins_ Dennis Schulte, Marcel Birkner ... Ansible :: Application Deployment_ • ansible-playbook

“Thanks for your attention.”

47

Marcel Birkner,Software-Consultant

codecentric AG Hochstraße 11 42697 Solingen, Deutschland [email protected]

www.codecentric.de blog.codecentric.de

marcelbirkner

Senior IT-Consultant

codecentric AG Hochstraße 11 42697 Solingen, Deutschland [email protected]

www.codecentric.de blog.codecentric.de

denschu

Dennis Schulte,