snowcamp io grenoble 2017 - bâtissons ensemble un pipeline avec jenkins et docker

48
SnowCamp IO 2017: Bâtissons ensemble un pipeline avec Jenkins et Docker

Upload: damien-duportal

Post on 06-Apr-2017

191 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

SnowCampIO2017:BâtissonsensembleunpipelineavecJenkinsetDocker

Page 2: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Whoami:DamienDUPORTAL

TrainingEngineer@CloudBeesdepuis1an6ansàAtosWorldline:Production,Dev,Training,etc.IntervenantponctuelàEPSI,ENSG,CNAMDockermentor,depuisv0.3Grimpeur

Contact:Mail/Hangouts:[email protected]:[email protected]:dduportalTwitter:@DamienDuportal

Page 3: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Whoareyou?

Page 4: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Agenda:1. Jenkins2,quoideneuf?2. Démo:Unpetittourdupropriétaire3. Débutonsaveclespipelines4. VousavezditDocker?5. JenkinsetDockerensemble6. Futur:BlueOceanetDeclarativePipelines

CodeetLabdisponiblesici:https://github.com/dduportal/snowcampio-2017

Page 5: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

DISCLAIMER

Page 6: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?

Page 7: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

PourquoiJenkins2?Jenkins1a(vait)+10ans

1.658:acegi-security:1.0.7—Avril2008spring-core:2.5.6—Octobre2008

Parcequel’inte ́grationcontinueae ́volue ́

jenkins-ci.org!?

slave➞agent

"Fireandforget"

Page 8: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

ObjectifsMessage:CI->CD

CD=ContinuousDelivery

Transitiondouce:PasderuptureavecJenkins1

Monte ́edeversionsimpleTouslespluginsrestentcompatible(~)

Expériencepremièreutilisation

Pipeline-as-Codeenpremièreligne

Page 9: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Assistant

Page 10: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Assistant

Page 11: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Assistant

Page 12: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Assistant

Page 13: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Assistant

Page 14: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Pipeline-as-Code

Pipeline-as-CodeLedépôtcodecommeseulsourcedevérité

FichierJenkinsfileaveclecodesourceC'estledévelopeurquispécifiecommentconstruiresonapplication

UnmondedeDevOps:Jenkinsnedevientpas"openbar"

Pensezàvosadmins!

Typedejobsdédiés:

PipelineMultibranchOrganisations(Github/BitBucket)

"Citoyende1èreclasse":lefuturdeJenkinsestcentrésurlesPipelines

Page 15: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Pipeline

*.jenkins.io

*.jenkins.io

https://jenkins.io

ModerneCollaboratifDocumentationettutoriels

Page 16: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Pipeline

*.jenkins.io

*.jenkins.ioAvez-vousdéjàessayédechercherunplugin?...unedocumentationdeplugin?

Toutnouveau,toutbeau:

https://plugins.jenkins.io

Page 17: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Pipeline

*.jenkins.io

Futur:BackendStorage

Futur:BackendStorage

Page 18: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Pipeline

*.jenkins.io

Futur:BackendStorage

Futur:BlueOcean

Futur:BlueOcean

https://jenkins.io/projects/blueocean/

Repenserl'expérienceutilisateurdeJenkinsNouvelleIHMécriteenReactJSConçupourlesPipelines(compatibleFreestyle)

Page 19: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Pipeline

*.jenkins.io

Futur:BackendStorage

Futur:BlueOcean

Futur:BlueOcean

VisualisersonPipelineEtapes,logs,métriques,statut

Page 20: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Pipeline

*.jenkins.io

Futur:BackendStorage

Futur:BlueOcean

Futur:BlueOcean

IdentifierimmédiatementlesproblèmesRetourd'informationrapide

Page 21: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Pipeline

*.jenkins.io

Futur:BackendStorage

Futur:BlueOcean

Futur:BlueOcean

Personnalisationdesoninterface

Page 22: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Jenkins2,quoideneuf?PourquoiJenkins2?

Objectifs

Assistant

Pipeline

*.jenkins.io

Futur:BackendStorage

Futur:BlueOcean

Futur:BlueOcean

Gestionnativedesbranches,pull-requestsCompatibleGithubetBitbucketAPIs(feedbacks)

Page 23: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Démo:Unpetittourdupropriétaire

Page 24: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Tourdupropriétaire

GameOfLife

GameOfLifeCodeoriginal:https://github.com/wakaleo/game-of-life

Implémentationwebdu"JeudelaViedeJ.H.Conway"

Jeu"zérojoueur"

Ondéfinil'étatinitialdelagrilledecellulePuisonlanceetonobserve

Règles:

Unecellulemortepossédantexactementtroisvoisinesvivantesdevientvivante.Unecellulevivantepossédantdeuxoutroisvoisinesvivanteslereste,sinonellemeurt.

Page 25: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Tourdupropriétaire

GameOfLife

Maven&Java

Maven&JavaApplicationécriteenJava

CompatibleJDK7et8

Cycledeviedel'applicationgéréparMaven

Descriptionduprojetavecunfichierpom.xmlGestiondesdépendancesStockagedansledépôt${HOME}/.m2/repositoryLignedecommandepourexécuterdes"goals"Orientéconvention:dossiertarget

AvecunJDK8etMaven3.3.9dansvotrePATH:

Nettoyerleprojet:mvncleanCompilerleprojet:mvncompileTestsunitaires:mvntestTestsd'intégration:mvnverifyEmpaqueterl'application:mvnpackageInstallerlespaquetsdansledépôtlocal:mvninstall

ActionTime-clickme

Page 26: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Tourdupropriétaire

GameOfLife

Maven&Java

RunIt

RunItSous-projetgameoflife-web

Artefactgénéré:unfichier.war

Nécessiteunserveurd'application(Tomcat,JBoss,Jetty)

LancementavecMaven:

mvn-plgameoflife-webjetty:run

Accessiblesurhttp://localhost:9090

ActionTime-clickme

Page 27: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Tourdupropriétaire

GameOfLife

Maven&Java

RunIt

JenkinsIt

JenkinsItJenkinspréconfiguré:https://github.com/dduportal/snowcampio-2017

Jenkinsagent:

Riennedoistournersurlemaster(sécurité)Scalerfacilementlafonction"build"Buildersurdesciblesspécifiques

Jenkinsexécuteur:

Emplacement"virtuel"atomiquepourunetâcheEstfourniparlesagentsetlemasterRèglededépart:~1exécuteurparCPU

ActionTime-clickme

Page 28: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Débutonsaveclespipelines

Page 29: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

DébutonsaveclespipelinesAvantages

AvantagesparrapportauFreestyle

"Configurationascode"HistorisationGestiondesconflits

Gestionduparallélismesimple

SyntaxeDynamique(plugins)

Documentationettutoriels:https://jenkins.io/doc/book/pipeline/

Page 30: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

DébutonsaveclespipelinesAvantages

Pipeline"simple"

Pipeline"simple"ActionTime-clickme

Page 31: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

DébutonsaveclespipelinesAvantages

Pipeline"simple"

Pipelineetplugins

PipelineetpluginsActionTime-clickme

Page 32: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

DébutonsaveclespipelinesAvantages

Pipeline"simple"

Pipelineetplugins

MultibranchPipeline

MultibranchPipelineActionTime-clickme

Page 33: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker101VousavezditDocker?

Page 34: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

PourquoiDocker?Quelestleproblèmequenousessayonsderésoudre?

Page 35: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

"MatrixfromHell"Problèmedetempsexponentiel

Page 36: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

Déjàvu?L'ITn'estpaslaseuleindustrieàrésoudredesproblèmes...

Page 37: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

Solution:Lecontainerintermodal

"SeparationofConcerns"

Page 38: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

Commentçamarche?

Commentçamarche?"VirtualisationLégère"

Page 39: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

Commentçamarche?

Commentçamarche?LinuxKernelrequis(oupresque...Windows...)Linuxcontainers:"super"chroot

"Namespacing":isolation(users,réseau,PIDs...)"ControlGroups":gestionetcontrôle(CPU,mem...)

Systèmedefichierdetype"UnionFileSystem"ProcessPID1etsesenfantsdanslecontainer

Page 40: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

Commentçamarche?

Dockerworkflow

DockerworkflowWorkflowDockerbasique:

Page 41: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

Commentçamarche?

Dockerworkflow

DockerInc.

DockerInc.FondéàParisen2008parSolomonHykesMigreàSanFransiscoen20092013:Open-sourceleprojetDocker2014:dotClouddevientDocker2016:1milliarddelevéedefond

DockerProjectOriginellementécritenPythonauseindedotCloudRé-écritenGolangetouverten2013aprèsune"PyCon"OpenSource-ApachelicenceDisponiblesurGithub:https://github.com/docker/docker~22Kcommits,+1400contributeurs

Page 42: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

Commentçamarche?

Dockerworkflow

DockerInc.

Résumé

RésuméObjectifdeDocker:

Page 43: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

Commentçamarche?

Dockerworkflow

DockerInc.

Résumé

ContainerareNOTVMs"Separationofconcerns":1"tâche"parcontaineur

Page 44: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Docker:101PourquoiDocker?

Commentçamarche?

Dockerworkflow

DockerInc.

Résumé

VMetcontaineursnonexclusifsmutuellement

Page 45: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

JenkinsetDockerensemble

Page 46: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

JenkinsetDockerensemble

Casd'usagesDockercommeoutildebuildDockercommeenvironnementdebuildDockerpourlesagentsDockerpourlemaster

Page 47: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Futur:BlueOceanetDeclarativePipelinesIlestfraismonPipeline!

https://jenkins.io/projects/blueocean/https://jenkins.io/doc/pipeline/tour/hello-world/

Page 48: SnowCamp IO Grenoble 2017 - Bâtissons ensemble un pipeline avec Jenkins et Docker

Merci!Questions?