96
Continuous Integration SaaS vs Jenkins in cloud

Continuous Integration: SaaS vs Jenkins in Cloud

  • Upload
    ideato

  • View
    9.921

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Continuous Integration: SaaS vs Jenkins in Cloud

Continuous Integration

SaaS vs Jenkins in cloud

Page 2: Continuous Integration: SaaS vs Jenkins in Cloud

GLUTEN

FREE

Alessandro Mazzoli

[email protected]

Who am I?

sysadmin@ideatoAWS solution architect

Page 3: Continuous Integration: SaaS vs Jenkins in Cloud

Why I should prefer on premise Jenkins

vs SaaS like Travis or CircleCI?

Page 4: Continuous Integration: SaaS vs Jenkins in Cloud

What is Jenkins?

Page 5: Continuous Integration: SaaS vs Jenkins in Cloud

Jenkins is a famous cross-platform,

continuous integration and continuous delivery

application

Page 6: Continuous Integration: SaaS vs Jenkins in Cloud

cross platform

support SCM tools

released under MIT license

Java based (war file)

Page 7: Continuous Integration: SaaS vs Jenkins in Cloud

job execution monitoring

reports, notifications

rich of plugins(Docker, Github, Slack, Build Pipeline)

hooks, triggers, conditionals

Page 8: Continuous Integration: SaaS vs Jenkins in Cloud
Page 9: Continuous Integration: SaaS vs Jenkins in Cloud

Let’s talk about $$$

170 US$

130 US$

Travis Startup AWS c4.xlarge

costs estimated on demand c4.xlarge up for 24h/day

Page 10: Continuous Integration: SaaS vs Jenkins in Cloud

I have also to configure and maintain Jenkins…

Page 11: Continuous Integration: SaaS vs Jenkins in Cloud
Page 12: Continuous Integration: SaaS vs Jenkins in Cloud
Page 13: Continuous Integration: SaaS vs Jenkins in Cloud

switch on/off every day???!!

Page 14: Continuous Integration: SaaS vs Jenkins in Cloud

Waste

Boring

Stressful

Page 15: Continuous Integration: SaaS vs Jenkins in Cloud
Page 16: Continuous Integration: SaaS vs Jenkins in Cloud
Page 17: Continuous Integration: SaaS vs Jenkins in Cloud

AWS CLI + CRONJOBS

Page 18: Continuous Integration: SaaS vs Jenkins in Cloud

!/bin/bash

EC2_ID=i-abcdefgh EIP=52.*.*.*. IAM=ideato_jenkins

aws ec2 start-instances --instance-ids ${EC2_ID} profile ${IAM}

aws ec2 associate-address --instance-id ${EC2_ID} --public-ip ${EIP} --profile ${IAM} exit 0

jenkins_on.sh

Page 19: Continuous Integration: SaaS vs Jenkins in Cloud

!/bin/bash

EC2_ID=i-abcdefgh IAM=ideato_jenkins

aws ec2 stop-instances --instance-ids ${EC2_ID} —profile ${IAM}

exit 0

jenkins_off.sh

Page 20: Continuous Integration: SaaS vs Jenkins in Cloud

Let’s talk again about $$$

54 US$

130 US$

Travis Startup AWS c4.xlarge

costs estimated on demand c4.xlarge up for 8h/day

Page 21: Continuous Integration: SaaS vs Jenkins in Cloud

Save more money?

Page 22: Continuous Integration: SaaS vs Jenkins in Cloud

Put your Jenkins on Reserved Instances

Page 23: Continuous Integration: SaaS vs Jenkins in Cloud

Reserved Instances capacity reservation for one or three years inside an AZ

help AWS on capacity planning

hourly billing rate lower

Page 24: Continuous Integration: SaaS vs Jenkins in Cloud

Reserved Instances

switch AZ within the same region

Change the instance size within the same instance type

not just EC2

billing mechanism

Page 25: Continuous Integration: SaaS vs Jenkins in Cloud

Reserved Instances reservation cannot be refundable

applied to a single instance types

restricted inside a region

Page 26: Continuous Integration: SaaS vs Jenkins in Cloud

Reserved Instances

all upfront 3y save up 70%

all upfront 1y save up 30%

Page 27: Continuous Integration: SaaS vs Jenkins in Cloud

Let’s talk again about $$$

34 US$

130 US$

Travis Startup AWS c4.xlarge

costs estimated on reserved 1y upfront c4.xlarge up for 8h/day

Page 28: Continuous Integration: SaaS vs Jenkins in Cloud

Ok but….

Page 29: Continuous Integration: SaaS vs Jenkins in Cloud

different stacks?!• OS (Debian vs RedHat) • PHP(5.x), Java, Python • Elasticsearch(0.9->1.7) • Mongo • MySQL,PostgreSQL

Page 30: Continuous Integration: SaaS vs Jenkins in Cloud

On Travis I just have to edit.travis.yaml

Page 31: Continuous Integration: SaaS vs Jenkins in Cloud
Page 32: Continuous Integration: SaaS vs Jenkins in Cloud
Page 33: Continuous Integration: SaaS vs Jenkins in Cloud

~= Python virtualenv

Page 34: Continuous Integration: SaaS vs Jenkins in Cloud

not suited for CI system

one virtualenv active at once

Page 35: Continuous Integration: SaaS vs Jenkins in Cloud

Containers history

1979 - chroot

unix syscall to change root directory

of a process to a new location only visible by that process

Page 36: Continuous Integration: SaaS vs Jenkins in Cloud

Containers history

2007 - cgroups

used for limiting, isolating and accounting

defining CPU, RAM, I/O

Page 37: Continuous Integration: SaaS vs Jenkins in Cloud

Containers history

2008 - LXC

first implementation of Linux containers with several features:

cgroups, namespace, CAP, API bindings on Ruby,Python..

Page 38: Continuous Integration: SaaS vs Jenkins in Cloud

Containers history

2013 - Docker

Page 39: Continuous Integration: SaaS vs Jenkins in Cloud
Page 40: Continuous Integration: SaaS vs Jenkins in Cloud

it’s a container

technology

Page 41: Continuous Integration: SaaS vs Jenkins in Cloud

was LXC

Page 42: Continuous Integration: SaaS vs Jenkins in Cloud

isolation

Page 43: Continuous Integration: SaaS vs Jenkins in Cloud

encapsulation

Page 44: Continuous Integration: SaaS vs Jenkins in Cloud

portability

Page 45: Continuous Integration: SaaS vs Jenkins in Cloud

was LXC now runc

(Open Container Initiative)

Page 46: Continuous Integration: SaaS vs Jenkins in Cloud

difference between VM &

Docker??

Page 47: Continuous Integration: SaaS vs Jenkins in Cloud

Containers vs VMs

Page 48: Continuous Integration: SaaS vs Jenkins in Cloud
Page 49: Continuous Integration: SaaS vs Jenkins in Cloud
Page 50: Continuous Integration: SaaS vs Jenkins in Cloud

AUFSAdvanced Unification FileSystem

Layered FS

Copy on Write

enable Docker Image layers

Page 51: Continuous Integration: SaaS vs Jenkins in Cloud

Docker Images

read only layer

used to be containers

composed by layers

Page 52: Continuous Integration: SaaS vs Jenkins in Cloud
Page 53: Continuous Integration: SaaS vs Jenkins in Cloud

Our Docker Images

Page 54: Continuous Integration: SaaS vs Jenkins in Cloud

Our Docker ImagesFROM ubuntu:trustyRUN apt-get install -yq \

software-properties-common \ python-software-properties \ git \ vim \ wget \ curl

Page 55: Continuous Integration: SaaS vs Jenkins in Cloud

Our Docker Images

Page 56: Continuous Integration: SaaS vs Jenkins in Cloud

Our Docker ImagesFROM ideato/trustyENV DEBIAN_FRONTEND noninteractiveRUN add-apt-repository -y ppa:ondrej/php5RUN apt-get install -yq --no-install-recommends \

php5 \ php5-cli \ php5-common \ php5-dev \ php5-gd \ php5-curl \ php5-mcrypt \ libapache2-mod-php5

Page 57: Continuous Integration: SaaS vs Jenkins in Cloud

Our Docker Images

Page 58: Continuous Integration: SaaS vs Jenkins in Cloud

Our Docker Images

FROM ideato/trusty_php:5.5RUN apt-get install -yq mysql-server-5.5RUN wget https://phar.phpunit.de/phpunit.pharRUN chmod +x phpunit.phar RUN mv phpunit.phar /usr/local/bin/phpunit

Page 59: Continuous Integration: SaaS vs Jenkins in Cloud

Workflow…

projects should have their Dockerfile

Page 60: Continuous Integration: SaaS vs Jenkins in Cloud

Workflow..

these Dockerfiles should be built on top of CI Images

Page 61: Continuous Integration: SaaS vs Jenkins in Cloud

Our Docker Images

Page 62: Continuous Integration: SaaS vs Jenkins in Cloud

Example ProjectFROM ideato/trusty_php_CI:5.5ENV DB defaultRUN apt-get install -yq \

npm \openjdk-7-jre \openjdk-7-jdk \nodejs

RUN wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.debRUN dpkg -i elasticsearch-1.7.3.debADD bin/run_tests /ENTRYPOINT [“./bin/run_tests”]

Page 63: Continuous Integration: SaaS vs Jenkins in Cloud

Example Project #!/bin/bashcd /exampleproj/workspaceservice mysql startservice elasticsearch startbin/idx build

Page 64: Continuous Integration: SaaS vs Jenkins in Cloud

Our Jenkins

web hook

Page 65: Continuous Integration: SaaS vs Jenkins in Cloud

Our Jenkins

web hook

docker build -q -t ideato:exampleproj -f Dockerfile .

Page 66: Continuous Integration: SaaS vs Jenkins in Cloud

Our Jenkins

web hook

docker build -q -t ideato:exampleproj -f Dockerfile .

docker run --rm=true -v $WORKSPACE:/example_project -t ideato:exampleproj

Page 67: Continuous Integration: SaaS vs Jenkins in Cloud

Our Jenkins

web hook

docker build -q -t ideato:exampleproj -f Dockerfile .

docker run --rm=true -v $WORKSPACE:/example_project -t ideato:exampleproj

channel notification

Page 68: Continuous Integration: SaaS vs Jenkins in Cloud

Resuming….

1 day for Jenkins setup ~ 280$

(one time cost) +

AWS c4.xlarge 34$ x 12 ~ 600$ vs

TravisCI Startup Plan 130€ x 12 = 1560$

Page 69: Continuous Integration: SaaS vs Jenkins in Cloud

oh wait…

~ 1/3 build time than Travis

Page 70: Continuous Integration: SaaS vs Jenkins in Cloud

in the next few months…

Page 71: Continuous Integration: SaaS vs Jenkins in Cloud
Page 72: Continuous Integration: SaaS vs Jenkins in Cloud

built in support for delivery pipelines

Page 73: Continuous Integration: SaaS vs Jenkins in Cloud

pipeline as code

Page 74: Continuous Integration: SaaS vs Jenkins in Cloud

Jenkinsfile!!!

Page 75: Continuous Integration: SaaS vs Jenkins in Cloud

better UX on pipeline

Page 76: Continuous Integration: SaaS vs Jenkins in Cloud
Page 77: Continuous Integration: SaaS vs Jenkins in Cloud

finally batteries included

Page 78: Continuous Integration: SaaS vs Jenkins in Cloud
Page 79: Continuous Integration: SaaS vs Jenkins in Cloud

fully backward compatible

Page 80: Continuous Integration: SaaS vs Jenkins in Cloud

try it !docker pull jenkinsci/

jenkins:2.0-alpha-3

Page 81: Continuous Integration: SaaS vs Jenkins in Cloud

what else?

Page 82: Continuous Integration: SaaS vs Jenkins in Cloud

on dev we are using OSX + Vagrant + Ansible

and no Docker atm

Page 83: Continuous Integration: SaaS vs Jenkins in Cloud

why?

Page 84: Continuous Integration: SaaS vs Jenkins in Cloud

Add more complexity to FE devs

Page 85: Continuous Integration: SaaS vs Jenkins in Cloud

customers won’t pay to migrate old projects

Page 86: Continuous Integration: SaaS vs Jenkins in Cloud

no native support until now…

Page 87: Continuous Integration: SaaS vs Jenkins in Cloud

https://blog.docker.com/2016/03/docker-for-mac-windows-beta/

Page 88: Continuous Integration: SaaS vs Jenkins in Cloud

no more VirtualBox, native hypervisor support

Mac -> xhyve Windows -> HyperV

Page 89: Continuous Integration: SaaS vs Jenkins in Cloud

on Mac, Docker Engine will run inside a Alpine Linux

on top of xhyve

Page 90: Continuous Integration: SaaS vs Jenkins in Cloud

native Windows/Mac app

Page 91: Continuous Integration: SaaS vs Jenkins in Cloud

on OSX….

Page 92: Continuous Integration: SaaS vs Jenkins in Cloud

volume mounting for code/data

with auto update on file changes

(GIT, Sublime,PhpStorm)

Page 93: Continuous Integration: SaaS vs Jenkins in Cloud

tools integrated inside Docker Toolbox

Docker Engine, Docker Compose, Kitematic

Page 95: Continuous Integration: SaaS vs Jenkins in Cloud

Thanks!

Page 96: Continuous Integration: SaaS vs Jenkins in Cloud

Questions ??