利用travis进行heroku部署

好久么有写东西了,总感觉一直忙的跟狗一样,身心俱疲,但是又不知道到底在忙什么。

最近实践了一下利用travis部署到heroku的流程,又莫名其妙的尝试了新的编辑器atom,安装了markdown-preview-plus插件,当然要来写点东西试一试, 也不知道英文的linux下到底是什么问题,webstorm和sublime居然不能打中文,所以之前每次写东西都要去简书边预览边写。

atom还是很好用的,可能因为我(后)天生就对JS写的东西有好感,记不住快捷键的我,不能徒手写html的我还是需要IDE的帮助,atom就用来写点简单的东西吧。

travis和heroku都有自己的命令行工具(CLI),尤其travis cli用起来总比徒手写.travis.yml方便许多

安装travis-cli

travis-cli是ruby写的,所以安装之前需要安装ruby

1
sudo apt-get install ruby-full

详细的安装教程可以看官方的这个https://github.com/travis-ci/travis.rb#installation

1
gem install travis -v 1.8.2 --no-rdoc --no-ri

安装heroku-cli

heroku-cli也是ruby写的……有点不懂为啥都喜欢用ruby写cli?js不是挺好的吗,有啥cli是npm install -g 解决不了的吗?…
具体的安装教程看

1
wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh

登陆

1
travis login
1
heroku login

.travis.yml

在项目的根目录下执行以下命令,将会生成.travis.yml文件

1
2
travis init
travis setup heroku

注意:一定要通过命令行登陆heroku,否则travis会卡住,也不报错啥的反正就一直没反应

打开.travis.yml文件可以看到除了基本的信息之外,还有deploy相关的信息,其中比较让人疑惑的是api_key,这个api_key其实是你的heroku账户的token加密之后的一个字符串。heroku的token看起来是一个类似uuid5的字符串,可以通过以下命令查看

1
heroku auth:token

有一个问题我不太明白的是,之前用travis加密文件travis encrypt-file path/of/file --add的时候,可以在travis网站对应repo的setting里看到多出的环境变量,用来加密的key value,然后需要用openssl命令来解密。

但加密heroku的token后,并没有生成任何新的环境变量,而且也无需在.travis.yml中执行解密的相关操作。

那么用来加密的key value到底存在哪里了呢?!

为什么要在travis做部署,而不直接利用heroku提供的github自动部署?

首先,heroku似乎不能跑测试…

其实,大多数简单的项目其实都可以用github的方式,如果需要编译和生成的,都在package.json里添加prepublish脚本即可

我这次又是搞了一个奇怪的事情,做了一个前后端分离项目,后端提供RESTful API,前端是SPA,但是又想把SPA和API放在同一个服务器,而且分了两个repo来放前端和后端。

所以我的需求是,当前端或后端push之后,trigger travis去把前后端都克隆下来,并且编译和Build前端代码,放到指定文件夹,然后部署。