V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Xuanwo
V2EX  ›  分享发现

使用 Travis CI 自动部署 Hexo

  •  
  •   Xuanwo · 2015-02-12 14:23:00 +08:00 · 8234 次点击
    这是一个创建于 3353 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文发表在使用Travis CI自动部署Hexo


    前言

    前两天了解到了一个有趣的概念叫持续集成:

    持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。许多团队发现这种方法可以显著减少集成引起的问题,并可以加快团队合作软件开发的速度。这篇文章简要介绍了持续集成的技巧和它最新的应用。
    然后想到我的博客也恰好满足这样的需求,因为我的博客一旦有了修改,就必须要重新build并且部署,那么能不能用持续集成的思想来改造我部署博客的流程呢?

    在这样的指导思想下,我完成了上一篇文章:VPS搭配Github Webhook实现Hexo自动发布,而今天我要介绍一下,在没有VPS的情况下,如何更方便的配置自己的持续集成的博客

    <!-- more -->

    Travis CI介绍

    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

    Travis CI配置

    我们知道,Hexo的命令非常简单,一个hexo d -g就可以搞定。困难之处在于,Travis CI并没有对你的库进行push操作的权限。如果直接将私钥放在自己的开源库之中,这无异于将自己的代码库提交权限开放给了所有的Github使用者。所以,为了保护自己,我们需要采取一些配置操作。

    感谢Hexo作者tommy351提供的操作流程,原文可见于用 Travis CI 自動部署網站到 GitHub

    生成SSH Key

    参见使用Github SSH Key以免去Hexo部署时输入密码
    需要注意的是,这个SSH key不应成为你账号的全局SSH key*(因为这样Travis CI就获得了你所有代码库的提交权限,这是不正确的)*,而应该添加至https://github.com/username/ropename/settings/keys,这样,你就控制了Travis CI的权限。

    加密私钥

    下面的操作需要事先配置好gem环境,如果没有可以尝试使用强大且配置项丰富的在线IDE应用——Cloud9

    安装Travis CI的命令行工具

    gem install travis
    

    登陆Travis CI

    需要输入Github账号和密码

    travis login --auto

    加密私钥并上传至Travis

    正确生成后你会得到两个文件,一个叫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设置

    在当前目录下新建文件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

    修改git信息

    将之前创建的ssh_config复制到Travis的虚拟机中去,输入:

    - cp .travis/ssh_config ~/.ssh/config

    然后制定git使用者信息:

    - git config --global user.name "username"
    - git config --global user.email [email protected]

    Build配置

    之前的所有操作都只是为了让Travis CI拥有push权限,下面我们开始进入到真正的Build配置当中。
    之前我们用到了一个名为.travis.yml的文件,跟build有关的所有设置都在这个文件里面,下面的操作都在这个文件当中进行。

    指定环境

    在文件中添加如下代码:
    ```
    language: node_js

    node_js:
    - '0.10'
    ```

    指定分支

    在文件中添加如下代码:

    branches:
    only:
    - blog

    差点忘了讲- -,本方案只适用于用github来托管自己自己的hexo目录的用户。这里的分支应该使用包含有.md文档的那个分支。

    Hexo配置

    首先在虚拟机中安装Hexo:

    install:
    - npm install hexo@beta -g
    - npm install

    然后执行Hexo的渲染操作

    script:
    - hexo clean
    - hexo d -g

    到这里,你的Travis CI的持续集成已经配置完毕了,最后的.travis.yml文件内容可以参考.travis.yml样例

    更新日志

    • 2015年02月07日 首次发布,感谢Tommy351
    7 条回复    2016-12-22 14:09:42 +08:00
    yanke
        1
    yanke  
       2015-02-12 22:38:44 +08:00
    消灭零回复。
    Xuanwo
        2
    Xuanwo  
    OP
       2015-02-12 23:04:44 +08:00
    @yanke 笑哭- -,V2EX上都不怎么用Hexo的么?
    yanke
        3
    yanke  
       2015-02-12 23:38:11 +08:00
    大家估计都在用 jekyll,Github免编译部署。
    cszhiyue
        4
    cszhiyue  
       2015-03-10 18:18:17 +08:00
    @Xuanwo v2ex很多人用hexo
    charlesxiong
        5
    charlesxiong  
       2015-12-22 16:08:16 +08:00
    Hexo 明显要比 JekyII 好用啊
    ybmimo
        6
    ybmimo  
       2016-04-16 15:22:17 +08:00
    如果说我想 master 放源文件,
    gh-pages 分支弄成编译后的该怎么实现?
    jwangkun
        7
    jwangkun  
       2016-12-22 14:09:42 +08:00
    @ybmimo 操作一样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1312 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:36 · PVG 01:36 · LAX 10:36 · JFK 13:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.