45
FROM 4 RELEASES PER YEAR TO 4 RELEASES PER DAY

From 4 releases per year to 4 releases per day

Embed Size (px)

Citation preview

Page 1: From 4 releases per year to 4 releases per day

FROM 4 RELEASES PERYEAR TO 4 RELEASES

PER DAY

Page 2: From 4 releases per year to 4 releases per day

FREDERIC DEWINNECTO & Co-Founder of continuousphp©15+ SysAdmin/PHP consultant backgroundPHP Certified EngineerContinuous Delivery/Deployment Evangelist

@fdewinnehttps://www.drupal.org/u/fdewinne

Page 3: From 4 releases per year to 4 releases per day

PIETER FRENSSENDrupal engineer at ONE AgencyConsulting for European CommissionSpecialized in testing and automation

@pfrenssenhttps://www.drupal.org/u/pfrenssen

Page 4: From 4 releases per year to 4 releases per day

BACKGROUNDEuropean CommissionHundreds of websites, many in static HTMLMillions of pages, total is unknownMyriad of different technologiesSingle portal: http://ec.europa.eu

Page 5: From 4 releases per year to 4 releases per day

EUROPEAN COMMISSIONhttp://ec.europa.eu/

Page 6: From 4 releases per year to 4 releases per day

HORIZON 2020https://ec.europa.eu/programmes/horizon2020/

Page 7: From 4 releases per year to 4 releases per day

THE COMMISSIONERShttps://ec.europa.eu/commission/2014-2019_en

Page 8: From 4 releases per year to 4 releases per day

EUROPEAN YOUTH PORTALhttps://europa.eu/youth/splash

Page 9: From 4 releases per year to 4 releases per day

TARGET AUDIENCE500 million people28 countries24 languages

Page 10: From 4 releases per year to 4 releases per day

WHY DRUPAL?Single technology serving all needsCost efficientPowerful content management + data modelingProven track recordFlexibleStable, secureScalableLarge communityNo vendor lock-inOpen source

Page 11: From 4 releases per year to 4 releases per day

NEXTEUROPA PLATFORMDrupal 7 distributionBase framework + optional featuresMultisite installationDrush makeBest practicesDevelopment started 2012https://github.com/ec-europa/platform-dev

Page 12: From 4 releases per year to 4 releases per day

RISING CHALLENGESAnno 2014

Growing too fastDistributed teamsOutdated practicesBottlenecksRegressions

Page 13: From 4 releases per year to 4 releases per day

GROWING TOO FAST100 websites, 100 more planned200+ developers1000+ content editors250 modules

Page 14: From 4 releases per year to 4 releases per day

DISTRIBUTED TEAMSContractors in many countriesWorking in different waysDifferent operating systemsInfrastructure behind DMZ

Page 15: From 4 releases per year to 4 releases per day

OUTDATED PRACTICESSVNBash scriptsShared development serverQuarterly release cycle

Page 16: From 4 releases per year to 4 releases per day

BOTTLENECKSManual code reviewManual deploymentManual updating every 3 months

Page 17: From 4 releases per year to 4 releases per day

REGRESSIONSHigh rate of code changeNo systematic automated testing

Page 18: From 4 releases per year to 4 releases per day

GOALSReduce bottlenecks by automationSpeed up the release cycleAdopt current best practicesUniversal build systemExternal accessAutomated testing + QA

Page 19: From 4 releases per year to 4 releases per day

MOVE TO INDUSTRIALIZATION

Page 20: From 4 releases per year to 4 releases per day

DEFINE A TOOLSET

Page 21: From 4 releases per year to 4 releases per day
Page 22: From 4 releases per year to 4 releases per day

MOVING TO GIThttps://github.com/ec-europa

Move to GithubGit FlowConvert from SVNClean up historyTraining and support

Page 23: From 4 releases per year to 4 releases per day

DEPENDENCY MANAGEMENT WITHCOMPOSER

Dependency Manager for PHPFocused on library dependenciesDefine PHP version and extension requirementshttps://getcomposer.org

Page 24: From 4 releases per year to 4 releases per day

{

"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": {

"Drupal\\nexteuropa\\": "tests/src",

"NextEuropa\\": "src"

}

}

}

Page 25: From 4 releases per year to 4 releases per day

MANAGING TASKS WITH PHINGPHing Is Not GNU makePHP Project build toolbased on Apache Antwritten in PHP; easily extensible by PHP developersdefine sequences of tasksorganized in targetseasily drives Drush using additional taskshttps://www.drupal.org/project/phingdrushtask

Page 26: From 4 releases per year to 4 releases per day

<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}"

/>

Page 27: From 4 releases per year to 4 releases per day

CHECKING CODING RULES WITHPHPCODESNIFFER

Custom rulesetConfiguration generated with PhingAutomated check on push

$ ./vendor/bin/phpcs

Page 28: From 4 releases per year to 4 releases per day

AUTOMATING TESTS WITH BEHATinspired by Cucumberuses Gherkin syntax to define specssupports several web browser drivers through extensions

Page 29: From 4 releases per year to 4 releases per day

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"

Page 30: From 4 releases per year to 4 releases per day

PACKING SYSTEM IMAGES WITHPACKER

immutable infrastructure approachvirtualization abstraction layerversioned configuration

Page 31: From 4 releases per year to 4 releases per day

{

"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"

}]

}

Page 32: From 4 releases per year to 4 releases per day

CREATING ON-DEMANDENVIRONMENT WITH AWScoded infrastructureinfrastructure as a dependencynew environments deployed in a few minutespay per use

Page 33: From 4 releases per year to 4 releases per day

[aws-cf-runstack] 2016-03-17T14:38:03+00:00: AWS::CloudFormation::Stack (CREATE_IN_PROGRESS)

[aws-cf-runstack] 2016-03-17T14:38:25+00:00: AWS::EC2::SecurityGroup (CREATE_COMPLETE)

[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 (CREATE_COMPLETE)

[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_COMPLETE)

[aws-cf-runstack] 2016-03-17T14:41:24+00:00: AWS::IAM::InstanceProfile (CREATE_COMPLETE)

[aws-cf-runstack] 2016-03-17T14:42:20+00:00: AWS::EC2::Instance (CREATE_COMPLETE)

[aws-cf-runstack]

WebServerIP: 52.19.236.43

WebServerURL: http://demo.subsite-starterkit.ec-europa.continuous.lu/

Page 34: From 4 releases per year to 4 releases per day

ORCHESTRATING DELIVERYPIPELINES WITH CONTINUOUSPHP

no vendor lock-innot limited by worker modelpossibility to run tests in parallelspecialized in phpsimplify our delivery workflow

Page 35: From 4 releases per year to 4 releases per day
Page 36: From 4 releases per year to 4 releases per day

SKELETONhttps://github.com/ec-europa/subsite-starterkit

Common starting point for all sitesProject configurationBuild system: PhingDevelopment tools: PHPCS, Composer, BehatContinuous Integration supportGood documentation

Page 37: From 4 releases per year to 4 releases per day

ADOPT A PRACTICE

Page 38: From 4 releases per year to 4 releases per day

CONTINUOUS INTEGRATIONcontinuously merging developer branches into a commononepart of extreme programming practicebuild and test every commit to prevent integration issuesdeploy every build on an integration server

Page 39: From 4 releases per year to 4 releases per day

CONTINUOUS DELIVERYContinuous Integration is a part of CDCode is packaged by a build server every time a change iscommittedany code commit may be released to customers at anypointimplements Scrum Project Management

Page 40: From 4 releases per year to 4 releases per day

CONTINUOUS DEPLOYMENTContinuous Delivery is a part of Continuous Deploymentevery successful build is deployed to a ProductionEnvironmentany completed, working feature is delivered to productionas soon as possibleimplements Kanban Process Management

Page 41: From 4 releases per year to 4 releases per day

CONTINUOUS COMPARISONFeature

Feature

Feature

Code Build Test Release Deploy

Agile Development

Continuous Integration

Operate

Continuous Delivery

Continuous Deployment

Page 42: From 4 releases per year to 4 releases per day

BRANCHING MODEL

Master

Hot Fix

Release

Develop

Feature

Feature

V0.1.0 V0.1.1 V0.2.0

Page 43: From 4 releases per year to 4 releases per day

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

Page 44: From 4 releases per year to 4 releases per day

ACHIEVEMENTSDrastically decreased the time to marketMultiple releases per dayOverall so�ware quality improvedBottlenecks have decreasedOnline & inline code reviewImproved test coverage catches regressionsEasy "one-step" building and installing of any siteUser acceptance testing on ephemeral environmentsEarly detection of common problems

Page 45: From 4 releases per year to 4 releases per day

THANK YOUQUESTIONS?

Slides: http://slideshare.net/continuousphp/from-4-releases-per-year-to-4-releases-per-day-61474837

Follow us on Twitter:

https://twitter.com/fdewinnehttps://twitter.com/pfrenssen