Každý vývojář v týmu měl jiný operační systém, jinou verzi Javy, jinak nakonfigurovaný Tomcat. Výsledek? „U mě to funguje” se stalo naším neoficiálním mottem. Pak jsme objevili Vagrant a všechno se změnilo.
Problém: snowflake prostředí¶
V týmu dvanácti vývojářů jsme měli minimálně pět různých konfigurací. Někdo na Windows 7, někdo na Windows 8, dva kolegové na Ubuntu, jeden na Fedoře. Každý měl jinou verzi JDK, jiné environment proměnné, jiný způsob, jak spouštěl lokální databázi. Onboarding nového kolegy trval dva dny — dva dny nastavování prostředí, hledání správných verzí knihoven, řešení záhadných chyb.
Vagrant: virtuální stroj jako kód¶
Vagrant od HashiCorp umožňuje popsat vývojové prostředí v jednom souboru — Vagrantfile. Je to Ruby DSL, ale nepotřebujete Ruby umět. Pár řádků a máte virtuální stroj s přesně definovaným softwarem.
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.network "forwarded_port", guest: 5432, host: 5432
config.vm.provision "shell", path: "provision.sh"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
end
Provisioning script nainstaluje JDK 7, Tomcat 7, PostgreSQL 9.3, Maven 3.1 — přesně ty
verze, které potřebujeme. Žádné překvapení, žádné odchylky. Nový vývojář přijde,
naklonuje repo, spustí vagrant up a za 10 minut má běžící prostředí.
Multi-machine setup¶
Pro složitější projekty Vagrant umožňuje definovat více strojů v jednom Vagrantfile. Každý stroj má svou IP v privátní síti. Tím simulujeme produkční topologii lokálně — aplikační server + databázový server + message broker.
Sdílené složky propojují zdrojové kódy z hostitelského systému do VM. Vývojář píše kód ve svém oblíbeném IDE na hostiteli, kompilace probíhá uvnitř VM.
Provisioning: Shell vs. Chef vs. Puppet¶
Vagrant podporuje několik provisionerů. Začali jsme se shell skriptem — srozumitelný
pro každého. Důležité je, aby provisioning byl idempotentní — můžete ho
spustit opakovaně bez vedlejších efektů. Když přidáte novou závislost, stačí
vagrant provision a všichni ji mají.
Problémy¶
Výkon: VirtualBox na starších laptopech běží pomalu. Sdílené složky přes Guest Additions jsou pomalé — NFS je lepší, ale na Windows nefunguje snadno. Velikost boxů: Přes gigabajt, stahování trvá. Docker vs. Vagrant: Slyšíme o Dockeru a přemýšlíme, jestli kontejnery nenahradí VM. Zatím jsou to komplementární nástroje.
Vagrant nám ušetřil stovky hodin¶
Od zavedení Vagrantu je onboarding otázkou minut, ne dnů. Všichni pracují na identickém prostředí. Pokud máte tým větší než dva lidi, Vagrant je investice, která se vrátí první den.