用Travis CI自动部署GitHub项目
介绍一套免费持续集成构建部署解决方案。
本文以部署基于Node.js的静态博客框架hexo为例
源码地址:zylele/blog
¶Travis CI
顾名思义,Travis CI是一个持续集成(Continuous integration,简称CI)的工具。它可以在公共的Github仓库上免费使用。
Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜。目前大多数的github项目都已经移入到Travis CI的构建队列中,据说Travis CI每天运行超过4000次完整构建。
¶构建
¶在Github建立代码库
首先,要在Github上建立一个代码仓库,要将自己hexo博客push到上面。hexo项目作为运行部署的项目,然后Github Page的项目作为部署的目标项目。
¶开启Travis CI
第二步,我们需要有一个Travis CI的账号,直接进入Travis CI官网,用自己的Github账号授权登录即可。
然后可以看到当前账号的所有代码仓库,接下来将博客项目的状态设置为启用。
¶创建SSH key
如果你的github已经配置过SSH了,可以省略这一步,或者你想缩小权限控制粒度,可继续执行这一步骤。
第三步,创建一个部署在Travis CI上面的SSH key利用这个SSH key可以让Travis CI向我们自己的项目提交代码。
1 | $ ssh-keygen -t rsa -C "youremail@example.com" |
得到id_rsa.pub
和id_rsa
,然后将有pub
后缀的配置到Deploy key。
记得要将Allow write access
的选项选上,这样Travis CI才能获得push代码的权限。
¶加密私钥
刚才讲公钥文件配置好了,然后就要配置私钥文件,在hexo项目下面建立一个.travis
的文件夹来放置需要配置的文件。
首先要安装travis命令行工具(如果在国内的网络环境下建议安装之前先换源)。
1 | $ gem install travis |
用命令行工具登录:
1 | $ travis login --auto |
然后将刚刚生成的id_rsa
复制到.travis
文件夹,用命令行工具进行加密:
1 | $ travis encrypt-file id_rsa --add |
这个时候会生成加密之后的秘钥文件id_rsa.enc
,原来的文件id_rsa
就可以删掉了。
这时可以看到终端输出了一段
openssl aes-256-cbc -K $encrypted_xxxxxxxxxxx_key -iv $encrypted_xxxxxxxxxxx_iv
这样格式的信息,这是travis用来解密id_rsa.enc
的key,先保存起来,后面配置.travis.yml
会用到它。
为了让git默认连接SSH还要创建一个ssh_config
文件。在.travis
文件夹下创建一个ssh_config
文件,输入以下内容:
1 | Host github.com |
现在进入travis CI设置页面
可以看到刚刚travis命令行生成的解密key
顺便把上面的开关打开
这样,当向项目push代码的时候travis CI就会根据.travis.yml
的内容去部署我们的项目了。
¶.travis.yml
最后就要配置.travis.yml
。在项目的根目录创建.travis.yml
文件。
1 | # 配置语言及相应版本 |
好了现在只要向项目push代码就可以触发部署了,进入https://travis-ci.org就可以看到部署的过程了。
¶后记
在部署了一遍之后发现,运行npm install
安装node的库时候占据了部署的很大一部分时间,这里有一个技巧,可以将node_modules
缓存起来,这样可以节省部署的时间。
1 | # node_modules 缓存 |
¶最后
.travis.yml
的完整代码可以看我的.travis.yml文件。博客的完整代码可以看这里。