2013 09 drupalcamp leuven deployments en workflow
-
date post
22-Oct-2014 -
Category
Technology
-
view
418 -
download
0
Embed Size (px)
description
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