Lex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi

Post on 06-May-2015

277 views 2 download

transcript

Jak to děláme ve Wikidi Lex Vjatkin, Ondřej Procházka

Moderní prostředí v PHP firmě

Příjemný ekosystém Development + Operations

15 vývojářů2 admini

PHP, C, ..

6 projektů

?

80 strojů(12 fyzických)

Git

RychlýNejlepší!

Automatizace Build & Deploy

Automatizace Build & Deploy

Ant

<target name="build" depends="compile-less"> <echo>Building..</echo> <copy todir="${build.dir}" dir="build" /></target>

<target name="compile-less"> <mkdir dir="public/css" /> <uptodate property="cssUptodate" targetfile="public/css/.uptodate.touch~"> <srcfiles dir="src-less" includes="**/*.less" /> </uptodate> <fl:when test="empty cssUptodate"> <echo>[INFO] CSS's are out-of-date. Regenerating..</echo> <lessc in="src-less/*.less" out="public/css/" /> <touch file="public/css/.uptodate.touch~" /> </fl:when></target>

<target name="deploy">........

build.xml

Ant

+ AntContrib+ Flaka

<groovy></groovy>

Gradle

$ ant deployBuildfile: /home/lex/workspace/web.wikidi/build.xmlmake-paths-config: [copy] Copying 1 file to /home/lex/htdocs/wikidi-prepare: [echo] *** Ant web.wikidi prepare - start logging to build.log ***deploy: [echo] *** Starting deploy process ***-mkOtherDirs:deploy-submodules:-prepare: [echo] *** ant lib.w prepare ***deploy-src: [copy] Copying 10 files to /home/lex/htdocs/wikidi/classes-prepare: [echo] *** ant lib.zx prepare ***deploy-src: [copy] Copying 2 files to /home/lex/htdocs/wikidi/classes

$ ant deploy -Ddeploy.path=/var/www/..

HASH

HASHJak?

apache rewrite -> bash -> git -> antVirtualDocumentRoot /var/www/testomato/mass/%1/public/RewriteCond %{SERVER_NAME} ^([^.]+)\.RewriteCond /var/www/testomato/mass/%1/public/index.php !-fRewriteRule ^.*$ /cgi-bin/mkHashDir.cgi [PT,L]

if [ -n "${ProjectName}" ] && [ -x "${RunFile}" ] ; then sudo -u ${ProjectName} /usr/sbin/makeHas.sh ${SERVER_NAME} &

buildMasterDir -> checkBuildLock -> buildHashDir -> runAnt -> move to target Directory

HASH+ oddělený build revize na zavolání+ cache s prefixem- sdílená DB

TestbuilderDistribuce testovací platformy

různé verze testovacích nástrojů

různé nastavení testovací nástrojů

složitá distribuce

Testbuildergit submodule

PHPUnitPHPUnit_SeleniumTestomato (apimato)CodeSnifferJSHint

$ ant test-all

$ ant test-selenium

$ ant test-selenium

Selenium Server

WC - Wikidi Center

Email:

WC - Wikidi Center

todo: foto TV

WC - Wikidi Center

výsledky testůincidenty z/do nagiosupranýřzprávy

api

WC - Wikidi Center

Devel prostředí: po commituOstré prostředí: 1x hodinu

Configuration management

JEDNODUCHOST

base.ini - v repozitáři

private.ini - na stroji

Rychlost instalace aplikace

Pro nového vývojářeNa strojích

Pre / Release

☑ Bez admina™

$ git push origin pre

Pre / Release

A A A AA

S

PRE STABLE

$ git push origin release/20120611.1

Release

A A A AA

S

PRE STABLE

$ git push origin release/20120611.2

Release - rollback

A A A AA

S

PRE STABLE

20120610.1

Srozumitelné adresy

8ef3c.testomato.hash.wikidi.net

testomato.trunk.wikidi.net

testomato.pre.wikidi.net

testomato.stable.wikidi.net

tech-specs.stable.wikidi.net

topicleaders.stable.wikidi.net

Nástroje

admin.testomato.trunk.wikidi.net

LogyProfileryAdminer, Rockmongo, atd.

Zlepšují efektivitu komunikace admin-vývojář o 113 % !

Log viewer

multitodo: screen

Organizace vývoje

Mocný vývojář vs. Paranoidní admin

-> Kompromis

Organizace vývoje

Mocný vývojář vs. Paranoidní admin

Testy, logyTestovací prostředí

Shrnutí: nástroje

Google Closure

HashTestbuilderWikidi Center - TVLogviewerRelease "Bez admina"

Jobs@wikidi.com

Shrnutí: nástroje

Google Closure

HashTestbuilderWikidi Center - TVLogviewerRelease "Bez admina"