原文发表在使用Travis CI自动部署Hexo
前两天了解到了一个有趣的概念叫持续集成:
持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。许多团队发现这种方法可以显著减少集成引起的问题,并可以加快团队合作软件开发的速度。这篇文章简要介绍了持续集成的技巧和它最新的应用。
然后想到我的博客也恰好满足这样的需求,因为我的博客一旦有了修改,就必须要重新build并且部署,那么能不能用持续集成的思想来改造我部署博客的流程呢?
在这样的指导思想下,我完成了上一篇文章:VPS搭配Github Webhook实现Hexo自动发布,而今天我要介绍一下,在没有VPS的情况下,如何更方便的配置自己的持续集成的博客
<!-- more -->
Travis CI是在软件开发领域中的一个在线的,分布式的持续集成服务,用来构建及测试在GitHub托管的代码。这个软件的代码同时也是开源的,可以在GitHub上下载到,尽管开发者当前并不推荐在闭源项目中单独使用它。
它提供了多种编程语言的支持,包括Ruby,JavaScript,Java,Scala,PHP,Haskell和Erlang在内的多种语言。许多知名的开源项目使用它来在每次提交的时候进行构建测试,比如Ruby on Rails,Ruby和Node.js。
2012年,Travis CI 决定进行募资以支持后续的开发,在这次募资活动中,许多重量级的科技公司给予了资助。
需要注意的是几个特性:
- 只支持Github
- 支持JavaScript
- 开源,免费
然后介绍一下它的原理:
Travis CI会在你每一次提交之后生成一个虚拟机来执行你事先安排好的build任务,你可以调整这个虚拟机的软件环境,甚至能执行sudo
来进行apt-get install
。
我们知道,Hexo的命令非常简单,一个hexo d -g
就可以搞定。困难之处在于,Travis CI并没有对你的库进行push操作的权限。如果直接将私钥放在自己的开源库之中,这无异于将自己的代码库提交权限开放给了所有的Github使用者。所以,为了保护自己,我们需要采取一些配置操作。
感谢Hexo作者tommy351提供的操作流程,原文可见于用 Travis CI 自動部署網站到 GitHub
参见使用Github SSH Key以免去Hexo部署时输入密码
需要注意的是,这个SSH key不应成为你账号的全局SSH key*(因为这样Travis CI就获得了你所有代码库的提交权限,这是不正确的)*,而应该添加至https://github.com/username/ropename/settings/keys,这样,你就控制了Travis CI的权限。
下面的操作需要事先配置好gem环境,如果没有可以尝试使用强大且配置项丰富的在线IDE应用——Cloud9。
gem install travis
需要输入Github账号和密码
travis login --auto
正确生成后你会得到两个文件,一个叫ssh_key
,一个叫ssh_key.pub
。刚才我们将ssh_key.pub
添加到了github,下面我们要加密ssh_key
这个私钥并且上传到Travis。
travis encrypt-file ssh_key --add
然后Travis的客户端会自动检测当前目录中的git信息,并且添加到.travis.yml
中去。在进行此步操作前,目录下要先存在.travis.yml
文件,否则会报错。
在当前目录下新建文件ssh_config
,内容为
Host github.com
User git
StrictHostKeyChecking no
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
然后指定openssl解密后的生成位置,修改Travis自动插入的解密指令(不要照抄,注意修改密钥)
- openssl aes-256-cbc -K $encrypted_26b4962af0e7_key -iv $encrypted_26b4962af0e7_iv
-in travis.enc -out ~/.ssh/id_rsa -d
紧跟那条解密指令,换行输入:
- chmod 600 ~/.ssh/id_rsa
注意yml格式,短杠后面的空格不能省略。
紧跟上一步操作,换行输入:
- eval $(ssh-agent)
- ssh-add ~/.ssh/id_rsa
将之前创建的ssh_config复制到Travis的虚拟机中去,输入:
- cp .travis/ssh_config ~/.ssh/config
然后制定git使用者信息:
- git config --global user.name "username"
- git config --global user.email [email protected]
之前的所有操作都只是为了让Travis CI拥有push权限,下面我们开始进入到真正的Build配置当中。
之前我们用到了一个名为.travis.yml
的文件,跟build有关的所有设置都在这个文件里面,下面的操作都在这个文件当中进行。
在文件中添加如下代码:
```
language: node_js
node_js:
- '0.10'
```
在文件中添加如下代码:
branches:
only:
- blog
差点忘了讲- -,本方案只适用于用github来托管自己自己的hexo目录的用户。这里的分支应该使用包含有.md文档的那个分支。
首先在虚拟机中安装Hexo:
install:
- npm install hexo@beta -g
- npm install
然后执行Hexo的渲染操作
script:
- hexo clean
- hexo d -g
到这里,你的Travis CI的持续集成已经配置完毕了,最后的.travis.yml
文件内容可以参考.travis.yml样例。
1
yanke 2015-02-12 22:38:44 +08:00
消灭零回复。
|
3
yanke 2015-02-12 23:38:11 +08:00
大家估计都在用 jekyll,Github免编译部署。
|
5
charlesxiong 2015-12-22 16:08:16 +08:00
Hexo 明显要比 JekyII 好用啊
|
6
ybmimo 2016-04-16 15:22:17 +08:00
如果说我想 master 放源文件,
gh-pages 分支弄成编译后的该怎么实现? |