使用 Travis CI 自动部署 Hexo - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Xuanwo
V2EX    分享发现

使用 Travis CI 自动部署 Hexo

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

    原文发表在使用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     Solana     5078 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 79ms UTC 05:46 PVG 13:46 LAX 21:46 JFK 00:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86