SlideShare une entreprise Scribd logo
1  sur  72
Télécharger pour lire hors ligne
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 presentation on 
Slideshare etc.
@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 Helzle at FOSSASIA 
2014 
• http://www.slideshare.net/Sebobo/continuous-delivery- 
with-open-source-tools
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 
• Being able to be sure, the Increments work
Feedback
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
Safety
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“
① 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 Workflow 
• Forking Workflow 
• Overview: https://www.atlassian.com/git/tutorials/ 
comparing-workflows/
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
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 
branches and only rebase inside a branch and not 
when merging
Gitlab 
• OpenSource Git Server 
• Written in Ruby 
• Available as a ready-to-run virtual machine on Bitnami 
• https://bitnami.com/stack/gitlab/virtual-machine
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.html
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 morality campaign for self-loathing and 
shaming.
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
Functional Testing 
• Test that your code is working 
• Not how it is working 
• More black-box testing 
• Incorporate your Database 
• End-to-End testing
/** @test */ 
public function createCustomerCreatesExpectedCustomer() { 
$this->customerService->createCustomer('4711', 'MickeyMouse'); 
$this->persistenceManager->persistAll(); 
$this->assertSame( 
'4711', 
$this->customerRepository->findAll()->getFirst()->getId() 
); 
} 
!
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
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"
/** 
* 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)); 
}
③ Jenkins
Jenkins 
• Java Application 
• Can be deployed into Tomcat or Standalone 
• There are good reasons for Standalone! 
• Many Plugins available 
• Basically a Task Runner
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
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 be deployed as a Flow Package or Standalone
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!
More sophisticated… 
• Build Locally 
• Run Tests 
• Ship / Transfer 
• Run Smoketests 
• Only switch Release if Tests pass
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
<?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'); 
});
/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
⑤ Chef 
&Vagrant
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
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…
Workspace 
Project 1 
Provision Jenkins Server 
Configure Apache 
Configure PHP 
& MySQL 
Provision Projects 
Workspace 
Project 2 
Workspace 
Project 2
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
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!!!
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.
Teaser
More on Chef & Vagrant 
• There is another presentation on Chef & Vagrant 
• http://de.slideshare.net/mimiknoll/vagrant-fossasia- 
2014
⑥ Monitoring
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
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
Summary
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
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
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 to complex for me!“ 
• You can pick out modules that work for you
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.com/ 
http://www.seleniumhq.org/ 
http://typo3.org/additional-products/surf
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.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
https://www.atlassian.com/git/tutorials/comparing-workflows/ 
forking-workflow 
http://nvie.com/posts/a-successful-git-branching-model/

Contenu connexe

Tendances

Continuous delivery with open source tools
Continuous delivery with open source toolsContinuous delivery with open source tools
Continuous delivery with open source toolsSebastian Helzle
 
Untangling fall2017 week2
Untangling fall2017 week2Untangling fall2017 week2
Untangling fall2017 week2Derek Jacoby
 
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 .Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 Tikal Knowledge
 
Continuous Delivery and Infrastructure as Code
Continuous Delivery and Infrastructure as CodeContinuous Delivery and Infrastructure as Code
Continuous Delivery and Infrastructure as CodeSascha Möllering
 
Docker Best Practices Workshop
Docker Best Practices WorkshopDocker Best Practices Workshop
Docker Best Practices WorkshopAhmed AbouZaid
 
Git and GitHub for Documentation
Git and GitHub for DocumentationGit and GitHub for Documentation
Git and GitHub for DocumentationAnne Gentle
 
Using Vagrant
Using VagrantUsing Vagrant
Using Vagrantandygale
 
Automated Infrastructure and Application Management
Automated Infrastructure and Application ManagementAutomated Infrastructure and Application Management
Automated Infrastructure and Application ManagementClark Everetts
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011Bachkoutou Toutou
 
Working in Harmony: Manchester - Optimize development and content workflows
Working in Harmony: Manchester - Optimize development and content workflowsWorking in Harmony: Manchester - Optimize development and content workflows
Working in Harmony: Manchester - Optimize development and content workflowsEdmund Turbin
 
ZendCon 2015 - Laravel Forge: Hello World to Hello Production
ZendCon 2015 - Laravel Forge: Hello World to Hello ProductionZendCon 2015 - Laravel Forge: Hello World to Hello Production
ZendCon 2015 - Laravel Forge: Hello World to Hello ProductionJoe Ferguson
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with ChefJonathan Weiss
 
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and Maintenance
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and MaintenanceJUC Europe 2015: Scaling of Jenkins Pipeline Creation and Maintenance
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and MaintenanceCloudBees
 
Production ready word press
Production ready word pressProduction ready word press
Production ready word pressEdmund Turbin
 
Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Controlindiver
 
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...CloudBees
 

Tendances (20)

Learning chef
Learning chefLearning chef
Learning chef
 
Continuous delivery with open source tools
Continuous delivery with open source toolsContinuous delivery with open source tools
Continuous delivery with open source tools
 
Mini-training: Let’s Git It!
Mini-training: Let’s Git It!Mini-training: Let’s Git It!
Mini-training: Let’s Git It!
 
Untangling fall2017 week2
Untangling fall2017 week2Untangling fall2017 week2
Untangling fall2017 week2
 
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 .Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
 
Continuous Delivery and Infrastructure as Code
Continuous Delivery and Infrastructure as CodeContinuous Delivery and Infrastructure as Code
Continuous Delivery and Infrastructure as Code
 
Docker Best Practices Workshop
Docker Best Practices WorkshopDocker Best Practices Workshop
Docker Best Practices Workshop
 
Git and GitHub for Documentation
Git and GitHub for DocumentationGit and GitHub for Documentation
Git and GitHub for Documentation
 
Using Vagrant
Using VagrantUsing Vagrant
Using Vagrant
 
Automated Infrastructure and Application Management
Automated Infrastructure and Application ManagementAutomated Infrastructure and Application Management
Automated Infrastructure and Application Management
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
 
Working in Harmony: Manchester - Optimize development and content workflows
Working in Harmony: Manchester - Optimize development and content workflowsWorking in Harmony: Manchester - Optimize development and content workflows
Working in Harmony: Manchester - Optimize development and content workflows
 
ZendCon 2015 - Laravel Forge: Hello World to Hello Production
ZendCon 2015 - Laravel Forge: Hello World to Hello ProductionZendCon 2015 - Laravel Forge: Hello World to Hello Production
ZendCon 2015 - Laravel Forge: Hello World to Hello Production
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with Chef
 
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and Maintenance
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and MaintenanceJUC Europe 2015: Scaling of Jenkins Pipeline Creation and Maintenance
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and Maintenance
 
Production ready word press
Production ready word pressProduction ready word press
Production ready word press
 
Web Leaps Forward
Web Leaps ForwardWeb Leaps Forward
Web Leaps Forward
 
Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Control
 
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...
 

En vedette

Continuous Testing and New Tools for Automation - Presentation from StarWest ...
Continuous Testing and New Tools for Automation - Presentation from StarWest ...Continuous Testing and New Tools for Automation - Presentation from StarWest ...
Continuous Testing and New Tools for Automation - Presentation from StarWest ...Sauce Labs
 
Ci tools Introduce
Ci tools IntroduceCi tools Introduce
Ci tools IntroduceYin-Hong Hsu
 
Selenium and Sauce Labs
Selenium and Sauce LabsSelenium and Sauce Labs
Selenium and Sauce Labshugs
 
Web UI test automation instruments
Web UI test automation instrumentsWeb UI test automation instruments
Web UI test automation instrumentsArtem Nagornyi
 
Front-End Testing: Demystified
Front-End Testing: DemystifiedFront-End Testing: Demystified
Front-End Testing: DemystifiedSeth McLaughlin
 
Agile & ALM tools
Agile & ALM toolsAgile & ALM tools
Agile & ALM toolsLarry Cai
 

En vedette (7)

Continuous Testing and New Tools for Automation - Presentation from StarWest ...
Continuous Testing and New Tools for Automation - Presentation from StarWest ...Continuous Testing and New Tools for Automation - Presentation from StarWest ...
Continuous Testing and New Tools for Automation - Presentation from StarWest ...
 
Ci tools Introduce
Ci tools IntroduceCi tools Introduce
Ci tools Introduce
 
Agile tools
Agile toolsAgile tools
Agile tools
 
Selenium and Sauce Labs
Selenium and Sauce LabsSelenium and Sauce Labs
Selenium and Sauce Labs
 
Web UI test automation instruments
Web UI test automation instrumentsWeb UI test automation instruments
Web UI test automation instruments
 
Front-End Testing: Demystified
Front-End Testing: DemystifiedFront-End Testing: Demystified
Front-End Testing: Demystified
 
Agile & ALM tools
Agile & ALM toolsAgile & ALM tools
Agile & ALM tools
 

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

Automating Web Application Deployment
Automating Web Application DeploymentAutomating Web Application Deployment
Automating Web Application DeploymentMathew Byrne
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchHoward Greenberg
 
Production Ready WordPress #WPLDN
Production Ready WordPress #WPLDNProduction Ready WordPress #WPLDN
Production Ready WordPress #WPLDNEdmund Turbin
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
Production Ready WordPress - WC Utrecht 2017
Production Ready WordPress  - WC Utrecht 2017Production Ready WordPress  - WC Utrecht 2017
Production Ready WordPress - WC Utrecht 2017Edmund Turbin
 
Vagrant for Effective DevOps Culture
Vagrant for Effective DevOps CultureVagrant for Effective DevOps Culture
Vagrant for Effective DevOps CultureVaidik Kapoor
 
DCRUG: Achieving Development-Production Parity
DCRUG: Achieving Development-Production ParityDCRUG: Achieving Development-Production Parity
DCRUG: Achieving Development-Production ParityGeoff Harcourt
 
habitat at docker bud
habitat at docker budhabitat at docker bud
habitat at docker budMandi Walls
 
Habitat Workshop at Velocity London 2017
Habitat Workshop at Velocity London 2017Habitat Workshop at Velocity London 2017
Habitat Workshop at Velocity London 2017Mandi Walls
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsPablo Godel
 
Habitat Overview
Habitat OverviewHabitat Overview
Habitat OverviewMandi Walls
 
Picnic Software - Developing a flexible and scalable application
Picnic Software - Developing a flexible and scalable applicationPicnic Software - Developing a flexible and scalable application
Picnic Software - Developing a flexible and scalable applicationNick Josevski
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony AppsPablo Godel
 
The Modern Developer Toolbox
The Modern Developer ToolboxThe Modern Developer Toolbox
The Modern Developer ToolboxPablo Godel
 
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...E. Camden Fisher
 
Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011Brian Ritchie
 
Magento 2 Workflows
Magento 2 WorkflowsMagento 2 Workflows
Magento 2 WorkflowsRyan Street
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsPablo Godel
 

Similaire à Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20 (20)

Automating Web Application Deployment
Automating Web Application DeploymentAutomating Web Application Deployment
Automating Web Application Deployment
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
 
Production Ready WordPress #WPLDN
Production Ready WordPress #WPLDNProduction Ready WordPress #WPLDN
Production Ready WordPress #WPLDN
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
Production Ready WordPress - WC Utrecht 2017
Production Ready WordPress  - WC Utrecht 2017Production Ready WordPress  - WC Utrecht 2017
Production Ready WordPress - WC Utrecht 2017
 
Continuous feature-development
Continuous feature-developmentContinuous feature-development
Continuous feature-development
 
Vagrant for Effective DevOps Culture
Vagrant for Effective DevOps CultureVagrant for Effective DevOps Culture
Vagrant for Effective DevOps Culture
 
DCRUG: Achieving Development-Production Parity
DCRUG: Achieving Development-Production ParityDCRUG: Achieving Development-Production Parity
DCRUG: Achieving Development-Production Parity
 
habitat at docker bud
habitat at docker budhabitat at docker bud
habitat at docker bud
 
Habitat Workshop at Velocity London 2017
Habitat Workshop at Velocity London 2017Habitat Workshop at Velocity London 2017
Habitat Workshop at Velocity London 2017
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
 
Habitat Overview
Habitat OverviewHabitat Overview
Habitat Overview
 
Picnic Software - Developing a flexible and scalable application
Picnic Software - Developing a flexible and scalable applicationPicnic Software - Developing a flexible and scalable application
Picnic Software - Developing a flexible and scalable application
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
 
The Modern Developer Toolbox
The Modern Developer ToolboxThe Modern Developer Toolbox
The Modern Developer Toolbox
 
Devops
DevopsDevops
Devops
 
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
 
Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011
 
Magento 2 Workflows
Magento 2 WorkflowsMagento 2 Workflows
Magento 2 Workflows
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
 

Dernier

%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsBert Jan Schrijver
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationShrmpro
 

Dernier (20)

Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions Presentation
 

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

  • 1. Continuous Integration & Continuous Delivery with OpenSource Tools PHP Usergroup Frankfurt, 2014-11-20
  • 2. Annotated Version • The grey slides are additional slides to the presentation to make it easier to understand the presentation on Slideshare etc.
  • 4. Inspired by… Jo Dani Paddy Seb Daniel Christiane
  • 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. Motivation Version Control Tests Jenkins Deployment Configuration Management Monitoring Summary & Further Reading
  • 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
  • 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
  • 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“
  • 14. First Step Towards Continuous Integration ! if you don’t use it yet USE GIT
  • 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.
  • 18. 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
  • 19. git pull --rebase Image Source: Atlassian
  • 20. 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
  • 21.
  • 22. Gitlab • OpenSource Git Server • Written in Ruby • Available as a ready-to-run virtual machine on Bitnami • https://bitnami.com/stack/gitlab/virtual-machine
  • 24. Code Review with Gitlab and RSS Feeds • See blog post of Seb • http://www.mind-the-seb.de/blog/codereview-made- simple.html
  • 25. Gitlab Server git pull / push Developer Reviewer RSS Feeds
  • 27. 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.
  • 28. 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
  • 29. Functional Testing • Test that your code is working • Not how it is working • More black-box testing • Incorporate your Database • End-to-End testing
  • 30. /** @test */ public function createCustomerCreatesExpectedCustomer() { $this->customerService->createCustomer('4711', 'MickeyMouse'); $this->persistenceManager->persistAll(); $this->assertSame( '4711', $this->customerRepository->findAll()->getFirst()->getId() ); } !
  • 31.
  • 32. 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
  • 33. 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"
  • 34. /** * 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)); }
  • 36. Jenkins • Java Application • Can be deployed into Tomcat or Standalone • There are good reasons for Standalone! • Many Plugins available • Basically a Task Runner
  • 37.
  • 38. 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
  • 39. Version Everything! • Even Jenkins Configuration • And most of all: Jenkins Jobs!!! • Make them part of your project!
  • 41. 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
  • 42. 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!
  • 43. More sophisticated… • Build Locally • Run Tests • Ship / Transfer • Run Smoketests • Only switch Release if Tests pass
  • 44. 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
  • 45. <?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'); });
  • 46. /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
  • 48. 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
  • 49. 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…
  • 50. Workspace Project 1 Provision Jenkins Server Configure Apache Configure PHP & MySQL Provision Projects Workspace Project 2 Workspace Project 2
  • 51. 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
  • 52. 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!!!
  • 53. 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.
  • 55. More on Chef & Vagrant • There is another presentation on Chef & Vagrant • http://de.slideshare.net/mimiknoll/vagrant-fossasia- 2014
  • 57. 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
  • 58. 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
  • 59.
  • 60.
  • 62. 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
  • 63. 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
  • 64.
  • 65. Check it out www.codecoon.com Make it fun to code again
  • 67. 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
  • 68. More about Chef?!? DevOps Meetup Frankfurt, 2014-12-08 „Testing Infrastructure Code with Chef“
  • 69. 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
  • 71. 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