continuous integration using docker & jenkins

43
Continuous Integration using Docker & Jenkins LinuxCon Europe 2014 October 13-15, 2014 Mattias Giese Solutions Architect B1 Systems GmbH [email protected] B1 Systems GmbH - Linux/Open Source Consulting, Training, Support & Development

Upload: b1-systems-gmbh

Post on 02-Jul-2015

6.276 views

Category:

Technology


1 download

DESCRIPTION

Continuous Integration using Docker & Jenkins

TRANSCRIPT

Page 1: Continuous Integration using Docker & Jenkins

Continuous Integration using Docker &JenkinsLinuxCon Europe 2014 October 13-15, 2014

Mattias GieseSolutions ArchitectB1 Systems GmbH

[email protected]

B1 Systems GmbH - Linux/Open Source Consulting, Training, Support & Development

Page 2: Continuous Integration using Docker & Jenkins

Introducing B1 Systems

founded in 2004operating both nationally and internationallymore than 60 employees; low employee turnoverProvider for IBM, SUSE, Oracle & HPvendor-independent (hardware and software)Focus:

ConsultingSupportDevelopmentTrainingOperationsSolutions

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 2 / 43

Page 3: Continuous Integration using Docker & Jenkins

Areas of Expertise

Virtualization (XEN, KVM & RHEV)Systems management (Spacewalk, Red Hat Satellite, SUSEManager)Configuration management (Puppet & Chef)Monitoring (Nagios & Icinga)IaaS Cloud (OpenStack & SUSE Cloud)High availability (Pacemaker)Shared Storage (GPFS, OCFS2, DRBD & CEPH)File Sharing (ownCloud)Packaging (Open Build Service)Providing on-site systems administration and/or development

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 3 / 43

Page 4: Continuous Integration using Docker & Jenkins

Partners

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 4 / 43

Page 5: Continuous Integration using Docker & Jenkins

Deployment Stack

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 5 / 43

Page 6: Continuous Integration using Docker & Jenkins

Deployment Stack – Technologies Used

Docker an open platform for developers and sysadmins to build,ship, and run distributed applications

Fig a Docker orchestration toolGitlab an Open Source software to collaborate on code

Jenkins an Open Source continuous integration systemPuppet/r10k an Open Source configuration management system to

define the state of an IT infrastructure and toautomatically enforce this state

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 6 / 43

Page 7: Continuous Integration using Docker & Jenkins

Docker – Build, Ship andRun Applications

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 7 / 43

Page 8: Continuous Integration using Docker & Jenkins

What is Docker?

an open platform for developers and sysadminsOpen Source Engine to standardize LXCbuild, ship and run (distributed) applicationseasy to usecreate and share imageschroot on steroidsall you need is inside the containernot a Virtual Server – less overhead

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 8 / 43

Page 9: Continuous Integration using Docker & Jenkins

Technologies Used

Linux Containers (LXC)chrootuse of Linux Kernel features:

cgroupskernel namespaces. . .

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 9 / 43

Page 10: Continuous Integration using Docker & Jenkins

Features

can run any distribution“if it will run on Linux it will run in Docker”limited to the same architecture as the hostall you need is inside the container

librariesdependencies. . .

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 10 / 43

Page 11: Continuous Integration using Docker & Jenkins

Fig – A Docker Orchestration Tool

simple orchestration tool for Dockereasy to deploy and usehelps to define and control a multi-container service

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 11 / 43

Page 12: Continuous Integration using Docker & Jenkins

GitLab – Collaboration on Code

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 12 / 43

Page 13: Continuous Integration using Docker & Jenkins

Features

completely free and Open Sourcemanage and browse Git repositorieskeep your code secure on own servermanage access permissionsperform code review and merge requestshooksmuch more!

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 13 / 43

Page 14: Continuous Integration using Docker & Jenkins

Gitlab 1/3

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 14 / 43

Page 15: Continuous Integration using Docker & Jenkins

Gitlab 2/3

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 15 / 43

Page 16: Continuous Integration using Docker & Jenkins

Gitlab 3/3

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 16 / 43

Page 17: Continuous Integration using Docker & Jenkins

Jenkins – Continuous Integration

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 17 / 43

Page 18: Continuous Integration using Docker & Jenkins

What is Jenkins?

Jenkins is a server-based system for continuous integrationrunning in a servlet container (like Apache Tomcat).Jenkins supports SCM tools including AccuRev, CVS,Subversion, Git, Mercurial, Perforce, Clearcase and RTC, andcan execute Apache Ant and Apache Maven.Jenkins is free software, released under the MIT License.Builds can be started by various means, including beingtriggered by commit in a version control system.Jenkins monitors executions of repeated jobs, such as building asoftware project or jobs run by cron.Jenkins is written in Java and released under the MIT License.

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 18 / 43

Page 19: Continuous Integration using Docker & Jenkins

Jenkins 1/3

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 19 / 43

Page 20: Continuous Integration using Docker & Jenkins

Jenkins 2/3

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 20 / 43

Page 21: Continuous Integration using Docker & Jenkins

Jenkins 3/3

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 21 / 43

Page 22: Continuous Integration using Docker & Jenkins

Jenkins PluginsDocker Buildstep allows to add various docker commands into a job

as a build step.Docker publish provides the ability to build projects with a Dockerfile

and publish them to the docker registry.Git allows the use of Git as a build SCM.

Gitlab a build trigger that makes GitLab think Jenkins is aGitLab CI.

Build Pipeline Plugin provides a Build Pipeline View of upstream anddownstream connected jobs that typically form a buildpipeline.

Downstream-Ext Plugin supports extended configuration fortriggering downstream builds.

Publish Over SSH Plugin transfers files and data secured by SSH.Chuck Norris ;) . . .

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 22 / 43

Page 23: Continuous Integration using Docker & Jenkins

Jenkins – Build Pipeline Plugin

provides a Build Pipeline View of upstream and downstreamconnected jobs that typically form a build pipeline.offers the ability to define manual triggers for jobs that requireintervention prior to execution, e.g. an approval process outsideof Jenkins.

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 23 / 43

Page 24: Continuous Integration using Docker & Jenkins

Jenkins – Downstream-Ext Plugin

This plugin supports extended configuration for triggeringdownstream builds:

triggers build only if downstream job has SCM changestriggers build if upstream build result is better/equal/worse thanany given result (SUCCESS, UNSTABLE, FAILURE,ABORTED)for Matrix (alias multi-configuration) jobs, you can decide whichpart of the job should trigger the downstream job: parent only,configurations only, or both

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 24 / 43

Page 25: Continuous Integration using Docker & Jenkins

Jenkins – Publish Over SSH PluginSCP – send files over SSH (SFTP)execute commands on a remote serverusername and password or public key authenticationpasswords & -phrases encryption in configuration files and UISSH SFTP/SSH Exec as a build step during the build processSSH before a (maven) project build, or to run after a buildwhether the build was successful or notsend files directly from the artifacts directory of the build that isbeing promoted ("promotion aware")optionally override the authentication credentials for each serverin the job configurationoptionally retry if the transfer of files failsenable the command/script to be executed in a pseudo TTY

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 25 / 43

Page 26: Continuous Integration using Docker & Jenkins

Puppet – Configuration Management

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 26 / 43

Page 27: Continuous Integration using Docker & Jenkins

What is Puppet?a configuration management system to define a certain state ofan IT infrastructuredeveloped since 2005 by Puppet Labsdescribes resources and their state in manifestsuses its own declarative languagedistributes these manifests through a server program calledmasterAgents on the target systems enforce the desired state.System specific information will be discovered using facter fora dynamic configuration.Agents also send a report on the taken actions back to thePuppet master.Puppet’s open API can send and receive data to/fromthird-party tools.

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 27 / 43

Page 28: Continuous Integration using Docker & Jenkins

Puppet – r10k

deployment helper for Puppet modules (internal/Puppet Forge)uses a cache directory to preserve spacemay use a so called Puppetfile for complex deployment needs(⇒ Gemfile)

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 28 / 43

Page 29: Continuous Integration using Docker & Jenkins

Use Case 1: Automatic Testing of a PuppetModule

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 29 / 43

Page 30: Continuous Integration using Docker & Jenkins

Use Case 1 – Automatic Testing of a puppetmodule

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 30 / 43

Page 31: Continuous Integration using Docker & Jenkins

Use Case 1 – Prerequesites

Requirements:base Docker container for every supported OS of a moduleare being built as seperate jobs

Preparation:1 git push to development branch2 Gitlab triggers Jenkins Webhook3 Jenkins merges dev with test branch

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 31 / 43

Page 32: Continuous Integration using Docker & Jenkins

Use Case 1 – puppet-memcached-units

1 Jenkins creates a new container.2 r10k deploys all puppet code.3 simple syntax and style(lint) checks4 rspec-puppet is run.

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 32 / 43

Page 33: Continuous Integration using Docker & Jenkins

puppet-memcached-units

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 33 / 43

Page 34: Continuous Integration using Docker & Jenkins

Use Case 1 – Job:puppet-memcached-acceptance

1 Jenkins starts a fresh container from a puppet-enabled baseimage

2 r10k deploys all needed Puppet code3 puppet apply is run with the specified module:

PUPPETENV=/puppet/environments/dev/puppet apply –debug –modulepath $PUPPETENV/modules$PUPPETENV/modules/$PUPPETMODULE/test/init.pp

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 34 / 43

Page 35: Continuous Integration using Docker & Jenkins

puppet-memcached-acceptance

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 35 / 43

Page 36: Continuous Integration using Docker & Jenkins

Use Case 2: Integration/Acceptance Testingof a Simple Webapp

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 36 / 43

Page 37: Continuous Integration using Docker & Jenkins

Use Case 2: Integration/Acceptance Testingof a Simple Webapp

simple use case for a multi-tier apphttpd + webapp and mysqlneed to be linked togethershould be automatically deployed if possibletwo containers: owncloud and mysqlautomatic rebuild on changeafter changes, integration testing should be doneif integration tests succeed, deploy app on staging host

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 37 / 43

Page 38: Continuous Integration using Docker & Jenkins

Jenkins Job Overview

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 38 / 43

Page 39: Continuous Integration using Docker & Jenkins

Docker Build Pipeline 1

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 39 / 43

Page 40: Continuous Integration using Docker & Jenkins

Docker Build Pipeline 2

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 40 / 43

Page 41: Continuous Integration using Docker & Jenkins

Next Steps

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 41 / 43

Page 42: Continuous Integration using Docker & Jenkins

Next StepsMost Docker image jobs are identical:

implement flow/job dsl plugincreate a dynamic test matrix for Puppet modules

multi-configuration jobs may help with thatuse Packer for building base Docker images (Puppet Provisioner)

integrate with CoreOS/Project Atomic/OpenStackimplement a better global orchestration scheme (TerraForm,Ansible, SaltStack maybe?)integrate with clustered configuration through Serf/Consul orothersautomatic handoff to QA, tests with real world data in stagingenvironmentseasy push button tagging of Docker images to ’production’

may be implemented through ’promoted builds’

B1 Systems GmbHContinuous Integration using Docker &

Jenkins 42 / 43

Page 43: Continuous Integration using Docker & Jenkins

Thank you for your attention!For further information, please contact:

[email protected] or +49 (0)8457 - 931096

B1 Systems GmbH - Linux/Open Source Consulting, Training, Support & Development