building a deployment pipeline

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

Upload: noam-shochat

Post on 20-Aug-2015

192 views

Category:

Software


2 download

TRANSCRIPT

Jenkins User Conference Israel #jenkinsconf

Noam Shochat

@noamshochat

eToro

www.etoro.com

July 16, 2014

Building a deployment pipeline

#jenkinsconf

Amount of Work

Time

Current

What we think will happen

Reality

Adding automation

● 120 Services● 300 Servers● 3 Data centers● 2 Clouds ● .Net●

A little bit about eToro

The problem

● Builds● Manual deployments● Lack of uniformity● Different OS’s● Slowness● Different Environments● Security

Developer Production

The Solution

CI / CDCode commit

Deploy and tests in QA

Production Build, Unit tests

We choose Jenkins

BUT…Not good for:

● Deployment

● Orchestration

So we also choose to use:

● Mcollective + Ruby for orchestration

● Puppet for deployment (and more)

● RabbitMQ for connecting between them

Pipeline

CommitBuild Unit tests Trigger

ruby

DeveloperQA - Jenkins

Puppet

Servers

PuppetPuppet

Integration tests

Production - Jenkins

Puppet

Servers

PuppetPuppet

Trigger MCollective

Trigger MCollective

Trigger ruby

In Jenkins

Flow

Flowout.println 'Starting OpenBookSearchAPI Flow'

b=build("OpenBookSearchAPI-Build")

parallel( { build("OpenbookSearchAPIBack-iis") }, { build("OpenbookSearchAPI-Service-Stop") build("OpenbookSearchAPI-Service") build("OpenbookSearchAPI-Service-Start") })

Build

Build

● Mercurial

● Build start by trigger

● MSBuild

● NUnit tests + dot cover

Deployment

Deployment

● Use Ruby for trigger and orchestrate using MCollective

● Puppet do the deployment

Integration tests

Integration tests

● Canary tests

Health check

Health check

● What is it?

● Json file that checks dependencies and basic sanity test

Publish

Publish

● Almost in production

● Build version file as the gatekeeper to production

Production deploy

● Build version file

● rsync

CloudShare

● Jenkins CLI

● Dynamic jenkins agents

● The flow continue the same changes to same flow

Plugins we’re using

● MSBuild● HTML Publisher● Nested View● Build Flow● Active directory● statsd

Our CI/CD serversJenkins master

+ MCollective RabbitMQ WebApp Servers

Puppet master

Ruby script

Q&A

Jenkins User Conference Israel #jenkinsconf

Thank You To Our SponsorsPlatinum

Gold

Silver