虽然甩手将军经常被老婆抱怨:对着电脑的时间比对着老婆的时间都久,但是说起来我倒是一个不太爱带电脑出门的人。归咎其原因,就一个字:
当初带着这个好几公斤重的大铁块每天上下班,到了办公室真的是一把汗,脑力劳动还没开始就先来了一次体力考验。后来我想通了:干嘛要带电脑去办公室。于是我把电脑锁在我的位子上,每天空手上下班,享受了一阵子传说中的work-life-balance,每天回到家就吃吃喝喝玩玩好不快活!
可是这份宁静终究还是被老板的一个电话打破了。某日晚上九点,老板打来说新上线的版本里有一个严重的bug,要紧急修一下。我当时就懵了,工作电脑不在身边,你让我咋修?当时我其实很想说:
但话到嘴边还是缩了,毕竟要下了班过吃吃喝喝玩玩的日子,还得有上班时间挣来的钱才行。一向放荡不羁爱自由的甩手将军瞬间屈服在了老板的淫威之下,赶路去公司修bug,后来忙到十点半才回来。其中修bug用去20分钟,路上一个多小时。。。
从那以后,我痛定思痛,决定给家里的电脑也装上公司的软件,以防万一,随时可以在家里的电脑上操作。但说实话,公司用到的那些乱七八糟的软件包,要装到家里的私用机上来,我心里也是有点膈应。比如那次在家里要装一个ruby的gem包,结果提示版本和公司用的冲突了,试了半天只能作罢。
发生这种事情还是相当烦躁的,程序员在碰到这种“不能装”、“不能用”的问题的时候,很容易陷入死循环,整夜不眠寻找解决方法。但幸好,很多时候问题不难解决,难的是想到要去解决这个问题。不带电脑上下班的办法其实很早就有了!
今日的救星就是Vagrant, VirtualBox和Ansible三款软件。原理其实相当简单,我们可以把整个工作环境虚拟化,并且把这个环境当作代码一样的去管理,做到可在短时间内重复创建。其中Vagrant负责管理虚拟机,VirtualBox负责运行虚拟机,Ansible负责管理虚拟环境里软件的安装配置状态。
Vagrant让我可以一行代码,就把虚拟环境启动,不用再等在电脑前半个小时等系统安装完了。运行在Virtualbox里的虚拟系统和家里的系统完全隔离开来,互不影响,不用再担心软件版本冲突的问题。而Ansible可以将配置环境的工作完全的自动化,我不用在扣着脑门想什么软件还没装,一行命令就自动搞定。
接下来我们来谈谈如何创建这个环境!
首先,我们要确保Vagrant,VirtualBox都在机器上安装好了,安装过程可以参考Vagrant安装指南和VirtualBox安装指南,在这里我就不赘述了。
然后,我们在一个空的文件夹里执行,这会生成一个名为的文件,这个文件描述了虚拟机的各种要求,比如需要什么系统,多少内存,要从宿主上加载哪些文件到虚拟机里。我们的要求很简单:一,启动一个的操作系统;二,加载当前文件夹到虚拟机的里。
如下配置:
Vagrant将根据去下载Ubuntu 16.04 LTS的镜像并在VirtualBox中启动,又根据加载宿主机上的本文件夹到虚拟机的路径。加载后,虚拟机里路径下的文件将和我们文件夹下的文件完全映射,我们不需要进入枯燥的linux命令行环境,就可以在宿主机(Windows或Mac)下用图形界面工具编辑文件。
最后,在虚拟机启动后,Vagrant将把控制权交给Ansible。后者将在里用一个叫做的文件去做安装软件、配置环境的事情。那么,长啥样呢?
这个playbook说白了就是一条条的命令,Ansible把这些命令封装成了比较容易读懂的模块,让程序员安心调用。比如,如果我们要通过apt安装git软件,只需要写上这么一段:
Ansible会自动判断git是否已经安装了,如果没有的话,通过apt去安装git,这比恶心的脚本语言好看多了。Ansible的功能非常强大,小到拷贝文件,大到控制远程集群,你能想到的安装步骤基本都有对应的功能模块。
完成以上配置以后,我们一键就能得到一个完全虚拟隔离的,已经安装好所有所需软件的环境。这些配置全都是已可追溯的代码形式完成,我们可以把它和项目代码一起存在云端的版本控制软件里。以后无论到哪,无论有没有自己的电脑,只要下载了代码,一键,就能开始工作了。
从此以后,我再也不用扛着电脑上下班了!
领取专属 10元无门槛券
私享最新 技术干货