2021-04-09 08:42:54 +0200 +0200

Prskavčí blog

Sep 25, 2011

Deployment prakticky - WebExpo 2011

Letos jsem přednášel na Webexpu na téma deployment. Ve 30 minutách se nedá říci dost, aby jste se dozvěděli všechno tak zkusím v tomto článku shrnout o čem jsem mluvil a přidat nějaké zdroje, které pomůžou v dalších úsilí při automatizaci deploymentu.

Pro dobré fungovaní Continuous Integration potřebujete automatizovat deployment na prostředí. Na prostředích se často střídají aktuální feature větve vývojářů nebo se tam provádí update z větve pro release či sprint. K tomu se vše provádí několikrát denně. Abychom tohle mohli dělat potřebuje deployment mít plně automatický.

Pokud ještě se deployment dělá ručně, občas se na něco zapomene a jakákoliv ruční práce je zdrojem chyb. Celkově dojde k úspoře nákladů, protože čas ztrávený deploymentem firmě nikdo nezaplatí.

Za tlačítkem push si můžete představit jakýkoliv spouštěč, který vám vyhovuje (git push do příslušné větve, tlačítko na webu apod.).

Pokud nemáte zkušenost s gitem, tak rozvedu ten git push. Ostatní mohou odstavec přeskočit.

Git jako distribuovaný systém funguje jen lokálně a může mít svoje vzdálené kopie repository podobně jako v architektuře klient server (Subversion). Ale nemusí mít jen jedno místo kam se zdrojový kód odesílá pomocí git push. Toho se dá využít a používá se to tak, že kromě serveru kam ukládáte zdrojový kód (u mě například Github.com), který je označený jako origin (git push origin master - odešle kód tam), mohu například přidat místo kde se pushem přímo nasadí (git push heroku master - kód se odešle na cloud Heroku a dojde k jeho nasazení). Obdobně kromě místa, lze použít určité větve a mít na serveru hook script, který detekuje změny a provede nasazení.

Samozřejmě jsem nemohl vyzkoušet podrobně každou cloudovou službu, na to nemám rozpočet a ne každá má k dispozici zdarma potřebný program pro vývojáře. Důležité aspoň pro mě je podpora práce z CLI kvůli možnosti automatizace, případně nějaké API, které to umožňuje. A také podpora vlastního nastavení a úkolů, aby jste mohli například automaticky spustit test nebo migraci databáze. Svoje zkušenosti nebo rady a doporučení uveďte do komentářů, budu rád.

a configuration management:

#topdir %define _topdir @@TOPDIR@@ %define _target_os Linux

%description Barcamp 2010 demo app

%install mkdir -p $RPM_BUILD_ROOT/srv/www/demoApp/@@CURRENT@@ cp -r ${FILENAME}-${VERSION}/* $RPM_BUILD_ROOT/srv/www/demoApp/@@CURRENT@@/

%clean [ “${RPM_BUILD_ROOT}” != “/” ] && rm -rf ${RPM_BUILD_ROOT}

%files /srv/www/demoApp/@@CURRENT@@

%defattr(755,root,root) %dir /srv/ %dir /srv/www %dir /srv/www/demoApp/ %dir /srv/www/demoApp/@@CURRENT@@/

%post echo “run: ln -nfs /srv/www/demoApp/@@CURRENT@@/ /srv/www/demoApp/current” a k tomu příslušný build script

K nejznámějším nástrojům patří CFEngine, Puppet a Chef.

O chefu jsem se zmiňoval již dříve, je vhodný právě například pro tvorbu virtualizací ve velkém. Pro příklad uvedu cluster Nostromu, který měl 30 000 jader.

Puppet

  • https://www.puppetlabs.com
  • napsaný v Ruby, odvozený od cfengine
  • klient aktualizuje konfiguraci v pravidelných intervalech a reportuje zpět na server (Puppet Master)
  • perfektní pro “sysadmins”
  • deklarativní popis nastaveni

Chef

  • https://www.opscode.com/chef
  • v Ruby, odvozený od Puppetu
  • Ruby DSL
  • cloud provisioning
  • imperativní popis, více flexibilní, více pro “vývojáře”
  • pokud by vás to zajímalo doporučuji zajít na školení Radima Marka (GoodData) - s kódem WEBEXPO2011 by měla být sleva 15%

{% blockquote Ladislav Prskavec - Kurz Jenkins https://webexpo.cz/academy/kurzy/jenkins-jak-na-continuous-integration-v-php WebExpo Academy %}