Continuous Integration: SaaS vs Jenkins in Cloud

Post on 07-Jan-2017

9.921 views 3 download

Transcript of Continuous Integration: SaaS vs Jenkins in Cloud

Continuous Integration

SaaS vs Jenkins in cloud

GLUTEN

FREE

Alessandro Mazzoli

alendmazzam@ideato.it

Who am I?

sysadmin@ideatoAWS solution architect

Why I should prefer on premise Jenkins

vs SaaS like Travis or CircleCI?

What is Jenkins?

Jenkins is a famous cross-platform,

continuous integration and continuous delivery

application

cross platform

support SCM tools

released under MIT license

Java based (war file)

job execution monitoring

reports, notifications

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

hooks, triggers, conditionals

Let’s talk about $$$

170 US$

130 US$

Travis Startup AWS c4.xlarge

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

I have also to configure and maintain Jenkins…

switch on/off every day???!!

Waste

Boring

Stressful

AWS CLI + CRONJOBS

!/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

!/bin/bash

EC2_ID=i-abcdefgh IAM=ideato_jenkins

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

exit 0

jenkins_off.sh

Let’s talk again about $$$

54 US$

130 US$

Travis Startup AWS c4.xlarge

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

Save more money?

Put your Jenkins on Reserved Instances

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

help AWS on capacity planning

hourly billing rate lower

Reserved Instances

switch AZ within the same region

Change the instance size within the same instance type

not just EC2

billing mechanism

Reserved Instances reservation cannot be refundable

applied to a single instance types

restricted inside a region

Reserved Instances

all upfront 3y save up 70%

all upfront 1y save up 30%

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

Ok but….

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

On Travis I just have to edit.travis.yaml

~= Python virtualenv

not suited for CI system

one virtualenv active at once

Containers history

1979 - chroot

unix syscall to change root directory

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

Containers history

2007 - cgroups

used for limiting, isolating and accounting

defining CPU, RAM, I/O

Containers history

2008 - LXC

first implementation of Linux containers with several features:

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

Containers history

2013 - Docker

it’s a container

technology

was LXC

isolation

encapsulation

portability

was LXC now runc

(Open Container Initiative)

difference between VM &

Docker??

Containers vs VMs

AUFSAdvanced Unification FileSystem

Layered FS

Copy on Write

enable Docker Image layers

Docker Images

read only layer

used to be containers

composed by layers

Our Docker Images

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

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

Our Docker Images

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

Our Docker Images

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

Workflow…

projects should have their Dockerfile

Workflow..

these Dockerfiles should be built on top of CI Images

Our Docker Images

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”]

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

Our Jenkins

web hook

Our Jenkins

web hook

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

Our Jenkins

web hook

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

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

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

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$

oh wait…

~ 1/3 build time than Travis

in the next few months…

built in support for delivery pipelines

pipeline as code

Jenkinsfile!!!

better UX on pipeline

finally batteries included

fully backward compatible

try it !docker pull jenkinsci/

jenkins:2.0-alpha-3

what else?

on dev we are using OSX + Vagrant + Ansible

and no Docker atm

why?

Add more complexity to FE devs

customers won’t pay to migrate old projects

no native support until now…

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

no more VirtualBox, native hypervisor support

Mac -> xhyve Windows -> HyperV

on Mac, Docker Engine will run inside a Alpine Linux

on top of xhyve

native Windows/Mac app

on OSX….

volume mounting for code/data

with auto update on file changes

(GIT, Sublime,PhpStorm)

tools integrated inside Docker Toolbox

Docker Engine, Docker Compose, Kitematic

Thanks!

Questions ??