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.

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&[email protected]   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/