Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Continuous Integration 
& Continuous Delivery 
with OpenSource Tools 
PHP Usergroup Frankfurt, 2014-11-20
Annotated Version 
• The grey slides are additional slides to the presentation 
to make it easier to understand the presen...
@kaktusmimi
Inspired by… 
Jo 
Dani 
Paddy 
Seb 
Daniel 
Christiane
Inspiration 
• This talk was inspired a lot by the work of my 
colleagues at punkt.de 
• And a presentation of Sebastian H...
Motivation 
Version Control 
Tests 
Jenkins 
Deployment 
Configuration Management 
Monitoring 
Summary & Further Reading
Are you 
agile?
Agile Requirements 
• From a Developers Point of View 
• Delivering Increments often 
• Being able to do that very fast 
•...
Feedback
Improving through 
Feedback 
• Feedback is great tool for learning 
• Continuous Integration can give developers 
feedback...
Safety
Safe Delivery 
• Continuous Integration assures that your code is 
working as expected 
• We don’t see bugs only in produc...
① Git
First Step Towards Continuous Integration 
! 
if you don’t use it yet 
USE GIT
Source: http://nvie.com/posts/a-successful-git-branching-model/
Git Workflows 
• There are several Workflows for git 
• Centralized Workflow 
• Feature Branch Workflow 
• Gitflow Workflo...
Git GUIs 
• „Not Nerdy“ 
• If you cannot manage to handle Git on a command line 
• Use a GUI! 
• Better, more concise comm...
git pull --rebase 
Image Source: Atlassian
Rebase instead of merge 
• Gives you a clean Git commit history 
• Sometimes it makes sense to still keep your feature 
br...
Gitlab 
• OpenSource Git Server 
• Written in Ruby 
• Available as a ready-to-run virtual machine on Bitnami 
• https://bi...
Mind the Seb!
Code Review with Gitlab 
and RSS Feeds 
• See blog post of Seb 
• http://www.mind-the-seb.de/blog/codereview-made- 
simple...
Gitlab Server 
git pull / push 
Developer 
Reviewer 
RSS Feeds
② Tests
TDD is dead. Long live testing. 
! 
Test-first fundamentalism is like abstinence-only sex ed: An 
unrealistic, ineffective...
Use the right Tests 
• Unit Tests are a great tool for business logic 
• Unit Tests don’t work for testing legacy code 
• ...
Functional Testing 
• Test that your code is working 
• Not how it is working 
• More black-box testing 
• Incorporate you...
/** @test */ 
public function createCustomerCreatesExpectedCustomer() { 
$this->customerService->createCustomer('4711', 'M...
Behat 
• Behat can be used for different kinds of tests 
• Unit-Tests, Functional Tests, UI Tests 
• Enables non-technical...
Feature: Language menu 
In order to switch the language on the website 
As a website user 
I need to be able to select the...
/** 
* Given I am in "desktop" layout 
* 
* @When I am in :layout layout 
*/ 
public function iResizeTheWindowToLayout($la...
③ Jenkins
Jenkins 
• Java Application 
• Can be deployed into Tomcat or Standalone 
• There are good reasons for Standalone! 
• Many...
Deployment Stage! 
! 
* Demo 
Deployment 
* Production 
Deployment 
Acceptance Stage! 
! 
* Functional Tests 
* Frontend T...
Version Everything! 
• Even Jenkins Configuration 
• And most of all: Jenkins Jobs!!! 
• Make them part of your project!
④ Surf
TYPO3 Surf 
• A Remote Server Automation and Deployment Tool 
• Written in PHP 
• Based on the TYPO3 Flow Framework 
• Can...
Simple Deployment 
• Build Locally (e.g. on Jenkins) 
• Ship as Package / Files (e.g. with rsync) 
• Don’t use git remotel...
More sophisticated… 
• Build Locally 
• Run Tests 
• Ship / Transfer 
• Run Smoketests 
• Only switch Release if Tests pas...
Surf Concepts 
$workflow !! ! set up HOW to deploy! 
$node !! ! ! ! set up WHERE to deploy! 
$application ! set up WHAT to...
<?php 
$workflow = new TYPO3SurfDomainModelSimpleWorkflow(); 
$node = new TYPO3SurfDomainModelNode('staging'); 
$node->set...
/var/apache/XXXXXX/staging/XXXXX/releases$ ls! 
! 
20141105100124! 
20141105102935! 
20141112095924! 
20141118055114! 
201...
⑤ Chef 
&Vagrant
chef-solo 
Developer Machine / Laptop 
ssh 
vagrant up 
Workspace 
Project 1 
Virtual Machine 
Gitlab Server 
git 
pull / ...
Our Vagrant Approach 
* We have VirtualBox and Vagrant running on our laptop 
* We start a virtual machine and run Chef in...
Workspace 
Project 1 
Provision Jenkins Server 
Configure Apache 
Configure PHP 
& MySQL 
Provision Projects 
Workspace 
P...
Workspace 
Project 1 
Workspace 
Project 2 
Workspace 
Project 2 
Provision Projects 
Provision Jenkins Server 
Configure ...
Workspace 
Project 1 
Workspace 
Project 2 
Workspace 
Project 2 
Provision Projects 
Provision Jenkins Server 
Configure ...
Chef & Jenkins 
There shall be 2 Chef runs 
1. The one that provisions our Jenkins Server [not yet finished…] 
2. The one ...
Teaser
More on Chef & Vagrant 
• There is another presentation on Chef & Vagrant 
• http://de.slideshare.net/mimiknoll/vagrant-fo...
⑥ Monitoring
Monitoring Stage 
• Check for Website to be alive 
• Use simple Tools 
• I.e. Selenium has many Hiccups —> False Positives...
Performance Stage 
• Check Realtime Performance of your Website 
• Gatling is a great Tool for writing Performance Tests 
...
Summary
gitlab triggers 
Version Control Build 
build succeeds 
Commit Stage Unit Tests 
UI Tests 
tests pass 
Acceptance Stage 
D...
git shell / ssh 
Gitlab Server 
Jenkins Server 
Workspace 
Project 1 
Workspace 
Project 2 
Workspace 
Project 2 
provisio...
Check it out 
www.codecoon.com 
Make it fun to code again
Questions
Some Questions 
• „Do you still have time to write code?“ 
• Yes - this toolchain makes it a lot easier for us 
• „This is...
More about Chef?!? 
DevOps Meetup 
Frankfurt, 2014-12-08 
„Testing Infrastructure 
Code with Chef“
https://about.gitlab.com/ 
http://jenkins-ci.org/ 
https://phpunit.de/ 
https://www.getchef.com/ 
https://www.vagrantup.co...
http://www.sourcetreeapp.com/download/ 
http://dashing.io/ 
http://gatling.io/
http://www.martinfowler.com/articles/ 
continuousIntegration.html 
http://www.thoughtworks.com/insights 
http://david.hein...
https://www.atlassian.com/git/tutorials/comparing-workflows/ 
forking-workflow 
http://nvie.com/posts/a-successful-git-bra...
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Nächste SlideShare
Wird geladen in …5
×

Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20

3.718 Aufrufe

Veröffentlicht am

Presentation about open source tools to set up continuous integration and continuous deployment. Covers Git, Gitlab, Chef, Vagrant, Jenkins, Gatling, Dashing, TYPO3 Surf and some other tools. Shows some best practices for testing with Behat and Functional Testing.

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20

  1. 1. Continuous Integration & Continuous Delivery with OpenSource Tools PHP Usergroup Frankfurt, 2014-11-20
  2. 2. Annotated Version • The grey slides are additional slides to the presentation to make it easier to understand the presentation on Slideshare etc.
  3. 3. @kaktusmimi
  4. 4. Inspired by… Jo Dani Paddy Seb Daniel Christiane
  5. 5. Inspiration • This talk was inspired a lot by the work of my colleagues at punkt.de • And a presentation of Sebastian Helzle at FOSSASIA 2014 • http://www.slideshare.net/Sebobo/continuous-delivery- with-open-source-tools
  6. 6. Motivation Version Control Tests Jenkins Deployment Configuration Management Monitoring Summary & Further Reading
  7. 7. Are you agile?
  8. 8. Agile Requirements • From a Developers Point of View • Delivering Increments often • Being able to do that very fast • Being able to be sure, the Increments work
  9. 9. Feedback
  10. 10. Improving through Feedback • Feedback is great tool for learning • Continuous Integration can give developers feedback on their code „automatically“ • Can come from tests, metrics, linting • The more specific the longer it takes • Feedback from different stages of CI
  11. 11. Safety
  12. 12. Safe Delivery • Continuous Integration assures that your code is working as expected • We don’t see bugs only in production, but during the CI cycle • Let’s you deploy your code „with a better feeling“
  13. 13. ① Git
  14. 14. First Step Towards Continuous Integration ! if you don’t use it yet USE GIT
  15. 15. Source: http://nvie.com/posts/a-successful-git-branching-model/
  16. 16. Git Workflows • There are several Workflows for git • Centralized Workflow • Feature Branch Workflow • Gitflow Workflow • Forking Workflow • Overview: https://www.atlassian.com/git/tutorials/ comparing-workflows/
  17. 17. Git GUIs • „Not Nerdy“ • If you cannot manage to handle Git on a command line • Use a GUI! • Better, more concise commits • Better overview of project history • Eg. SourceTree, Tower, TortoiseGit
  18. 18. git pull --rebase Image Source: Atlassian
  19. 19. Rebase instead of merge • Gives you a clean Git commit history • Sometimes it makes sense to still keep your feature branches and only rebase inside a branch and not when merging
  20. 20. Gitlab • OpenSource Git Server • Written in Ruby • Available as a ready-to-run virtual machine on Bitnami • https://bitnami.com/stack/gitlab/virtual-machine
  21. 21. Mind the Seb!
  22. 22. Code Review with Gitlab and RSS Feeds • See blog post of Seb • http://www.mind-the-seb.de/blog/codereview-made- simple.html
  23. 23. Gitlab Server git pull / push Developer Reviewer RSS Feeds
  24. 24. ② Tests
  25. 25. TDD is dead. Long live testing. ! Test-first fundamentalism is like abstinence-only sex ed: An unrealistic, ineffective morality campaign for self-loathing and shaming.
  26. 26. Use the right Tests • Unit Tests are a great tool for business logic • Unit Tests don’t work for testing legacy code • Functional Tests or testing „from outside“ might give you a lot more feedback with less effort
  27. 27. Functional Testing • Test that your code is working • Not how it is working • More black-box testing • Incorporate your Database • End-to-End testing
  28. 28. /** @test */ public function createCustomerCreatesExpectedCustomer() { $this->customerService->createCustomer('4711', 'MickeyMouse'); $this->persistenceManager->persistAll(); $this->assertSame( '4711', $this->customerRepository->findAll()->getFirst()->getId() ); } !
  29. 29. Behat • Behat can be used for different kinds of tests • Unit-Tests, Functional Tests, UI Tests • Enables non-technical people to write tests • Let’s developers implement the required logic • Uses Gherkin Language • Easily extendible using Contexts
  30. 30. Feature: Language menu In order to switch the language on the website As a website user I need to be able to select the language in a menu Background: Given I am in "desktop" layout And I am on "/" Scenario: Switching the language from english to german When I follow "Language" And I wait for 500 milliseconds And I follow "Deutsch" Then I should be on "/de.html"
  31. 31. /** * Given I am in "desktop" layout * * @When I am in :layout layout */ public function iResizeTheWindowToLayout($layout) { if (array_key_exists($layout, $this->screenSizes)) { $currentLayout = $this->screenSizes[$layout]; $this->getSession()->getDriver()->resizeWindow( $currentLayout['width'], $currentLayout['height'], 'current'); return TRUE; } throw new Exception(sprintf('Layout "%s" not defined', $layout)); }
  32. 32. ③ Jenkins
  33. 33. Jenkins • Java Application • Can be deployed into Tomcat or Standalone • There are good reasons for Standalone! • Many Plugins available • Basically a Task Runner
  34. 34. Deployment Stage! ! * Demo Deployment * Production Deployment Acceptance Stage! ! * Functional Tests * Frontend Tests Triggered by Commit Commit Stage! ! * Clone Repository * Build Project * Unit Tests green green Triggered by Scheduler
  35. 35. Version Everything! • Even Jenkins Configuration • And most of all: Jenkins Jobs!!! • Make them part of your project!
  36. 36. ④ Surf
  37. 37. TYPO3 Surf • A Remote Server Automation and Deployment Tool • Written in PHP • Based on the TYPO3 Flow Framework • Can be deployed as a Flow Package or Standalone
  38. 38. Simple Deployment • Build Locally (e.g. on Jenkins) • Ship as Package / Files (e.g. with rsync) • Don’t use git remotely • Too many things can go wrong! • Make sure to have a Rollback!
  39. 39. More sophisticated… • Build Locally • Run Tests • Ship / Transfer • Run Smoketests • Only switch Release if Tests pass
  40. 40. Surf Concepts $workflow !! ! set up HOW to deploy! $node !! ! ! ! set up WHERE to deploy! $application ! set up WHAT to deploy $deployment !! glue it all together
  41. 41. <?php $workflow = new TYPO3SurfDomainModelSimpleWorkflow(); $node = new TYPO3SurfDomainModelNode('staging'); $node->setOptions(array( 'username' => '<username>', 'composerCommandPath' => '/usr/local/bin/composer' )); $node->setHostname($host); $application = new TYPO3SurfApplicationTYPO3Neos('<project_name>'); $application->setOptions(array( 'repositoryUrl' => '<git_remote_url>', 'keepReleases' => 5, 'packageMethod' => 'git', 'transferMethod' => 'rsync', 'updateMethod' => NULL )); $application->setDeploymentPath('<deployment_path>'); $application->addNode($node); $deployment->addApplication($application); $deployment->onInitialize(function() use ($workflow, $application, $project) { $workflow->afterStage('migrate', 'codecoon:importContent'); });
  42. 42. /var/apache/XXXXXX/staging/XXXXX/releases$ ls! ! 20141105100124! 20141105102935! 20141112095924! 20141118055114! 20141118072225! 20141119041835! 20141120045634! current -> ./20141119041835! previous -> ./20141118072225! next -> ./20141120045634! ! ! /var/apache/XXXXXX$ ls -la! ! htdocs -> staging/XXXXXX/releases/current/htdocs
  43. 43. ⑤ Chef &Vagrant
  44. 44. chef-solo Developer Machine / Laptop ssh vagrant up Workspace Project 1 Virtual Machine Gitlab Server git pull / push ssh mysql samba nfs samba nfs git ssh http http chef run
  45. 45. Our Vagrant Approach * We have VirtualBox and Vagrant running on our laptop * We start a virtual machine and run Chef inside this machine * Chef sets up * Our services (Apache, PHP, MySQL, …) * Our projects / webspaces * We can now use our familiar tools to work on our projects * It feels like „working locally“ although we have a Sandbox * We cannot crash the host OS when crashing the Dev-Environment * Think about packages * Think about different software versions for different projects * Think about how long it takes to re-install your laptop…
  46. 46. Workspace Project 1 Provision Jenkins Server Configure Apache Configure PHP & MySQL Provision Projects Workspace Project 2 Workspace Project 2
  47. 47. Workspace Project 1 Workspace Project 2 Workspace Project 2 Provision Projects Provision Jenkins Server Configure Apache Configure PHP & MySQL We set up our Projects on Jenkins
  48. 48. Workspace Project 1 Workspace Project 2 Workspace Project 2 Provision Projects Provision Jenkins Server Configure Apache Configure PHP & MySQL We set up our Projects on Jenkins Automatically!!!
  49. 49. Chef & Jenkins There shall be 2 Chef runs 1. The one that provisions our Jenkins Server [not yet finished…] 2. The one that provisions the projects inside our Jenkins Server Those Projects are „publicly“ available * We can use them as „normal“ Website (e.g. for Review and Manual Testing) * We can run UI tests on them ! In the future we want to change this to a master/slave approach.
  50. 50. Teaser
  51. 51. More on Chef & Vagrant • There is another presentation on Chef & Vagrant • http://de.slideshare.net/mimiknoll/vagrant-fossasia- 2014
  52. 52. ⑥ Monitoring
  53. 53. Monitoring Stage • Check for Website to be alive • Use simple Tools • I.e. Selenium has many Hiccups —> False Positives! • Send Notifications in Case of Emergency • Email, Jabber, SMS • Ops: Nagios — Devs: Jenkins • Devs can do more sophisticated Things with Tests
  54. 54. Performance Stage • Check Realtime Performance of your Website • Gatling is a great Tool for writing Performance Tests • Use a Dashboard to visualize your Results • Dashing can help you to create Dashboards • Raspberry Pi is great Hardware to display Dashboards
  55. 55. Summary
  56. 56. gitlab triggers Version Control Build build succeeds Commit Stage Unit Tests UI Tests tests pass Acceptance Stage DB Tests tests pass tests pass build succeeds Deployment Stage Build locally Demo Stage Production Stage rsync rsync git push Developer Feedback
  57. 57. git shell / ssh Gitlab Server Jenkins Server Workspace Project 1 Workspace Project 2 Workspace Project 2 provision Selenium Server http / RESTful Services Repository Project 1 Workspace Project 2 Workspace Project 3 http / UI Testing git clone Webspace Project 1 Production 1 Webspace Project 2 Production 2 Webspace Project 3 Production 3 ssh / rsync
  58. 58. Check it out www.codecoon.com Make it fun to code again
  59. 59. Questions
  60. 60. Some Questions • „Do you still have time to write code?“ • Yes - this toolchain makes it a lot easier for us • „This is to complex for me!“ • You can pick out modules that work for you
  61. 61. More about Chef?!? DevOps Meetup Frankfurt, 2014-12-08 „Testing Infrastructure Code with Chef“
  62. 62. https://about.gitlab.com/ http://jenkins-ci.org/ https://phpunit.de/ https://www.getchef.com/ https://www.vagrantup.com/ http://www.seleniumhq.org/ http://typo3.org/additional-products/surf
  63. 63. http://www.sourcetreeapp.com/download/ http://dashing.io/ http://gatling.io/
  64. 64. http://www.martinfowler.com/articles/ continuousIntegration.html http://www.thoughtworks.com/insights http://david.heinemeierhansson.com/2014/tdd-is-dead-long- live-testing.html http://www.rbcs-us.com/documents/Why-Most-Unit- Testing-is-Waste.pdf http://www.mind-the-seb.de/blog/codereview-made-simple. html
  65. 65. https://www.atlassian.com/git/tutorials/comparing-workflows/ forking-workflow http://nvie.com/posts/a-successful-git-branching-model/

×