pimp your pipeline - central configuration management - jens saade

44
Pimp Your Pipeline Central Configuration Management Jens Saade, youngculture April 25th 2015, Iasi CodeCamp Romania

Upload: youngculture

Post on 16-Jul-2015

232 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Pimp Your Pipeline

Central Configuration Management

Jens Saade, youngculture April 25th 2015, Iasi CodeCamp Romania

Page 2: Pimp Your Pipeline - Central Configuration Management - Jens Saade
Page 3: Pimp Your Pipeline - Central Configuration Management - Jens Saade

ReferencesAbout youngculture Group

Jens Saade

Head Innovation & Technology E-Commerce Engineering Background (Retail, PIM, E-Commerce)Located in Zürich, CH

Dev  Process  Architecture   Innova2on  

Ini2a2ves  

Page 4: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Central Configuration Repository

Appliance in Continuous Delivery

Automation & Configuration

Intro youngculture E-Commerce

Page 5: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Intro: E-Commerce

@YC

Page 6: Pimp Your Pipeline - Central Configuration Management - Jens Saade

youngculture ECOM team delivers highly integrated E-Commerce Solutions based on the Hybris Platform.

Page 7: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Customized B2C Storefront Showcase

Page 8: Pimp Your Pipeline - Central Configuration Management - Jens Saade

B2C & B2B Shops and PIM Systems

Page 9: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Delivering good quality in a highly complex project environment is only possible by aligning team, processes and infrastructure environments.

Page 10: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Con2nuous  Delivery  

Configura2on  Mgmt  

Test  Automa2on  

Cloud  Services  

Automated  Provisioning  

Workspace  (Confluence,  

JIRA)  

Prac2ce  Meetups  

Integrated  Communica2on  

(HipChat)  

System  Monitoring  

HW/OS  (NewRelic,  Nagios)  

Applica2on  Monitoring  

Logs  (Elas2cSearch/Kibana,  Splunk)  

Performance  (Dynatrace),  

Delivery Environment

EnvironmentsCAM

Collaborate

AutomateMonitor

TeamsSystems

Projects

Page 11: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Automation

Page 12: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Continuous Delivery

Familiar with the Concepts? Tried applying it in own Company?

Part of your Culture?

Page 13: Pimp Your Pipeline - Central Configuration Management - Jens Saade

AUTOMATION is hard work ...expensive to establish...and can get pretty complex

BUT

... reduces monkey work... speeds up the dev & delivery processes

... calms down stress level ...and raises confidence and quality.

Page 14: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Release anytime, reproducible

Create Hybris

Projects, Extension

and Addons

SetupContinously

Build deployable

artifacts

BuildAssess

Software by Automated

Testing

Test

Continuous Delivery Overview

Install for testing,

acceptance and

production

Deploy

> Commit Stage > Acceptance Stage > Deployment Stage

Feedback Feedback Feedback

Establishing a Delivery Pipeline is a joint team effort! It involves lots of disciplines and evolves constantly.

Page 15: Pimp Your Pipeline - Central Configuration Management - Jens Saade

CustomersDevelopers Product Owner

Scrum Master

Delivery Process: Automation is Key

Test Execution EnvJenkinsCI

Artifactory Repository

GitRepository

Hybris Node

YC Deploy Client

Apache HTTPdSelenium

GatlingJMeter

Test Exec Hybris Test

Commit Stage

Acceptance Stage

Deploy Stage

Continuous Delivery

Monitoring Node

Stage/Production

Hybris Node1

Hybris Cluster

Apache HTTPd

Varnish

Apache HTTPd

Varnish

DB Cluster

Load Balancer

ElasticSeach

Logstash

Kibana

Zabbix

External Monitoring

NewRelic

Hybris Node 2

YC Deploy Client

YC Deploy Client

Hosting Environment

Team

sIn

frast

ruct

ures

Maintenance team

Page 16: Pimp Your Pipeline - Central Configuration Management - Jens Saade

One essential problem left:

Configurations

Page 17: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Ecosystem of Configurations

Versioned Software Artifact

Dev 1

Dev 2

Ops 1

Ops2

QA

Test specifc artifact

versions for regressionQA on

features

Create new Conf

PropertyShare his conf with

Dev 2

Prepare RolloutConf for tonight

Enable feature for customer

Req Eng

Introduce new concept, define triggers

A=1

B=truec=debug

Page 18: Pimp Your Pipeline - Central Configuration Management - Jens Saade

7Env.properties

? Project Specific

236

Project.properties

436Advanced.properties

7Env.properties

? Project Specific

236

Project.properties

436Advanced.properties

Node 1

7Env.properties

? Project Specific

236

Project.properties

436Advanced.properties

Node 2

7Env.properties

? Project Specific

236

Project.properties

436Advanced.properties

Node 3

1 Clustered Environment

Dev(s)QA SystemsProductionUAT/Stage...

Hybris Configuration Stack (Properties based)

Page 19: Pimp Your Pipeline - Central Configuration Management - Jens Saade

(manual) Configuration

Page 20: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Central Configuration Management

Page 21: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Diversity: Support complex environment setups

!=

We need good concepts how to configure environments nearly equivalent

but allow flexibility for individual deviations

Page 22: Pimp Your Pipeline - Central Configuration Management - Jens Saade

„The most efficient way to manage configuration is to have a central service through which every application can get the configuration it needs.“

Jez Humble and Dave Farley „Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation“, Addison-Wesley 2010

Page 23: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Artifact

Generic Configuration

Machine

Java VM

Rolling out Configurations

Configurations get packaged and rolled out

JVMs are bootstrapped from packaged configurations

Machine

Java VM

Machine

Java VM

Machine

Java VM

Environment Configuration

Page 24: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Turning from distributing (and manually tweaking) local configurations ...

... to a centralized environment that hosts configurations for self-service.

Direction change: Push -> Pull

Page 25: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Artifact

Machine

Java VM

Rolling out Configurations, alternative

Rollout Software Artifact as usual, but keep it generic, just provide configuration IDs

Isolate configurations from the deployment package and provide it centrally from the CCR

Machine

Java VM

Machine

Java VM

Machine

Java VM

UUID

Generic Configuration

CCR  

Environment Configuration

UUID

UUID UUID

UUID

UUID

Generic Configuration

Environment Configuration

Page 26: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Hierachical Key-Value Store

Configuration

Configuration

UUID3

UUID4

Machine

Application

Client Wrapper

Central Configuration Repository (CCR) and Consuming Clients

Agent pulls configuration properties via REST / Json

Then injects properties to JVM System context

MachineMachineMachine Machine

Machine

Machine

Machine

MachineMachineMachineMachine

Machine

Machine

Machine

Machine

Machine

REST / Json

discoBit

API

Admin UI

CCR  

Page 27: Pimp Your Pipeline - Central Configuration Management - Jens Saade

CD & CCR Applied @YC

Page 28: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Configuration Hierarchies

Automated space

UUID1

Shared space

UUID2

UAT Environment

UUID7

UAT node 1

UUID8

UAT Node 2

UUID9

QA: Nightly Build Test System

UUID6

Personalized Conf Developer A

UUID3

Personalized Conf Developer B

UUID5

Ops 1

Ops2

QA

Dev 1

Dev 2

Req Eng

Continuous Delivery Cycle

Page 29: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Customized (env1)

UUID3

Customized (env2)

UUID4

Machine

Java VM

discoBit Java Agent (UUID4)

System Context Injection via Java Agent

discoBit

Agent pulls configuration properties via REST / Json

Then injects properties to JVM System context

Automated space

UUID1

Shared space

UUID2

Page 30: Pimp Your Pipeline - Central Configuration Management - Jens Saade
Page 31: Pimp Your Pipeline - Central Configuration Management - Jens Saade
Page 32: Pimp Your Pipeline - Central Configuration Management - Jens Saade
Page 33: Pimp Your Pipeline - Central Configuration Management - Jens Saade

jsaade@MacBook-Pro:~/hybris/hybris-commerce-suite-5.4.0.0/hybris/bin/platform$ ./hybrisserver.sh Launching a JVM...Apr 20, 2015 1:42:33 PM com.v3rticle.oss.discobit.client.bootstrap.DiscobitSettings <init>INFORMATION: [discobit] configuring server from system: http://127.0.0.1:8089

Apr 20, 2015 1:42:33 PM com.youngculture.ecom.hybris.discobit.HybrisDiscobitAgent executeINFORMATION: Reading discobit configuration from http://127.0.0.1:8089::bb2835fb-466c-4143-8081-ffcd60c49467

Apr 20, 2015 1:42:33 PM com.v3rticle.oss.discobit.client.bootstrap.DiscobitSettings <init>INFORMATION: [discobit] configuring server from system: http://127.0.0.1:8089Apr 20, 2015 1:42:33 PM com.v3rticle.oss.discobit.client.bootstrap.DiscobitSettings <init>

INFORMATION: [discobit] configuring server from system: http://127.0.0.1:8089Apr 20, 2015 1:42:33 PM com.v3rticle.oss.discobit.client.DiscobitConnector authenticate

INFORMATION: [discobit] authentication response: HTTP/1.1 200 OKApr 20, 2015 1:42:33 PM com.v3rticle.oss.discobit.client.DiscobitConnector authenticateINFORMATION: [discobit] authentication cookie: [[version: 0][name: JSESSIONID][value: 65452FC130FE2F87E8655BF05D5F0A90][domain: 127.0.0.1][path: /][expiry: null]]Apr 20, 2015 1:42:34 PM com.youngculture.ecom.hybris.discobit.HybrisDiscobitAgent executeINFORMATION: injected 677 properties to system contextWrapperManager: Initializing...

Apr 20, 2015 1:42:39 PM org.apache.tomcat.util.digester.SetPropertiesRule beginWARNUNG: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'disableURLRewriting' to 'true' did not find a matching property.Apr 20, 2015 1:42:40 PM org.apache.tomcat.util.digester.SetPropertiesRule beginWARNUNG: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'disableURLRewriting' to 'true' did not find a matching property.Apr 20, 2015 1:42:40 PM org.apache.coyote.AbstractProtocol init

INFORMATION: Initializing ProtocolHandler ["http-bio-9001"]Apr 20, 2015 1:42:40 PM org.apache.coyote.AbstractProtocol init

INFORMATION: Initializing ProtocolHandler ["http-bio-9002"]Apr 20, 2015 1:42:45 PM org.apache.coyote.AbstractProtocol initINFORMATION: Initializing ProtocolHandler ["ajp-bio-8009"]

Apr 20, 2015 1:42:45 PM org.apache.catalina.startup.Catalina loadINFORMATION: Initialization processed in 5834 ms

Apr 20, 2015 1:42:45 PM org.apache.catalina.mbeans.JmxRemoteLifecycleListener createServerINFORMATION: The JMX Remote Listener has configured the registry on port 9003 and the server on port 9004 for the Platform serverApr 20, 2015 1:42:45 PM org.apache.catalina.core.StandardService startInternal

INFORMATION: Starting service Catalina

Page 34: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Key Take Aways

Page 35: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Key Take Aways •  Simple, unified approach to avoid wide-spread

configuration and their mutation

•  Language & product agnostic

•  Enabling other teams and colleagues to take controlled influence on configs in general

•  Needs a clear strategy concerning delivery cycle, security and infrastructure

Page 36: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Usecases •  Configure applications in hosting enviroments,

test farms, desktops

•  Developers share configurations while creating a solution

•  QA configures their testing systems individually

•  Dark launching of software changes

•  Feature toggling for indidual usage profiles

Page 37: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Pros

•  Central administration

•  Create multi-level configuration inheritance

•  Turn from a push-based model to a consumer pull-based self service

•  Allow fine grained access to (parts) of configurations for different stakeholder roles

•  Change properties without rollouts (trigger reload events instead)

+++

+

+

Page 38: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Cons (yes there are)

•  Accessibilty from environment to CCR needs to be resilient, fallbacks needed (e.g. local caching).

•  Configuring during runtime can have unforseen side effects in your application (check lifecycle).

•  Administrative access to configurations needs to be well thought.

-­‐  

-­‐  

-­‐  

Page 39: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Where to go next? Potential Extensions

•  Tracking changes possible (who did what and when)

•  Add versioning by storing configs in an SCM for rollbacks ore regression testing

•  Stage changes for different rollout scenarios

•  Add hierarchical config structures like YAML

Page 40: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Questions?

Page 41: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Thanks! Mail: [email protected]

Twitter: @jenssaade

youngculture.com

Hybris.com

discoBit.com

Page 42: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Appendix

Page 43: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Continuous Delivery Hosting

QA Testing

Jenkins CI

Embedding into Continuous Delivery Flow

discoBit

Application Instance 2

UUID 2

Application Instance 1

UUID1

Application Instance n

UUID nConfig

Repository

REST API

Artifactory

Distributable Artifact

Acceptance Stage

Deploy Stage

deploybuild configure

UI

1  

2  

3  

Commit Stage

env.properties

project.properties

advanced.properties

Page 44: Pimp Your Pipeline - Central Configuration Management - Jens Saade

Continuous Delivery

QA Testing

Source (git)

Jenkins

Stacked Configurations in the Central Config Repo

Commit Stage

env.properties

discoBit

Application Instance 1

UUID3

Acceptance Stage

Deploy Stage

deploybuild configure

Automated space

UUID1

Shared space

<extends>

UUID2

UUID1

<extends>

Customized (env2)

Customized (env1)

UUID3

UUID4

Devs’ Machine

Application Instance 3

UUID4

Application Instance 2

UUID3

1  

2  

project.properties

advanced.properties

merge