SlideShare a Scribd company logo
FROM 4 RELEASES PER
YEAR TO 4 RELEASES
PER DAY
FREDERIC DEWINNE
CTO & Co-Founder of continuousphp©
15+ SysAdmin/PHP consultant background
PHP Certified Engineer
Continuous Delivery/Deployment Evangelist
@fdewinne
https://www.drupal.org/u/fdewinne
PIETER FRENSSEN
Drupal engineer at ONE Agency
Consulting for European Commission
Specialized in testing and automation
@pfrenssen
https://www.drupal.org/u/pfrenssen
BACKGROUND
European Commission
Hundreds of websites, many in static HTML
Millions of pages, total is unknown
Myriad of different technologies
Single portal: http://ec.europa.eu
EUROPEAN COMMISSION
http://ec.europa.eu/
HORIZON 2020
https://ec.europa.eu/programmes/horizon2020/
THE COMMISSIONERS
https://ec.europa.eu/commission/2014-2019_en
EUROPEAN YOUTH PORTAL
https://europa.eu/youth/splash
TARGET AUDIENCE
500 million people
28 countries
24 languages
WHY DRUPAL?
Single technology serving all needs
Cost efficient
Powerful content management + data modeling
Proven track record
Flexible
Stable, secure
Scalable
Large community
No vendor lock-in
Open source
NEXTEUROPA PLATFORM
Drupal 7 distribution
Base framework + optional features
Multisite installation
Drush make
Best practices
Development started 2012
https://github.com/ec-europa/platform-dev
RISING CHALLENGES
Anno 2014
Growing too fast
Distributed teams
Outdated practices
Bottlenecks
Regressions
GROWING TOO FAST
100 websites, 100 more planned
200+ developers
1000+ content editors
250 modules
DISTRIBUTED TEAMS
Contractors in many countries
Working in different ways
Different operating systems
Infrastructure behind DMZ
OUTDATED PRACTICES
SVN
Bash scripts
Shared development server
Quarterly release cycle
BOTTLENECKS
Manual code review
Manual deployment
Manual updating every 3 months
REGRESSIONS
High rate of code change
No systematic automated testing
GOALS
Reduce bottlenecks by automation
Speed up the release cycle
Adopt current best practices
Universal build system
External access
Automated testing + QA
MOVE TO INDUSTRIALIZATION
DEFINE A TOOLSET
From 4 releases per year to 4 releases per day
MOVING TO GIT
https://github.com/ec-europa
Move to Github
Git Flow
Convert from SVN
Clean up history
Training and support
DEPENDENCY MANAGEMENT WITH
COMPOSER
Dependency Manager for PHP
Focused on library dependencies
Define PHP version and extension requirements
https://getcomposer.org
{
"require": {
"php": ">=5.4.0",
"drupal/coder": "dev-8.x-2.x",
"drupal/drupal-extension": "~3.1.5",
"phing/phing": "~2.10",
"drupal/phing-drush-task": "1.0",
"continuousphp/phing-tasks": "~0.1.3"
},
"autoload": {
"psr-4": {
"Drupalnexteuropa": "tests/src",
"NextEuropa": "src"
}
}
}
MANAGING TASKS WITH PHING
PHing Is Not GNU make
PHP Project build tool
based on Apache Ant
written in PHP; easily extensible by PHP developers
define sequences of tasks
organized in targets
easily drives Drush using additional tasks
https://www.drupal.org/project/phingdrushtask
<project name="My subsite" default="help">
<target name="help" description="Phing target list">
<exec executable="${phing.bin}"
passthru="true">
<arg value="-l"/>
</exec>
</target>
<target name="generate-development-makefile"
description="Generate the makefile for development modules."
<drushmakefile
makeFile="${subsite.temporary.development.make}"
coreVersion="${drupal.core.version}"
projects="${development.modules.download}"
defaultProjectDir="${development.modules.location}"
/>
CHECKING CODING RULES WITH
PHPCODESNIFFER
Custom ruleset
Configuration generated with Phing
Automated check on push
$ ./vendor/bin/phpcs
AUTOMATING TESTS WITH BEHAT
inspired by Cucumber
uses Gherkin syntax to define specs
supports several web browser drivers through extensions
Feature: User authentication
In order to protect the integrity of the website
As a product owner
I want to make sure only authenticated users
can access the site administration
Scenario: Anonymous user can see the user login page
Given I am not logged in
When I visit "user"
Then I should see the text "ECAS Login"
And I should see the text "Request new password"
And I should see the text "Username"
And I should see the text "Password"
But I should not see the text "Log out"
And I should not see the text "My account"
PACKING SYSTEM IMAGES WITH
PACKER
immutable infrastructure approach
virtualization abstraction layer
versioned configuration
{
"variables": {
"site_type": "",
"mysql_password": ""
},
"builders": [{
"type": "amazon-ebs",
"source_ami": "ami-********",
"ami_name": "{{user `site_type`}}-dev {{timestamp}}",
"iam_instance_profile" : "acceptance"
}],
"provisioners":[ {
"type": "salt-masterless",
"local_state_tree": "salt"
}]
}
CREATING ON-DEMAND
ENVIRONMENT WITH AWS
coded infrastructure
infrastructure as a dependency
new environments deployed in a few minutes
pay per use
[aws-cf-runstack] 2016-03-17T14:38:03+00:00: AWS::CloudFormation::Stack (CREA
[aws-cf-runstack] 2016-03-17T14:38:25+00:00: AWS::EC2::SecurityGroup (CREATE_
[aws-cf-runstack] 2016-03-17T14:38:25+00:00: AWS::EC2::EIP (CREATE_COMPLETE)
[aws-cf-runstack] 2016-03-17T14:39:02+00:00: AWS::Route53::RecordSetGroup (CR
[aws-cf-runstack] 2016-03-17T14:39:20+00:00: AWS::IAM::Role (CREATE_COMPLETE)
[aws-cf-runstack] 2016-03-17T14:39:24+00:00: AWS::IAM::Policy (CREATE_COMPLET
[aws-cf-runstack] 2016-03-17T14:41:24+00:00: AWS::IAM::InstanceProfile (CREAT
[aws-cf-runstack] 2016-03-17T14:42:20+00:00: AWS::EC2::Instance (CREATE_COMPL
[aws-cf-runstack]
WebServerIP: 52.19.236.43
WebServerURL: http://demo.subsite-starterkit.ec-europa.continuous.lu/
ORCHESTRATING DELIVERY
PIPELINES WITH CONTINUOUSPHP
no vendor lock-in
not limited by worker model
possibility to run tests in parallel
specialized in php
simplify our delivery workflow
From 4 releases per year to 4 releases per day
SKELETON
https://github.com/ec-europa/subsite-starterkit
Common starting point for all sites
Project configuration
Build system: Phing
Development tools: PHPCS, Composer, Behat
Continuous Integration support
Good documentation
ADOPT A PRACTICE
CONTINUOUS INTEGRATION
continuously merging developer branches into a common
one
part of extreme programming practice
build and test every commit to prevent integration issues
deploy every build on an integration server
CONTINUOUS DELIVERY
Continuous Integration is a part of CD
Code is packaged by a build server every time a change is
committed
any code commit may be released to customers at any
point
implements Scrum Project Management
CONTINUOUS DEPLOYMENT
Continuous Delivery is a part of Continuous Deployment
every successful build is deployed to a Production
Environment
any completed, working feature is delivered to production
as soon as possible
implements Kanban Process Management
CONTINUOUS COMPARISON
Feature
Feature
Feature
Code Build Test Release Deploy
Agile Development
Continuous Integration
Operate
Continuous Delivery
Continuous Deployment
BRANCHING MODEL
Master
Hot Fix
Release
Develop
Feature
Feature
V0.1.0 V0.1.1 V0.2.0
ENVIRONMENT MANAGEMENT
Master
Hot Fix
Release
Develop
Feature
Feature
V0.1.0 V0.1.1 V0.2.0
Demo
Demo
Integration
Staging
Demo
Pre-production
Production
ACHIEVEMENTS
Drastically decreased the time to market
Multiple releases per day
Overall so ware quality improved
Bottlenecks have decreased
Online & inline code review
Improved test coverage catches regressions
Easy "one-step" building and installing of any site
User acceptance testing on ephemeral environments
Early detection of common problems
THANK YOU
QUESTIONS?
Slides: http://slideshare.net/continuousphp/from-4-
releases-per-year-to-4-releases-per-day-61474837
Follow us on Twitter:
https://twitter.com/fdewinne
https://twitter.com/pfrenssen

More Related Content

PDF
continuousphp
PPTX
How to Use the Salesforce Suite with Drupal 8: A Quick Start Guide
PPT
DevOps and Visual Studio Team Services
PPTX
SPFx (SharePoint Framework)
PPTX
Deployment of DevOps Environment with CA Solutions
PDF
Laravel CI / CD in Azure Web Apps - Global Azure Bootcamp Jakarta
PDF
DSAG Jahreskongress 2018 - DevOps and Deployment Pipelines in SAP ABAP Landsc...
PPTX
Building a REST API for Longevity
continuousphp
How to Use the Salesforce Suite with Drupal 8: A Quick Start Guide
DevOps and Visual Studio Team Services
SPFx (SharePoint Framework)
Deployment of DevOps Environment with CA Solutions
Laravel CI / CD in Azure Web Apps - Global Azure Bootcamp Jakarta
DSAG Jahreskongress 2018 - DevOps and Deployment Pipelines in SAP ABAP Landsc...
Building a REST API for Longevity

What's hot (20)

PPTX
Optimizing deployment & dev ops with tfs 2013
PDF
Our move to Salesforce DX and Unlocked Packages
PDF
GlotPress aka translate.wordpress.org
PPTX
Global Office 365 Developer Bootcamp
PDF
SAP Inside Track Munich 2018 - DevOps and Deployment Pipelines in ABAP Landsc...
PDF
Release Management in TFS 2015
PDF
Develop and Deploy Outside the Repo
PDF
Tfs 2015 Upgrade Tips and Tricks
PPTX
Continuous Delivery With Team Foundation Server
PDF
DevOps on AWS
PPTX
Visual Studio Team Services Extensions by Taavi Kõosaar (@melborp)
PDF
API SDK Development – Lessons Learned
PDF
Webcast: TFS 2015 & Why Upgrade
PDF
DevOps Real-Time Projects | Edureka
PPTX
#SitBERN modern abap development with abapgit
PPTX
Comment tirer partie de Visual Studio Online pour vos développements SharePoint
PDF
MuleSoft Surat Virtual Meetup#36 - MuleSoft Composer for Salesforce - No Code...
PDF
Redisnged ui webinar - 3.16.16
PDF
Treat your servers like your Ruby App: Infrastructure as Code
PDF
Frappe framework
Optimizing deployment & dev ops with tfs 2013
Our move to Salesforce DX and Unlocked Packages
GlotPress aka translate.wordpress.org
Global Office 365 Developer Bootcamp
SAP Inside Track Munich 2018 - DevOps and Deployment Pipelines in ABAP Landsc...
Release Management in TFS 2015
Develop and Deploy Outside the Repo
Tfs 2015 Upgrade Tips and Tricks
Continuous Delivery With Team Foundation Server
DevOps on AWS
Visual Studio Team Services Extensions by Taavi Kõosaar (@melborp)
API SDK Development – Lessons Learned
Webcast: TFS 2015 & Why Upgrade
DevOps Real-Time Projects | Edureka
#SitBERN modern abap development with abapgit
Comment tirer partie de Visual Studio Online pour vos développements SharePoint
MuleSoft Surat Virtual Meetup#36 - MuleSoft Composer for Salesforce - No Code...
Redisnged ui webinar - 3.16.16
Treat your servers like your Ruby App: Infrastructure as Code
Frappe framework
Ad

Similar to From 4 releases per year to 4 releases per day (20)

PDF
2016 05-cloudsoft-amp-and-brooklyn-new
PPTX
Running PHP In The Cloud
PPTX
Just another Wordpress weblog, but more cloudy
PDF
Introduction to WP-CLI: Manage WordPress from the command line
PDF
How to measure everything - a million metrics per second with minimal develop...
PPTX
PHP on Windows
PPTX
PHP on Windows
PDF
quickguide-einnovator-4-cloudfoundry
PPTX
Just Another Word Press Weblog But More Cloudy
PDF
Cloud Foundry for PHP developers
PDF
PHP Buildpacks in the Cloud on Bluemix
 
PPTX
Docker Container As A Service - Mix-IT 2016
PDF
2016-02-09 - Breakfast Seminar - Redpill Linpro - Chef at Aptoma - Håkon Drange
PDF
Automate Your Automation | DrupalCon Vienna
PDF
One-Man Ops
PPTX
REST in Peace
PPTX
Infrastructure as code, using Terraform
PPTX
Drupal 7 Web Services Crash Course
PPTX
PHP on Windows and on Azure
PDF
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
2016 05-cloudsoft-amp-and-brooklyn-new
Running PHP In The Cloud
Just another Wordpress weblog, but more cloudy
Introduction to WP-CLI: Manage WordPress from the command line
How to measure everything - a million metrics per second with minimal develop...
PHP on Windows
PHP on Windows
quickguide-einnovator-4-cloudfoundry
Just Another Word Press Weblog But More Cloudy
Cloud Foundry for PHP developers
PHP Buildpacks in the Cloud on Bluemix
 
Docker Container As A Service - Mix-IT 2016
2016-02-09 - Breakfast Seminar - Redpill Linpro - Chef at Aptoma - Håkon Drange
Automate Your Automation | DrupalCon Vienna
One-Man Ops
REST in Peace
Infrastructure as code, using Terraform
Drupal 7 Web Services Crash Course
PHP on Windows and on Azure
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Ad

Recently uploaded (20)

PPTX
PPT_M4.3_WORKING WITH SLIDES APPLIED.pptx
PDF
Vigrab.top – Online Tool for Downloading and Converting Social Media Videos a...
PPTX
international classification of diseases ICD-10 review PPT.pptx
PDF
“Google Algorithm Updates in 2025 Guide”
PPTX
Internet___Basics___Styled_ presentation
PDF
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
PPTX
innovation process that make everything different.pptx
PPTX
ENCOR_Chapter_11 - ‌BGP implementation.pptx
PPTX
durere- in cancer tu ttresjjnklj gfrrjnrs mhugyfrd
PPT
256065457-Anaesthesia-in-Liver-Disease-Patient.ppt
PPTX
Module 1 - Cyber Law and Ethics 101.pptx
PDF
Decoding a Decade: 10 Years of Applied CTI Discipline
PDF
Testing WebRTC applications at scale.pdf
PPTX
INTERNET------BASICS-------UPDATED PPT PRESENTATION
PDF
Centralized Business Email Management_ How Admin Controls Boost Efficiency & ...
PDF
Tenda Login Guide: Access Your Router in 5 Easy Steps
PDF
LABUAN4D EXCLUSIVE SERVER STAR GAMING ASIA NO.1
PPTX
introduction about ICD -10 & ICD-11 ppt.pptx
PPTX
ppt for upby gurvinder singh padamload.pptx
PPTX
ENCOR_Chapter_10 - OSPFv3 Attribution.pptx
PPT_M4.3_WORKING WITH SLIDES APPLIED.pptx
Vigrab.top – Online Tool for Downloading and Converting Social Media Videos a...
international classification of diseases ICD-10 review PPT.pptx
“Google Algorithm Updates in 2025 Guide”
Internet___Basics___Styled_ presentation
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
innovation process that make everything different.pptx
ENCOR_Chapter_11 - ‌BGP implementation.pptx
durere- in cancer tu ttresjjnklj gfrrjnrs mhugyfrd
256065457-Anaesthesia-in-Liver-Disease-Patient.ppt
Module 1 - Cyber Law and Ethics 101.pptx
Decoding a Decade: 10 Years of Applied CTI Discipline
Testing WebRTC applications at scale.pdf
INTERNET------BASICS-------UPDATED PPT PRESENTATION
Centralized Business Email Management_ How Admin Controls Boost Efficiency & ...
Tenda Login Guide: Access Your Router in 5 Easy Steps
LABUAN4D EXCLUSIVE SERVER STAR GAMING ASIA NO.1
introduction about ICD -10 & ICD-11 ppt.pptx
ppt for upby gurvinder singh padamload.pptx
ENCOR_Chapter_10 - OSPFv3 Attribution.pptx

From 4 releases per year to 4 releases per day