2013 09 drupalcamp leuven deployments en workflow

Click here to load reader

  • date post

    22-Oct-2014
  • Category

    Technology

  • view

    418
  • download

    0

Embed Size (px)

description

Deployments and workflow Drupalcamp Leuven 2013 Frederik Wouters

Transcript of 2013 09 drupalcamp leuven deployments en workflow

Drupal deployments & work flow

Deployments & workflow

Frederik Wouters

Who am I

Iets persoonlijk over mezelf-> Vader van mijn zoontje Andreas (6 maand)-> Rij graag ook eens met de moto-> Hou wel van een adrenaline rush

Programmeer ook graag-> php / JavascriptExperimenteer symfony/magento/backbone

2

Frederik Wouters

Drupal user profile since 2010Create issues/patches on d.o. Freelance Drupal 6/7Working for Q-music at the moment

Professioneel vlak

Eerst 3 jaar in de bank gewerktSinds 2010 professioneel met drupal bezigSoort mens dat issues aanmaaktMomenteel werk ik als drupal freelancer voor Q-music Zoek af en toe eens graag op een goed verstopte bug.

3

Agenda

Working aloneWorking in a small teamWorking in a large teamReleases and DeploymentsWorkflow models

De agenda

-> Als ge alleen aan een drupal project werkt-> Als je in een klein team aan een drupal project werkt-> Als je in een groot team aan een drupal project werkt-> Releases en deployments-> Workflow models

Vragen, Onderbreek mij, maar niet te lang

4

IF YOU ARE ALONE

Its just you and the server

5

FTPSSH

De op het eerste zicht eenvoudigste manier om code op de server te krijgen.

We hebben allemaal wel eens thuis alleen achter ons Pcke gezeten en manueel code naar ne server gezet.

Ikzelf doe dat ook nog wel eens af en toe.

Voor de andere mensen die het nu nog doen, spits uw oren.

6

Client wants a change

Look at codeMake changeUpload Code

Its not complicatedNo overheadIf feels goodAlways up to date

What can go wrong?

UPLOAD PROCESPROBLEMEN :Je wil een freelancer op uw site zettenServer gecrashed De Klant, of iemand in opdracht van de klant heeft uw mapje op de server weggedaan.- Klant heeft shared hosting niet betaald (meegemaakt)FTP van Site is gehacked en files zijn corrupt.DIE DINGEN GEBEUREN, maar kunnen voorkomen worden

7

Working in a small team?

Werk je in een klein, beginnend team?

8

Some teams

FTPSSH

DEV

DEV

DEV

Er zijn teams die zelfs met meerdere teams op FTP werken (anno 2013)

Ge voelt me komen he

9

Client want changes

Get code from ftpMake changesUpload

Its not complicatedNo overheadIf feels goodAlways up to date

De klant wil een wijziging.

Zolang er maar een dev aan een file tegelijk bezig is, is er geen probleem Hij haalt de code af, maakt zijn aanpassingen en laadt zijn files op.

Welk je met meerder ontwikkelaars op dezelfde files heb je gegarandeerd prijs.

Het is slechts een kwestie van tijd tot er problemen opduiken

10

CODE IS LOST

You knew it was coming

HELLO VCS

FTP / SSH /

DEV

DEV

LEAD

Men dient dus een versie beheer systeem te gebruiken.

Maar zij die het reeds gebruiken zullen ook al vastgesteld hebben dat je best je kop er bij houdt als je gaat branchen/taggen/releasen

Want SVn of liever GIT zelf doet niets buiten het beheer van jouw bestanden.

Daarom is er iemand die uit de repository de code deployed.

12

Client want changes

Check out latest versionMake changes to masterCommit Deployer deploys

De klant wil een aanpassing:De dev haalt via zijn VCS de laatste versie binnen van de codeDoet zijn aanpassingenEn commit en pushed zijn aanpassingen naar de master.De Deployer deployed de code.De aanpassingen staan nu Live.

13

MULTIPLE DEVELOPERS

No problem

Stel dat er nu iets gebeurt met de server of code base,

geen probleem,

we halen de laatste, laatst werkende, of andere versie af en pompen deze op de server.

Klaar.

14

TL;DR

Prepare for scaling, even if youre aloneUse git

Working in a bigger team

Assume

Production / Acceptance / Dev environmentCode is tested before AcceptanceMultiple people are working on several features at the same time.

COMMUNICATION COMMUNICATION COMMUNICATION

17

Concept: BRANCHES

Toch even uitleggen

18

Client want changes

HotfixCheck out acc/prdMake changesCommit

checkout dev/accCherry pickCommit

FeatureCheck out devMake changesCommit

De klant wil een aanpassing:De dev haalt via zijn VCS de laatste versie binnen van de codeDoet zijn aanpassingen

En commit en pushed zijn aanpassingen naar de master.De Deployer deployed de code.De aanpassingen staan nu Live.

19

HOW TO IMPROVE

DeploymentWorkflow

Er zijn nog enkele plaatsen waar gesleuteld kan worden om het allemaal wat vlotter te laten lopen.

20

DEPLOYMENT

AUTOMATISEER AUTOMATISEER AUTOMATISEER

21

How do the big fish deploy?

FacebookCode is compiled to one big executableThis blob is deployed with bittorrent

TwitterMurder (Capistrano + optimised bittorrent)

GoogleYADT : yaml datacenter management

Hoe deployen de groten der aarde

22

DEPLOYING TO PRODUCTION

I merged branches

IT CAN BE COMPLETELY AUTOMATIC

23

Automate deployments

No matter what your workflow is, you will always profit from automatic deployments

Frederik Wouters

Zeg dat ik het gezegd heb.

24

Automate deployments

Jenkins Open source (devs love it)A lot of componentsCapistranoOpen source (Ruby devs love it)Command lineBambooIntegrated with Jira (PMs love it)Nice issue tracking and all

Wat meer

Uitleg over Jenkins

Syntax check

Bullshit code check

SSH

GITSVN

UPDATE

TAR PUT

MULTIPLE SERVERS

ROLLBACK

26

Sessie van Jover

Voor zover ik weet kan je alles wat capistrano doet ook met Jenkins?

27

Commit based deployment

GithubBitbucket

Committing will trigger a build of a specific branch to a specific environment.

https://github.com/wieni/jenbucket

Ook fitleren op branch per job is mogelijk.Dit hebben we zo bij wieni gedaanDe splitsing production / development/

Commits op master gaan automatisch naar development en worden door de klant gestestCommits naar productie gaan automatisch naar production.

Geen User interaction needed.Wat wel moet gebeuren is dat iemand goed het overzicht bewaart welke commits op welke branch terechtkomen, maar dat moest zowiezo gebeuren.

29

How to set it up?

Github/bitbucket hook:Github:

Hier geef je je url in die getriggered moet worden.

Ook kan je best je deploy key hier ingeven bij deploy keys, zo kan de server de rit repo afhalen , of andere git commandos uitvoeren (bv tagging).

30

How to set it up?

Apt-get install jenkinsInstall some pluginsftp publisherSsh publisherSsh credentialsGit clientGoogle calendarHtml5 notifierJqueryMailerSubversionWorkspace cleanup.

Bullshit detection Copy paste detectionSyntax check

31

How to set it up?

Job conf:Enter your git repoAdd build config Build a tarball from codebaseSsh publish the codeCreate DB dump beforeSymlink of files directory between deploymentsSave a copy of prev codebase (just in case)Drush updb, cc , fra , dis devel etc

Config + deploy demo

LIVE DEMO

Show

Syntax checkCurl to newrelic ()

33

Commit based deployment

What is my current version?Bitbucket

Provide a page where you can put your jenkins url. Committing will then trigger a build of a specific Job.

https://drupal.org/sandbox/wouters_frederik/1979636

Wat is nu mijn huidige versie?

34

I COMMITTED MY CODE

Its on dev, because its good

WORKFLOW

Waterfall

ConceptionInitiationAnalysisDesignConstructionTestingImplementationMaintenance

Scrum Agile

Sprint Backlog30 days sprintTestReleaseRepeat

CI

Build test selfCommit to baseBuild fastBuild + Test every commit

Overview

Advantages

Waterfall

Deliverables for every PhaseComplete 1 thing at a time

Scrum Agile

Rapid deliveryChanges in requirements are ok30 days of awesome

CI

Early warnings of broken codeImmediate testing of all changesWrite less complex code (frequent checkins)

Implementation

Waterfall

Work on master branch for entire project.

Scrum Agile

Production branchHotfixes Dev branch per Release of 30 days.

CI

Commit to masterWrite code with feature togglesEach change must be testeable / releasable

How do the big fish do it?

FacebookMoving fast and breaking thingsMajor deploy every TuesdayTwo minor deploys every dayConflicts are to be sold by Tuesday 12.00

TwitterEach feature/bugfix lives in its branch, branches are selected for deploy, tested and merged. This gives more merge conflicts.

GoogleThe release goes out on time. If a feature isn't ready, it just gets moved to the next release. Features that are not ready can be disabled (hidden)Everyone works most of the time on one main branch

Voorbereiden om te schalen: dan kijken we naar de groten heFB : Move fast and break things , 2x per dagTwitter : feature branches, gives more conflictsGoogle

40

CI is hot

Be sure toAutomate the buildMake your build self testingCommit to the main line every dayEvery commit should build to devKeep the build fastTest a clone of production

Make your build self testingEvery commit should build to devTest a clone of production

41

LANG LATEN OPENSTAAN

IS IEDEREEN MEE?

TWEE KEER UITLEGGEN

ZIJN ER VRAGEN?

42

What worked for my bigger projects

Using jenkinsscrumWorking in sprint branchesClient tests --a lot--

http://vs08035.priorweb.be:8080/jenkins/view/Tourmanagement/job/account.tourmanagement.com/configure

43

What works for you?

Small team, small changes, commit often, release often

Big Team, big Features Consider a x days sprint and release branches.

TL;DR

Deploy without user interactionFind a workflow that suits your projectPrepare for scaling

Graphicshttp://nvie.com/posts/a-successful-git-branching-model/Chuck Norris and friends

Contact me

@[email protected]