Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Delphi Tage 2014: Continuous Integration

Delphi Tage 2014: Continuous Integration

My slides for the Delphi Tage 2014 talk about Continuous Integration.

Avatar for Sebastian Gingter

Sebastian Gingter

September 06, 2014
Tweet

More Decks by Sebastian Gingter

Other Decks in Technology

Transcript

  1. ! Sourcen  &  Demos  @github   hAps://github.com/gingters/...     !

    Slides  @speakerdeck   hAps://speakerdeck.com/phoenixhawk     !   Kontakt:   E-­‐Mail:  sebas&an@gingter.org   TwiAer:  @phoenixhawk  
  2. !   Historie   !   Was  ist  und  kann

     CI?   !   Was  kann  CI  Tooling  (noch)?   !   Warum  will  ich  CI?   !   Ablauf   !   Vorteile   !   Der  (lange?)  Weg  hin  zu  CI   !   Tools  und  Beispiele  
  3. ! Con&nuous  Integra&on   !   Ursprünglich  eine  der  12

     Prak&ken  aus   „Extreme  Programming“  
  4. ! Con&nuous  Integra&on   !   Prozess  &  Praxis  

    !   Tools   !   Änderungen  schnell  integrieren   !   Idealerweise  automa&siert  
  5. !   Tests  ausführen   !   Unit-­‐Tests   !

      Integra&on  Tests   !   UI  Tests   !   Setups  erstellen   !   Doku  erstellen   ! Releasenotes  erzeugen   ! Deployments  ausführen   !   etc.  pp.  
  6. ! Schonmal  vergessen,  eine  neue  Datei   einzuchecken?   !

      Wie  lange  hat  es  gedauert,  bis  es  Kollegen  auffällt?   !   War  der  Kollege  zum  nachliefern  schonmal  weg?   !   Jemals  Seiteneffekte  produziert?   !   Wie  lange  hat  es  gedauert,  bis  sie  auaraten?   !   Gab  es  schon  einmal  Regressions  (gefixte  Bugs  die   wieder  auaraten)?  
  7. !   Automa&sierung   !   Nervige  manuelle  SchriAe  eliminieren

      !   Fehleranfällige  manuelle  SchriAe  eliminieren   !   Beschleunigung   !   Release  Prozess  kann  Zeitaufwändig  sein   !   Bei  Smarthouse  früher  4h  pro  Produkt   !   Heute:  ca.  45  Minuten  pro  Produkt  
  8. ! Checkout  des  letzten  integrierten  Standes   !   „Erst

     Bauen,  dann  schauen“   !   Arbeit,  Arbeit  J  (Build)   !   Schauen:  Tests   !   Schauen  lassen:  Automa&sierte  Tests   !   Vor  dem  commit  (bzw.  push)   !   Update  des  letzten  integrierten  Standes   !   gleiche  SchriAe  wie  oben  
  9. !   Lokal:   !   Tests,  Update,  Tests  

    !   Wenn  okay:  Checkin   ! Autom.  Build  auf  dem  Buildserver   ! Autom.  Tests  auf  dem  Buildserver   !   Grün?  Okay   !   Rot?  Lokal  Fixen  -­‐>  von  vorne  
  10. !   Fehler  fallen  sehr  schnell  auf   !  

    „Das  tut  bei  mir  aber.“  ist  keine  Ausrede  mehr   !   Jederzeit  Release-­‐fähiger  Zustand  im  Repo   !   Durch  remote-­‐Builds  &  Tests  können   unterschiedliche  Umgebungen  einfach  ergänzt   werden  
  11. !   „Verwaltete“  Quellcodeverwaltung   -­‐  Alles  Notwendige  im  Repo

      !   Automa&scher  Buildprozess   -­‐  siehe  EKON  16  Slides  zu  MSBuild   !   SelbsAestender  Code   -­‐  xUnit  
  12. !   Mar&n  Fowler:   „Jeder  commited  täglich  in  den

     Trunk“   !   Ich:   „Wehe!  Besser:  Jeder  merged  täglich  die   aktualisierte  Source  in  seinen  branch.“   !   JEDER  Commit  ins  zentrale  Repository  sollte   (automa&sch)  geprüa  werden   !   Moderne  CI-­‐Systeme  können  auch  Branches   automa&siert  getestet  werden  
  13. !   Man  muss  CI  leben   ! Tooling  kann

     helfen,  aber:   !   Der  Prozess  muss  vorher  schon  funk&onieren   !   Der  Build-­‐Prozess  muss  schnell  sein   !   max.  10  Minuten  sollte  das  Ziel  sein   !   Meistens  sind  Tests  der  Flaschenhals   ! Staged  Builds  /  Build  Pipeline  kann  helfen  
  14. !   Tests:  In  Kopie  der  Live-­‐Umgebung   !  

    Soweit  möglich   ! Self-­‐Containing   !   Virtualisierung  kann  helfen   !   Ergebnisse  der  Builds  bereitstellen   !   Jeder  soll  möglichst  einfach  an  das  Ergebnis   kommen   !   z.B.  Installer  generieren,  Artefakte  bereitstellen  
  15. !   Übergang  zu  Con&nuous  Delivery  fliessend   ! Build-­‐Status

     publik  machen   !   Großer  Bildschirm  an  der  Wand  mit  Statusinfos   !   z.B.  Lava-­‐Lampen   (neben  Zustand  auch  Indika&on  der  Dauer)   !   Gerne  auch  Chat-­‐Bot,  E-­‐Mails  etc.   !   Mit  Tooling  kann  auch  ein  Überblick  über  die   Änderungen  gewährt  werden   ! Changesets  im  Commit  etc.  
  16. ! TeamCity  (von  JetBrains)   ! Bamboo  (von  Atlassian)  

    ! CruiseControl  /  CruiseControl.NET   !   Cruise   !   Jenkins  /  Hudson   !   Team  Founda&on  Server   ! Con&nua  CI  (Finalbuilder  Server  als  CI-­‐Lösung)   !   und  (wirklich)  viele  mehr…  
  17. !   Unit  Tes&ng   ! DUnit:   hAp://sourceforge.net/projects/dunit/  

    !   Code  Coverage   ! Discover  for  Delphi:   hAp://sourceforge.net/projects/discoverd/   !   Delphi  Code  Coverage  (DUnit):   hAps://code.google.com/p/delphi-­‐code-­‐coverage/  
  18. Anhand  von  TeamCity*       *  Disclaimer:  Keine  Verbindung

     mit  JetBrains  vorhanden,   außer  das  ich  normal  zahlender  Kunde  bin    
  19. ! hAp://www.mar&nfowler.com/ar&cles/con&nuousIntegra&on.html   ! hAps://speakerdeck.com/phoenixhawk/ekon-­‐16-­‐msbuild   ! hAp://www.jamesshore.com/Blog/Con&nuous-­‐Integra&on-­‐is-­‐an-­‐Awtude.html   !

    hAp://blog.lieberlieber.com/2010/05/25/how-­‐to-­‐set-­‐up-­‐a-­‐con&nous-­‐integra&on-­‐ server-­‐with-­‐delphi-­‐dunit-­‐and-­‐teamcity/   ! hAps://www.linkedin.com/pulse/ar&cle/20140629125251-­‐19117079-­‐dunit-­‐i-­‐know-­‐ you-­‐know-­‐me-­‐let-­‐s-­‐get-­‐to-­‐know-­‐each-­‐other-­‐beAer   ! hAps://code.google.com/p/delphi-­‐code-­‐coverage/