SlideShare a Scribd company logo
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/

More Related Content

What's hot

Learning chef
Learning chefLearning chef
Learning chef
Jonathan Carrillo
 
Continuous delivery with open source tools
Continuous delivery with open source toolsContinuous delivery with open source tools
Continuous delivery with open source tools
Sebastian Helzle
 
Mini-training: Let’s Git It!
Mini-training: Let’s Git It!Mini-training: Let’s Git It!
Mini-training: Let’s Git It!
Betclic Everest Group Tech Team
 
Untangling fall2017 week2
Untangling fall2017 week2Untangling fall2017 week2
Untangling fall2017 week2
Derek 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 Code
Sascha Möllering
 
Docker Best Practices Workshop
Docker Best Practices WorkshopDocker Best Practices Workshop
Docker Best Practices Workshop
Ahmed AbouZaid
 
Git and GitHub for Documentation
Git and GitHub for DocumentationGit and GitHub for Documentation
Git and GitHub for Documentation
Anne Gentle
 
Using Vagrant
Using VagrantUsing Vagrant
Using Vagrant
andygale
 
Automated Infrastructure and Application Management
Automated Infrastructure and Application ManagementAutomated Infrastructure and Application Management
Automated Infrastructure and Application Management
Clark Everetts
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011Bachkoutou Toutou
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
Pubudu Suharshan Perera
 
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
Edmund 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 Production
Joe Ferguson
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with Chef
Jonathan 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 Maintenance
CloudBees
 
Production ready word press
Production ready word pressProduction ready word press
Production ready word press
Edmund Turbin
 
Web Leaps Forward
Web Leaps ForwardWeb Leaps Forward
Web Leaps Forward
Moh Haghighat
 
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
indiver
 
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
 

What's hot (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...
 

Viewers also liked

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 Introduce
Yin-Hong Hsu
 
Agile tools
Agile toolsAgile tools
Agile tools
royvandewater
 
Selenium and Sauce Labs
Selenium and Sauce LabsSelenium and Sauce Labs
Selenium and Sauce Labs
hugs
 
Web UI test automation instruments
Web UI test automation instrumentsWeb UI test automation instruments
Web UI test automation instruments
Artem Nagornyi
 
Front-End Testing: Demystified
Front-End Testing: DemystifiedFront-End Testing: Demystified
Front-End Testing: Demystified
Seth McLaughlin
 
Agile & ALM tools
Agile & ALM toolsAgile & ALM tools
Agile & ALM tools
Larry Cai
 

Viewers also liked (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
 

Similar to 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 Workbench
Howard Greenberg
 
Production Ready WordPress #WPLDN
Production Ready WordPress #WPLDNProduction Ready WordPress #WPLDN
Production Ready WordPress #WPLDN
Edmund Turbin
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
Robert Lujo
 
Production Ready WordPress - WC Utrecht 2017
Production Ready WordPress  - WC Utrecht 2017Production Ready WordPress  - WC Utrecht 2017
Production Ready WordPress - WC Utrecht 2017
Edmund Turbin
 
Continuous feature-development
Continuous feature-developmentContinuous feature-development
Continuous feature-development
nhm taveer hossain khan
 
Vagrant for Effective DevOps Culture
Vagrant for Effective DevOps CultureVagrant for Effective DevOps Culture
Vagrant for Effective DevOps Culture
Vaidik Kapoor
 
DCRUG: Achieving Development-Production Parity
DCRUG: Achieving Development-Production ParityDCRUG: Achieving Development-Production Parity
DCRUG: Achieving Development-Production Parity
Geoff Harcourt
 
habitat at docker bud
habitat at docker budhabitat at docker bud
habitat at docker bud
Mandi Walls
 
Habitat Workshop at Velocity London 2017
Habitat Workshop at Velocity London 2017Habitat Workshop at Velocity London 2017
Habitat Workshop at Velocity London 2017
Mandi 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 Apps
Pablo Godel
 
Habitat Overview
Habitat OverviewHabitat Overview
Habitat Overview
Mandi 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 application
Nick 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 Apps
Pablo Godel
 
The Modern Developer Toolbox
The Modern Developer ToolboxThe Modern Developer Toolbox
The Modern Developer Toolbox
Pablo Godel
 
Devops
DevopsDevops
Devops
JyothirmaiG4
 
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 2011
Brian Ritchie
 
Magento 2 Workflows
Magento 2 WorkflowsMagento 2 Workflows
Magento 2 Workflows
Ryan Street
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
Pablo Godel
 

Similar to 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
 

Recently uploaded

Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
MayankTawar1
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
NaapbooksPrivateLimi
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
vrstrong314
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
Peter Caitens
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 

Recently uploaded (20)

Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 

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