SnowCampIO2017:BâtissonsensembleunpipelineavecJenkinsetDocker
Whoami:DamienDUPORTAL
TrainingEngineer@CloudBeesdepuis1an6ansàAtosWorldline:Production,Dev,Training,etc.IntervenantponctuelàEPSI,ENSG,CNAMDockermentor,depuisv0.3Grimpeur
Contact:Mail/Hangouts:[email protected]:[email protected]:dduportalTwitter:@DamienDuportal
Whoareyou?
Agenda:1. Jenkins2,quoideneuf?2. Démo:Unpetittourdupropriétaire3. Débutonsaveclespipelines4. VousavezditDocker?5. JenkinsetDockerensemble6. Futur:BlueOceanetDeclarativePipelines
CodeetLabdisponiblesici:https://github.com/dduportal/snowcampio-2017
DISCLAIMER
Jenkins2,quoideneuf?
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"
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
ObjectifsMessage:CI->CD
CD=ContinuousDelivery
Transitiondouce:PasderuptureavecJenkins1
Monte ́edeversionsimpleTouslespluginsrestentcompatible(~)
Expériencepremièreutilisation
Pipeline-as-Codeenpremièreligne
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Assistant
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Assistant
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Assistant
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Assistant
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Assistant
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
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Pipeline
*.jenkins.io
*.jenkins.io
https://jenkins.io
ModerneCollaboratifDocumentationettutoriels
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Pipeline
*.jenkins.io
*.jenkins.ioAvez-vousdéjàessayédechercherunplugin?...unedocumentationdeplugin?
Toutnouveau,toutbeau:
https://plugins.jenkins.io
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Pipeline
*.jenkins.io
Futur:BackendStorage
Futur:BackendStorage
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)
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Pipeline
*.jenkins.io
Futur:BackendStorage
Futur:BlueOcean
Futur:BlueOcean
VisualisersonPipelineEtapes,logs,métriques,statut
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Pipeline
*.jenkins.io
Futur:BackendStorage
Futur:BlueOcean
Futur:BlueOcean
IdentifierimmédiatementlesproblèmesRetourd'informationrapide
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Pipeline
*.jenkins.io
Futur:BackendStorage
Futur:BlueOcean
Futur:BlueOcean
Personnalisationdesoninterface
Jenkins2,quoideneuf?PourquoiJenkins2?
Objectifs
Assistant
Pipeline
*.jenkins.io
Futur:BackendStorage
Futur:BlueOcean
Futur:BlueOcean
Gestionnativedesbranches,pull-requestsCompatibleGithubetBitbucketAPIs(feedbacks)
Démo:Unpetittourdupropriétaire
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.
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
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
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
Débutonsaveclespipelines
DébutonsaveclespipelinesAvantages
AvantagesparrapportauFreestyle
"Configurationascode"HistorisationGestiondesconflits
Gestionduparallélismesimple
SyntaxeDynamique(plugins)
Documentationettutoriels:https://jenkins.io/doc/book/pipeline/
DébutonsaveclespipelinesAvantages
Pipeline"simple"
Pipeline"simple"ActionTime-clickme
DébutonsaveclespipelinesAvantages
Pipeline"simple"
Pipelineetplugins
PipelineetpluginsActionTime-clickme
DébutonsaveclespipelinesAvantages
Pipeline"simple"
Pipelineetplugins
MultibranchPipeline
MultibranchPipelineActionTime-clickme
Docker101VousavezditDocker?
Docker:101PourquoiDocker?
PourquoiDocker?Quelestleproblèmequenousessayonsderésoudre?
Docker:101PourquoiDocker?
"MatrixfromHell"Problèmedetempsexponentiel
Docker:101PourquoiDocker?
Déjàvu?L'ITn'estpaslaseuleindustrieàrésoudredesproblèmes...
Docker:101PourquoiDocker?
Solution:Lecontainerintermodal
"SeparationofConcerns"
Docker:101PourquoiDocker?
Commentçamarche?
Commentçamarche?"VirtualisationLégère"
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
Docker:101PourquoiDocker?
Commentçamarche?
Dockerworkflow
DockerworkflowWorkflowDockerbasique:
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
Docker:101PourquoiDocker?
Commentçamarche?
Dockerworkflow
DockerInc.
Résumé
RésuméObjectifdeDocker:
Docker:101PourquoiDocker?
Commentçamarche?
Dockerworkflow
DockerInc.
Résumé
ContainerareNOTVMs"Separationofconcerns":1"tâche"parcontaineur
Docker:101PourquoiDocker?
Commentçamarche?
Dockerworkflow
DockerInc.
Résumé
VMetcontaineursnonexclusifsmutuellement
JenkinsetDockerensemble
JenkinsetDockerensemble
Casd'usagesDockercommeoutildebuildDockercommeenvironnementdebuildDockerpourlesagentsDockerpourlemaster
Futur:BlueOceanetDeclarativePipelinesIlestfraismonPipeline!
https://jenkins.io/projects/blueocean/https://jenkins.io/doc/pipeline/tour/hello-world/
Merci!Questions?