continuous delivery mit jenkins workflow - · pdf filejenkins workflow martin reinhardt...

28
Continuous Delivery mit Jenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt

Upload: ngoque

Post on 09-Mar-2018

245 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

ContinuousDeliverymitJenkinsWorkflow

MartinReinhardt(HolisticonAG)@mreinhardt

Page 2: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

Agenda■ Einführung/BuildPipeline■ JenkinsPipeline■ JenkinsPipelineLibraries■ Testautomatisierung■ Provisioning■ Links

Page 3: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

Einführung■ ContinuousDeliveryistdielogischeFortsetzungvonContinuousIntegration

■ DieIdeedahinter□ SoftwaremitagilenMethodenkannnichtkomplett(manuell)getestetwerden

□ Alle2WochengesamtenFunktionsumfangabtestenistutopisch□ TestumgebungenstehenmeistnichtausreichendzurVerfügung

Page 4: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

BuildPipeline■ Jobs=BausteinederStages("UnitofWork")□ BestehenausTaskswieBuild,Deploy,Copy,Test

■ AgileSoftwareentwicklungarbeitetkleinteilig□ SoftwareoftundzuverlässiginProduktion□ NutzungderIDE!=Automatisierung□ WesentlichistdabeidieBuildPipeline

■ Wie?□ Geschwindigkeit□ Automatisierung□ Reproduzierbarkeit

Page 5: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

WarumBuildPipelines"Oneofthechallengesofanautomatedbuildandtestenvironmentisyouwantyourbuildtobefast,sothatyoucangetfastfeedback,butcomprehensiveteststakealongtimetorun.Adeploymentpipelineisawaytodealwiththisbybreakingupyourbuildintostages.Eachstageprovidesincreasingconfidence,usuallyatthecostofextratime.Earlystagescanfindmostproblemsyieldingfasterfeedback,whilelaterstagesprovideslowerandmorethroughprobing.DeploymentpipelinesareacentralpartofContinuousDelivery"

MartinFowler

Page 6: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

JenkinsBuildPipelinePlugin■ FeaturevonJenkins2,Groovy-basiert■ KlassichePipelineinJenkinsbenötigtvielePlugins

■ NeueVariantebietetdetailiiertenÜberblickineinemJob

Beispiel

Page 7: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

BeispielPipeline

node{stage('Checkout'){checkoutscm}...

stage('Unit-Tests'){sh"mvntest"}

archiveArtifacts'**/target/*.jar'junit'*/target/surefire-reports/TEST*.xml'

Beispiel

Page 8: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

WarumJenkinsPipeline■ Transparenz■ Struktur■ Wartbarkeit■ Produktreife■ Übersicht■ NichtnuraufJava-Weltbeschränkt■ InfrastructureasCode(IaC)auchfürBuild

Page 9: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

PipelineÖkosystemwächst■ immermehrPluginsunterstützenPipelinedirekt■ Dokumentationwirdimmerbesser■ mittlerweilesehrvieleAnwendungsgebieteabgedeckt

Page 10: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

MultiBranches■ MultibranchPipelineJobsbauenautomatisch■ Mitgitflowsehrhilfreich■ Build-AnpassungenkönnenalsBranchgetestetwerden

Page 11: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

BlueOcean■ GestartetalsneuesUIfürJenkins■ FastFeedbackmitmodernenUI■ mittlerweilegutePluginunterstützung

Page 12: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

■ GutgeeignetfürschnellenÜberblickdurchFarben

Page 14: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

PipelineLibraries■ -PrinzipauchbeimBuild■ BuildenthältschnelleinigeHilfsmethoden■ NutzunginanderenProjektenstatt'Copy-and-Pase'

■ NichtnuraufHilfsmethodenbeschränkt□ volleGroovy-Unterstützung□ kompletteBuildsinkl.Steps/Stages

Don'trepeatyourself

möglich

Page 15: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

Beispiel@Library('holisticon-build-library')defutils=newde.holisticon.ci.jenkins.Utils()

node{utils.waitForAppToBeReady('localhost:8080')}

Beispiel

Page 16: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

Testautomatisierung■ AnchlussderUnit-TestserzeugtenArtefakteweitertesten□ AblageinRepository□ DeploymentinTest-Umgebung

■ Testumgebungenproblemebehaftet□ DedizierteSlaves(Labels)□ DockerImages

■ Dockerbesondershilfreich(lokalesTesten,Ressourcennutzung)

■ FeedbackisteinMuss□ TestToolsmüssenaussaugekräftigeReportsliefern□ reproduzierbar&nachvollziehbar□ geradebeiOberflächen-Tests

Page 17: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

OberflächenTestingmitStil-Serenity

■ ToolfürATDD(acceptancetestdrivendevelopment)

■ MachtIntegrations-Testslesbarer,wartbarerundwiederwendbar

■ SeleniumalstechnischeBasis■ NutztPageObjectPattern■ StelltReportingfürTracking&FehlersuchezurVerfügung

■ VerbindungmitTicket-System■ AnforderungenaufTestsmappen

Page 18: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

Konzepte-Page-ObjectPattern

■ TestautomatisierungspatternfüreffizienteundlesbareTests

■ JedeUISeitewirdaufeinePage-Klassegemappt■ InteraktionwirdüberSteps-Klassenumgesetzt■ TestsnutzenStepsumAnwendungsverhaltenzusimulieren

Page 20: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

ProvisioningmitAnsible■ OSSToolfürKonfigurationsmanagement(vgl.Puppet,ChefoderCFengine)□ kannad-hocausgeführtwerden(vgl.Funcoderdsh)□ DeploymentFunktionen(vgl.FabricoderCapistrano)

■ 2012gestartete,2015vonRedHatübernommen■ inPythongeschrieben■ kommtohneAgentsundServeraus

Page 21: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

Beispiel■ YAML-basierteSyntaxfürdiesog.Playbooks

-hosts:webserversvars:http_port:80max_clients:200remote_user:roottasks:-name:ensureapacheisatthelatestversionapt:pkg=apache2-mpm-workerstate=latest-name:ensureapacheisrunningservice:name=apache2state=started

Page 22: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

Deploymentsshagent(['e96eb307-86ff-4858-82bb-cdc20bf1e4b4']){stage('Deploy'){dir("ansible"){//Install/updatedependenciessh"ansible-galaxyinstall-rrequirements.yml-f"//Executeplaybooksh"ansible-playbookcddemo.yml--extra-vars'app_version=${appVersion}path_to_artifact=../angular-spring-boot-webapp/target/ng-spring-boot.jar--ansible_ssh_port=\${ANSIBLE_PORT}'"}}}

Beispiel

Page 23: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

WiesoAnsible■ schlankundeinfachzuerlernen■ flexibelundohneInfrastruktureinsetzbar■ MitAnsibleGalaxyreichhaltigeBibliothek■ guterSupportinRedHatDistributionen

Page 24: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

Fazit&Ausblick■ FeedbackisteinMuss□ TeststufenkontinuierlichFeedbacküberaktuellenQualitätsstand□ Toolsmüssendasunterstützen

■ PipelinePluginenormeHilfe,geradebeigitflow■ ImBereichvonCDvieleToolsimBereichTesting&Automatisierung

■ Gefahrvon"Over-Engineering"derSchritteinPipeline

■ BewegungimTool-Bereich(ThoughtworksGo,Docker...)

■ ContinuousIntegrationzwingendfürContinuousDelivery

Page 26: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

Thereisnoone-size-fits-allsolutiontothecomplexproblemofimplementingadeploymentpipeline.”ContinuousDelivery,J.Humble,D.Farley

Page 27: Continuous Delivery mit Jenkins Workflow - · PDF fileJenkins Workflow Martin Reinhardt (Holisticon AG) @mreinhardt. Agenda Einführung / Build Pipeline Jenkins Pipeline Jenkins Pipeline

Aboutme■ MartinReinhardt(HolisticonAG)

■■

github.com/hypery2ktwitter.com/mreinhardt