webkonf 2013
TRANSCRIPT
Fejlesztés, tesztelés élesben
Papp Dávid
… fájdalom mentesen
A következőkről fogok beszélni
• Vagrant– Egységes fejlesztési környezet
• Jenkins– Automatizált teszt
• Capistrano– Élesítés
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? )
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
..é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
Miért pont Vagrant?
• Open Source• Pluginekkel könnyen bővíthető• Egyszerű kezelhetőség• VirtualBoxot használ
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
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
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
Demo
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
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
PMD & Duplicate Code
Code Coverage
Test Result Trend
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 )
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>
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
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
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
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
Kérdések?
Köszönöm szépen a figyelmet!