Powering Development and Testing Environments with Vagrant
-
Upload
coen-jacobs -
Category
Technology
-
view
1.596 -
download
4
Transcript of Powering Development and Testing Environments with Vagrant
Powering Development and Testing Environments
with Vagrant
Coen Jacobs / @CoenJacobs at
WordCamp Norway 2014 !
#WCNorge
Coen Jacobs@CoenJacobs
!http://coenjacobs.me
!WooThemes / WooCommerce
Powering Development and Testing Environments
with Vagrant
Vagrant
Problem at hand
Get someone started on your project
• “I just use MAMP, it’s brilliant”
• “Tell me what you need and I’ll make a VM”
• “My VPS runs a custom compiled LAMP setup”
• “A server, what do I need that for?”
Let’s get you up and running…
Bring order to chaos
Three common ways to do thisand all three are horrible…
1. Setup script
1. Setup script
• Special maintenance!
• Different to production!
• Windows or Linux?
2. The über README
2. The über README
• Extremely prone to user error!
• Unlikely to keep it up to date!
• Very time consuming!
• Windows or Linux?
3. “Good luck, have fun”
3. “Good luck, have fun”
• Extremely prone to user error!
• Extremely time consuming!
• Extremely frustrating!
• Your developer will hate you…
Downsides• Not repeatable
• Not verifiably correct
• Not isolated
• Difficult to understand
• Slow
What is Vagrant?
“A tool for creating, managing and distributing portable development environments”
- Mitchell Hashimoto (creator of Vagrant)
What is Vagrant?
• Command line tool
• Creates virtual machines
• Handles networking and shared folders
• Supports provisioning
What problems does it solve?
• Repeatable & verifiably correct
• Isolated
• Understandable
• As fast as possible
What problems does it solve?
• Works on Mac, Windows and Linux
• Works with VirtualBox, VMware and many more
How does it work then?It’s magic, it really is…
“Vagrant reads a Vagrantfile and builds a virtual machine based on a template called a box”
- Mitchell Hashimoto (creator of Vagrant)
Vagrantfile
“The primary function of the Vagrantfile is to describe the type of machine required for a project, and how to configure and provision these machines.”
http://docs.vagrantup.com/v2/vagrantfile/index.html
Vagrantfile
Vagrant::configure("2") do |config|!! config.vm.box = "precise32"!! config.vm.box_url = “http://.../precise32.box”!! config.vm.hostname = "vagrant.localhost"!!! config.vm.network :private_network, ip: "192.168.99.100"!end
Virtual machine
• Isolated environment
• Any operating system
• Any installed software
• Project specific configuration and versions
Boxes
“Boxes are the skeleton from which Vagrant machines are constructed. They are portable files which can be used by others on any platform that runs Vagrant to bring up a working environment.”
http://docs.vagrantup.com/v2/boxes.html
Boxes
• Pre-installed OS
• May contain pre-installed software
• Custom boxes can be made
Provisioning
Provisioning
“Provisioners in Vagrant allow you to automatically install software, alter configurations, and more on the machine as part of the vagrant up process.”
http://docs.vagrantup.com/v2/provisioning/index.html
Provisioning• Shell
• Ansible
• Chef
• Puppet
• Docker
• Salt
ProvidersEnabling Vagrant to do its job
Providers
“While Vagrant ships out of the box with support for VirtualBox, Vagrant has the ability to manage other types of machines as well. This is done by using other providers with Vagrant.”
https://docs.vagrantup.com/v2/providers/index.html
Providers• VirtualBox
• VMware
• AWS
• Rackspace
• Digital Ocean and many more…
Change providers dynamically
vagrant up --provider=vmware_fusion
vagrant up --provider=digital_ocean
Does this really make a developers life easier?
YES!
Old situation
• Setup script
• The über README file
• “Good luck, have fun” or any other manual way of configuring…
Vagrant is more like…
Get started with a Vagrant project
git clone repository.git folder!cd folder!vagrant up
What did Vagrant do in the background?
The vagrant up command• Check if the box is already downloaded
• If not, download the box
• Start the VM
• Set up synced folders
• Set up networking
• Start provisioning
Your new VM is ready
vagrant ssh
vagrant halt
vagrant destroy
Your new VM is ready• Some examples of what ‘ready’ means:
• Nginx installed
• PHP installed
• MySQL installed
• WordPress installed
• Database imported
• wp-config.php file set up
From development and testing to production
Using Vagrant to its full potential
Vagrantfile in version control
• Commit your Vagrantfile
• Share it with all developers
• Commit a change, all developers benefit
Share the provisioning
• Provisioning files into version control as well
• Production server shares the provisioning files
• Use parameters/flags for differences
• Change one, all environments will change
… and this is only the beginning
Advanced use casesNow we’re talking!
Plugin testing
• Stable version
• Development version
• Combine those two on stable/dev WordPress
• Four local websites per plugin
Multiple PHP version testing
• One Vagrantfile
• Multiple machines
• Different PHP versions
• One shared set of files
• One databasehttp://wordpress.org/about/stats/
Integrate useful tools
• WP-CLI
• Xdebug
• WebGrind
• REDIS
• Memcache
• Your own dotfiles
All going a little too fast?No worries
Vagrant has great documentation
• http://docs.vagrantup.com/v2/
• Plenty of examples
• Great pointers to providers and provision resources
• Vagrant is the latest trend
Varying Vagrant Vagrants
Varying Vagrant Vagrants• https://github.com/10up/varying-vagrant-vagrants
• Ready to use Vagrant setup
• Really easy to expand
• Quickly launch new local development websites
• Automatically installs: WP-CLI, Nginx, MySQL, PHP-FPM, Memcache, Xdebug, Imagemagick, PHPunit, Composer, NodeJS, Grunt, WebGrind and much, much more, all on one Ubuntu 12.04 VM.
Let’s make the world a better place for developers
!
Start using Vagrant
Photo credits1. http://www.flickr.com/photos/tinali778/2947963220/
2. http://www.flickr.com/photos/naan/2948047370/
3. http://www.flickr.com/photos/riebart/4466482623/
4. http://www.flickr.com/photos/55915190@N00/2302651444/
5. http://www.flickr.com/photos/l2f1/4895151918/
6. http://www.flickr.com/photos/basykes/490907537/
7. http://www.flickr.com/photos/whiskeytango/2098182380/
8. http://www.flickr.com/photos/chr1sp/5942681564/
9. http://www.flickr.com/photos/5wa/6109494115/
10.http://www.flickr.com/photos/msimdottv/4339697089/