continuous integration && docker

31
CONTINUOUS INTEGRATION && DOCKER GOING PARALLEL by Michael Bodnarchuk @davert

Upload: studio-stfalconcom

Post on 16-Jul-2015

248 views

Category:

Software


11 download

TRANSCRIPT

Page 1: CONTINUOUS INTEGRATION && DOCKER

CONTINUOUSINTEGRATION &&

DOCKERGOING PARALLEL

by Michael Bodnarchuk @davert

Page 2: CONTINUOUS INTEGRATION && DOCKER

WHO AM I?Web developer with Ruby,JavaScript and PHP experienceLead developer of

Space Traveler

Codeception PHPTesting Framework

Page 3: CONTINUOUS INTEGRATION && DOCKER

WHAT IS ALL ABOUT?Development vs Testing EnvironmentUsing Docker for TestingOverview of CI ServersRunning Paralell Jobs

Page 4: CONTINUOUS INTEGRATION && DOCKER

DEVELOPMENTENVIRONMENT

use same OSuse same PHP/Java/Ruby/Python versionuse same services (Nginx, MySQL, Mongo)use same configurationssetup fake smtp server

Page 5: CONTINUOUS INTEGRATION && DOCKER
Page 6: CONTINUOUS INTEGRATION && DOCKER

TESTING ENVIRONMENTsame as Development Environmentprepared to run on CI serveruses database with data fixturesshould be cleaned after tests executionmay contain additional services like Selenium

Page 7: CONTINUOUS INTEGRATION && DOCKER

TESTING+DEVELOPMENTSETUP

Use provisioning: Chef, Ansible, Puppet, ...Create/delete databases for each test executionSolve isolation issues for parallel testing

Page 8: CONTINUOUS INTEGRATION && DOCKER

OR USE

Page 9: CONTINUOUS INTEGRATION && DOCKER

WHAT IS DOCKERDocker is an open platform distributed appsRuns and manages isolated Linux containersProvides GitHub-like infrastructure

Page 10: CONTINUOUS INTEGRATION && DOCKER

Host

Container 1

Container 2

Container 3

Container ...

Docker Clientdocker pulldocker rundocker ...

Docker Index

Docker Daemon

Page 11: CONTINUOUS INTEGRATION && DOCKER

DOCKER IMAGESIsolated FilesystemBuilt by DockerUses Incremental FS DriversCan be stored in Docker Registry

Page 12: CONTINUOUS INTEGRATION && DOCKER

IMAGES BUILT FROM DOCKERFILEFROM fedora:20

RUN yum install -y mongodb-server && yum clean all

RUN mkdir -p /var/lib/mongodb && \ touch /var/lib/mongodb/.keep && \ chown -R mongodb:mongodb /var/lib/mongodb

ADD mongodb.conf /etc/mongodb.conf

VOLUME [ "/data/db" ]

EXPOSE 27017

USER mongodbWORKDIR /var/lib/mongodbCMD mongod

Page 13: CONTINUOUS INTEGRATION && DOCKER
Page 14: CONTINUOUS INTEGRATION && DOCKER

DOCKER CONTAINERRunning container != booting OSNo daemons will be executed on startOnly one process can be run at once

Page 15: CONTINUOUS INTEGRATION && DOCKER

RUN CONTAINER$ docker run -it -p 27017:27017 -v /var/www/project/data:/data mongo1

Page 16: CONTINUOUS INTEGRATION && DOCKER

CONTINUOUS INTEGRATION (CI) IS A DEVELOPMENTPRACTICE THAT REQUIRES DEVELOPERS TO INTEGRATE CODEINTO A SHARED REPOSITORY SEVERAL TIMES A DAY. EACH

CHECK-IN IS THEN VERIFIED BY AN AUTOMATED BUILD,ALLOWING TEAMS TO DETECT PROBLEMS EARLY.

thoughtworks.com/continuous-integration

Page 17: CONTINUOUS INTEGRATION && DOCKER

TRAVIS CI

Page 18: CONTINUOUS INTEGRATION && DOCKER

TRAVIS CI FEATURESSaaSFree for open source projectsSimple configurationVirtualization via OpenVPN/DockerConcurrent buildsPlans start from 129$/month

Page 19: CONTINUOUS INTEGRATION && DOCKER

JENKINS CI

Page 20: CONTINUOUS INTEGRATION && DOCKER

JENKINS FEATURESFree HostedDozens of PluginsThe Most Popular and TrustedOld-School Interface

Page 21: CONTINUOUS INTEGRATION && DOCKER
Page 22: CONTINUOUS INTEGRATION && DOCKER

RUNNING PARALLELBUILDS

TravisCI: out-of-box. Runs same tests suites for differentlanguage versions. I.e. PHP 5.3, 5.4, 5.5JenkinsCI: using multi-configuration project (MatrixReloadedplugin). Builds can be executed on slave servers.

Page 23: CONTINUOUS INTEGRATION && DOCKER

BUILD MATRIX1. Configure axis2. Combinate values3. Use current values as environment vars

Page 24: CONTINUOUS INTEGRATION && DOCKER

CONFIGURATION MATRIX EXAMPLE

Page 25: CONTINUOUS INTEGRATION && DOCKER
Page 26: CONTINUOUS INTEGRATION && DOCKER

RUN CONCURENT JOBdocker run -i -t -v $WORKSPACE:/project test_container ./runtests.sh $SUITE

Page 27: CONTINUOUS INTEGRATION && DOCKER

WHAT'S INSIDE TEST CONTAINER?Test container contain prepared database./runtests.sh starts all required services (nginx, mysql,selenium, redis, etc)Container stops when tests are finishedNo supervisors: we can execute only one process per run

Page 28: CONTINUOUS INTEGRATION && DOCKER

RUNTESTS.SH#!/bin/shecho "Starting Services...."service elasticsearch start > /dev/null 2>&1service nginx start > /dev/null 2>&1service php5-fpm start > /dev/null 2>&1service mysql start > /dev/null 2>&1service memcached start > /dev/null 2>&1phantomjs --webdriver=4444 > /dev/null 2>&1 &mailcatcher -f > /dev/null 2>&1 &

echo "Running tests"cd /project/$1 # switch to applicationcodecept run $2 # run tests from specific suite

Page 29: CONTINUOUS INTEGRATION && DOCKER

LESSONS LEARNEDstopped containers should be removedcontainers should be auto-rebuilt on test data updates

Page 30: CONTINUOUS INTEGRATION && DOCKER

CONCLUSIONSTest execution time can be improved by running tests inparallelDocker makes easy to run isolated concurrent builds

Page 31: CONTINUOUS INTEGRATION && DOCKER

QUESTIONS?Talk by GitHub: Projects: , ,

Michael Bodnarchuk @davertDavertMik

Codeception Robo Task Runner JSter