webkonf 2013

23
Fejlesztés, tesztelés élesben Papp Dávid … fájdalom mentesen

Upload: david-papp

Post on 12-Feb-2017

128 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Webkonf 2013

Fejlesztés, tesztelés élesben

Papp Dávid

… fájdalom mentesen

Page 2: Webkonf 2013

A következőkről fogok beszélni

• Vagrant– Egységes fejlesztési környezet

• Jenkins– Automatizált teszt

• Capistrano– Élesítés

Page 3: Webkonf 2013

Miért fáj ha…

• … nincs egységes fejlesztői környezet• ( nálam még működött )

• … nincsenek automatizált tesztek• ( a fejlesztő/tesztelő azt mondta

mehet… )• … nincs deployer• ( tuti minden szerverre ki ment a

kód? )

Page 4: Webkonf 2013

Mit tud nyújtani nekünk a Vagrant?• Egységes fejlesztői környezetet

biztosít • Központilag konfigurálható ( Puppet,

Chef )• Könnyen telepíthető és hordozható• VirtualBox és VMware támogatás

Page 5: Webkonf 2013

..és még (mit adtak nekünk a rómaiak) ?

• Decentralizált• Jobb erőforrás kihasználás• A fejlesztő saját sandboxot kap• Cloud friendly

Page 6: Webkonf 2013

Miért pont Vagrant?

• Open Source• Pluginekkel könnyen bővíthető• Egyszerű kezelhetőség• VirtualBoxot használ

Page 7: Webkonf 2013

Negatívumok• Bevezetése erőforrás-igényes lehet• Nem tudunk esetlegesen az élessel

megegyező infrastruktúrát építeni• Üzemeltetők részéről Puppet, Chef tudás

szükséges lehet• I/O igényes műveleteknél lassú• Csak linuxot támogat

Page 8: Webkonf 2013

Példa konfig

Vagrant.configure("2") do |config| config.vm.hostname = "webconf2013.iamhere.local" config.vm.box = "precise64" config.vm.box_url = "http://files.vagrantup.com/precise64.box"

config.vm.network :private_network, ip: "10.1.1.58" config.vm.network :forwarded_port, guest: 80, host: 8080 config.vm.network :forwarded_port, guest: 443, host: 8443

Page 9: Webkonf 2013

Példa konfigconfig.vm.provision :puppet do |puppet| puppet.manifests_path = "puppet/manifests" puppet.manifest_file = "base.pp" end

config.vm.provider :virtualbox do |vb| vb.gui = false vb.customize ["modifyvm", :id, "--memory", "512"] endend

Page 10: Webkonf 2013

Demo

Page 11: Webkonf 2013

Miért jó az automatizált teszt?

• Nem kell ott ülni amíg fut a teszt• Hatékonyabbá teszi a tesztelők

munkáját• Automatikus teljesítmény,

kódminőség figyelés és figyelmeztetés

Page 12: Webkonf 2013

Miért pont a Jenkins?

• Ingyenes és open source• Egyszerű kezelhetőség• Egyszerű bővíthetőség• Nagy community 600+ plugin érhető

el

Page 13: Webkonf 2013

PMD & Duplicate Code

Page 14: Webkonf 2013

Code Coverage

Page 15: Webkonf 2013

Test Result Trend

Page 16: Webkonf 2013

Negatívumok• Kézzel kell írni a build.xml-t• Sok feladat esetén memória igényes• Nem clusterhezhető• Nehezen upgradelhető ( a pluginek

miatt )

Page 17: Webkonf 2013

Példa  <target name="lint" description="Perform syntax check of sourcecode files">    <apply executable="php" failonerror="true">    <arg value="-l" />    <fileset dir="${sourcedir}">      <include name="**/*.php" />      <modified />    </fileset>    <fileset dir="${basedir}/src/">      <include name="**/*Test.php" />      <modified />    </fileset>    </apply>  </target>   </target>

Page 18: Webkonf 2013

Miért használjunk deployert?

• Multi staging• Multi node type• Emberi hiba faktor kiszűrése• Minden szerveren a megfelelő kódbázis

legyen kint• Rollback képesség

Page 19: Webkonf 2013

Mi a capistrano előnye?• Könnyen bővíthető• Open Source• Rengetek plugin elérhető ( pl. teljes symfony

támogatás )• Bevezetése egyszerű nem igényel nagyobb

infrastrukturális beállítást• Eszközt és módszert add a kezünkbe

Page 20: Webkonf 2013

Mi a hátránya a Capistranonak?

• Kezdetleges cloud és cdn támogatás–… de azt inkább írni kell

• Bővítéséhez ruby tudás szükséges

Page 21: Webkonf 2013

Példaset :application, "webconf"set :deploy_to, "/var/www/webconf"

set :repository, "https://github.com/WordPress/WordPress.git"set :scm, :gitset :branch, 'master'

set :keep_releases, 3set :use_sudo, falseset :update_vendors, falseset :deploy_via, :copy

role :web, "10.1.1.58"set :user, "www-data"

set :copy_exclude, [".git", ".DS_Store", ".gitignore", ".gitmodules","nbproject"]

logger.level = Logger::MAX_LEVEL

Page 22: Webkonf 2013

Kérdések?

Page 23: Webkonf 2013

Köszönöm szépen a figyelmet!