building a deployment pipeline - cloudbees...ruby developer qa - jenkins puppet servers puppet...

27
Jenkins User Conference Israel #jenkinsconf Noam Shochat @noamshochat eToro www.etoro.com July 16, 2014 Building a deployment pipeline #jenkinsconf

Upload: others

Post on 16-Oct-2020

55 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Jenkins User Conference Israel #jenkinsconf

Noam Shochat

@noamshochat

eToro

www.etoro.com

July 16, 2014

Building a

deployment pipeline

#jenkinsconf

Page 2: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Amount of

Work

Time

Current

What we think

will happen

Reality

Adding automation

Page 3: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

● 120 Services

● 300 Servers

● 3 Data centers

● 2 Clouds

● .Net

A little bit about eToro

Page 4: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

The problem

● Builds

● Manual deployments

● Lack of uniformity

● Different OS’s

● Slowness

● Different Environments

● Security

Developer Production

Page 5: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

The Solution

CI / CD

Code

commit

Deploy and tests in

QA

Productio

n

Build, Unit

tests

Page 6: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

We choose Jenkins

BUT…

Not good for:

● Deployment

● Orchestration

Page 7: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

So we also choose to use:

● Mcollective + Ruby for orchestration

● Puppet for deployment (and more)

● RabbitMQ for connecting between them

Page 8: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Pipeline

Commit

Build Unit tests Trigger

ruby

DeveloperQA - Jenkins

Puppet

Servers

PuppetPuppet

Integration

tests

Production - Jenkins

Puppet

Servers

PuppetPuppet

Trigger

MCollective

Trigger

MCollectiveTrigger

ruby

Page 9: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

In Jenkins

Page 10: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Flow

Page 11: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Flowout.println 'Starting OpenBookSearchAPI Flow'

b=build("OpenBookSearchAPI-Build")

parallel(

{

build("OpenbookSearchAPIBack-iis")

},

{

build("OpenbookSearchAPI-Service-Stop")

build("OpenbookSearchAPI-Service")

build("OpenbookSearchAPI-Service-Start")

}

)

Page 12: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Build

Page 13: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Build

● Mercurial

● Build start by trigger

● MSBuild

● NUnit tests + dot cover

Page 14: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Deployment

Page 15: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Deployment

● Use Ruby for trigger and orchestrate using

MCollective

● Puppet do the deployment

Page 16: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Integration tests

Page 17: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Integration tests

● Canary tests

Page 18: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Health check

Page 19: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Health check

● What is it?

● Json file that checks dependencies and

basic sanity test

Page 20: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Publish

Page 21: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Publish

● Almost in production

● Build version file as the gatekeeper to

production

Page 22: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Production deploy

● Build version file

● rsync

Page 23: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

CloudShare

● Jenkins CLI

● Dynamic jenkins agents

● The flow continue the same changes to

same flow

Page 24: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Plugins we’re using

● MSBuild

● HTML Publisher

● Nested View

● Build Flow

● Active directory

● statsd

Page 25: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Our CI/CD servers

Jenkins

master+ MCollective

RabbitMQ WebApp

Servers

Puppet

master

Ruby

script

Page 26: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Q&A

Page 27: Building a deployment pipeline - CloudBees...ruby Developer QA - Jenkins Puppet Servers Puppet Puppet Integration tests Production - Jenkins Puppet Servers Puppet Puppet Trigger MCollective

Jenkins User Conference Israel #jenkinsconf

Thank You To Our SponsorsPlatinum

Gold

Silver