Hands on continouous delivery, I TAKE 2014

4,558 views

Published on

Tools needed to build a Continuous delivery pipeline. Most tools are generic and can be used regardless of language, some are specific for Java/JVM.

http://2014.itakeunconf.com/

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,558
On SlideShare
0
From Embeds
0
Number of Embeds
3,698
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Hands on continouous delivery, I TAKE 2014

  1. 1. Hands on continuous delivery Ioan Eugen Stan - I T.A.K.E. , Bucharest 2014
  2. 2. Disclaimer This is my way of making software that runs great in production. It’s work in progress and adapted to the environment.
  3. 3. Software ‘goods’ Operating System, Firmware Web ApplicationDeskptop/Mobile Application
  4. 4. Software consumprtion: versions ● Debian 7, Windows 8.1, Android 4.4.2 ● Firefox 24, Java 8 ● Wikipedia version ? - current ● Facebook version ? - current ● Google version ? - current
  5. 5. Continuous Delivery (CD) is a design practice used in software development to automate and improve the process of software delivery (Make releases boring) http://en.wikipedia.org/wiki/File:Worksman_delivery_trike.jpg Continuous delivery
  6. 6. Process http://blog.crisp.se/2013/02/05/yassalsundman/continuous-delivery-vs-continuous-deployment
  7. 7. Continuous delivery diagram - Jez Humble http://continuousdelivery.com/2010/02/continuous-delivery/
  8. 8. Tools ● distributed version control system ● a build tool (project management tool) ● software artifact repository ● continuous integration server ● many environments - test, staging, production, etc.
  9. 9. Version control Where all the code gets refactored
  10. 10. ● manage and track source code changes ● history tracking ● enable colaboration on code What do they do?
  11. 11. Popular implementations Developer Productivity Report 2013 (Zeroturnaround)
  12. 12. Take advantage of the VCS ● use a distributed VCS (git or similar) ● ‘master’ branch only for releases ● ‘develop’ contains the next release ● use feature branches
  13. 13. A successful Git branching model by Vincent Driessen
  14. 14. Git branching model by Lemi Orhan Ergin
  15. 15. Git branching model by Lemi Orhan Ergin
  16. 16. Git branching model by Lemi Orhan Ergin
  17. 17. My advice ● use profesional services like Github, BitBucket or the like as much as posible ● use the integrated code review tools they provide ● roll your own only with strong SysAdmin team
  18. 18. Build (automation) tools
  19. 19. Generic build process Simple build process http://physinfo-mac0.ulb.ac.be/divers_html/powerpc_programming_info/intro_to_ppc/ppc5_porting5.html
  20. 20. Some popular build automation tools Tool Mostly used for languages make C/C++ mostly distcc C/C++ mostly rake Ruby Apache Ant Java Apaceh Maven JVM langs, JavaScript,PHP Gradle JVM languages, generic sbt Scala, JVM Grunt JavaScript
  21. 21. DevProd Redux (Zeroturnaround)
  22. 22. Maven standard build process Build life cycle
  23. 23. ● fixed life-cycle - disadvantage ● very Java centric, but ● promotes dependency management ● is a standard for Artifact Repositories ● used for PHP: http://www.php-maven.org/ ● used for JS: http://www.webjars.org/ About Maven
  24. 24. The software/artifact repository
  25. 25. What are they good for ● store versions of artifacts (libraries, resources, binaries) ● eases consumption for tools/users ● could be a simple FTP location/ git repos
  26. 26. http://wiki.netbeans.org/MavenBestPractices
  27. 27. Software package repositories by language Language/purpose Repository C++ Boost Haskell Hackage Java Maven .NET NuGet Node.js NPM Python PyPl R CRAN Ruby Ruby Application Archive http://en.wikipedia.org/wiki/Software_repository
  28. 28. Continuous Integration
  29. 29. Simple CI definition A set of software engineering practices that speed up the delivery of software by decreasing integration times.
  30. 30. In practice ● build application on commit ● run unit tests on commit ● run integration test on commit ● execute other post-build jobs
  31. 31. Developer Productivity Report 2013 (Zeroturnaround)
  32. 32. My attempt to achieve CD ● keep everything in version control ● standard deployment infrastructure (Debian stable VM’ s) ● build a single artifact - .deb package - that builds and starts our app ● rely on Jenkins automated build ● automated integration testing, via Jenkins ● automated acceptance testing, via Jenkins
  33. 33. Demo (fingers crossed)
  34. 34. Conclusion The key test is that a business sponsor could request that the current development version of the software can be deployed into production at a moment's notice - and nobody would bat an eyelid, let alone panic. (Martin Fowler)
  35. 35. DZone Continuous Delivery Research 2014
  36. 36. About me IT Consultant/Developer Apache Committer Debian Contributor BJUG leader http://ro.linkedin.com/in/ieugen/ @ieugen222 stan.ieugen@gmail.com
  37. 37. Resources ● http://dzone.com/research/continuousdelivery ● http://nvie.com/posts/a-successful-git-branching-model/ ● http://www.slideshare.net/lemiorhan/git-branching-model ● http://continuousdelivery.com/ ● http://martinfowler.com/books/continuousDelivery.html ● http://jenkins-ci.org/ ● http://maven.apache.org/ ● http://git-scm.com/ ● http://blog.idrsolutions.com/2013/09/3-build-automation-tools-featured-at- javaone/

×