如何更'懒'的用Hexo和Travis CI搭建自己的blog

本文介绍了如何使用Hexo搭建技术博客,并通过Travis CI实现多平台无缝更新及自动化部署到GitHub的过程。

前言

社交是每个人的欲望,而单从一个技术人员角度来讲,建立自己的技术博客也是一种重要的外界沟通。blog中的每篇博文都可以是自己一段时间的技术总结(最重要的是能够有规律的坚持下去)。

Anyway!首先我们来看看一个新手在第一次尝试搭建技术博客时可能会选择的技术方案:

  • wordpress + 云主机 + 插件(付费:目前aliyun 1核1G 330RMB/year左右,学生价120RMB/year左右,腾讯云类似)
  • jekyll + github pages + markdown(免费: github默认支持jekyll,可以直接将原生文件放到github上,github自动编译)
  • hexo + github pages + markdown(免费: 操作简单)

blog本质上是静态网站(无需太多交互),核心是文章内容,因此上面的3种方式都可以自行选择。目前我搭建的方式是第三种。
ok,选择好了方式,第一步肯定是在本地电脑搭建hexo。具体的搭建方式网上一大堆,这里我就不讲解如何搭建了,不过我建议直接看官方文档即可,因为官方文档肯定是稳定最新的。

另外,在这里强烈自荐我合作的hexo-theme-skapp,欢迎star和issue

前提讲完了,开始切入重点,我们在使用一段时间的hexo之后,会发现一个非常蛋疼的问题:
每次想要更新博客,都需要到安装hexo的电脑上去更新,这真是太麻烦了...
也就是说,最基础的跨电脑都会有困难。

解决方案

首先,我们先来分析一下hexo:hexo本质上是一个解析markdown文件的node程序,作用在于将markdown转换成对应的HTML文件,并提供了很多实用的封装命令。

我们简单想一想,是不是可以直接版本控制来维护我们的blog程序,而github本身不就是一个版本控制的网站吗?

那么我们可以将hexo作为blog代码库的一个分支来同步到github上面(注意配置下.gitignore文件,ignore不需要维护的文件)。这样,一旦我们希望用另外一台电脑来更新博客,我们只需要将blog的代码库检下来即可。这样多台电脑就相当于多个开发共同开发维护blog代码库。

但是,这样用着一段时间后,仍然会存在一些小问题。
先举个例子:比如我有一台win10的thinkpad笔记本,还有一台macbook pro,公司里面使用的ubuntu 16.04LTS. 这3台电脑我都会维护更新我的博客。首先,这3台电脑都git clone了blog代码库。然后,我们npm install了node的依赖包,这个时候我们可能会发现某些系统下hexo程序运行报错(对,没错我说的就是windows,比如node最基本的node-gyp在win下安装就很麻烦),虽然,我们可以通过各种补丁等等东西解决了系统问题,但是这个仍然非常的麻烦啊!

那能不能在多个系统的电脑上更新博客,而不需要考虑系统的兼容性问题?

下面就DuangDuangDuang的介绍下travis CI,travis CI是一种构建和测试的自动化工具。从其简称CI就可以理解,Travis CI提供的是持续集成服务(Continuous Integration).它可以绑定github上面的项目,只要有新的代码提交,就会自动抓取,然后travis会提供一个运行环境,执行测试,完成构建并部署到服务器。

通过travis CI,我们每次只要更新markdown文件,网站内容就能自动更新了。在这里就不具体的讲如何入门travis CI了,具体学习可以点击travis CI官网或者阮一峰travis CI教程

详细搭建步骤

我们在部署博客时,hexo d就可以搞定,但是问题在于Travis CI本身并没有对github库进行push操作的权限。如果我们直接将密钥直接放在开源库中,则相当于将代码库的提交权限开放给所有github的使用者,因此,我们需要一些加密操作。

1. travis本地环境搭建

brew install ruby 
复制代码

首先本机安装ruby。

2. Deploy Key

$ ssh-keygen -t rsa -C "your_email@example.com"
复制代码

首先通过ssh-keygen生成一个SSH key专门提供给github中blog库使用。在生成SSH key时,将passphrase留空,因为在travis中输入密码比较麻烦。 然后将制作完成的Public key复制到github blog代码库的Deploy key里面,如下:

3. 加密 private key

$ gem install travis // 安装travis命令行工具
$ travis login --auto // 命令行登录travis
复制代码
$ travis encrypt-file ssh_key --add
复制代码

这里假设private key的文件名为ssh_key,travis会加密产生ssh_key.enc,并自动在.travis.ymlbefore_install位置自动插入解密指令。
注意:这里在windows系统下使用travis encrypt-file命令加密生成的ssh_key.enc在travis执行时会在解密密钥时失败。具体原因在travis的issue中可以查看File decryption fails on Windows。最简单的做法就是在linux或mac环境下生成该文件。

4. 设定 .travis.yml

首先我们在blog根目录下建立.travis文件夹和.travis.yml文件。 然后我们将生成的ssh_key.enc移动到本地blog项目的.travis文件夹下面,并在.travis目录下创建ssh_config文件,然后配置Travis上的SSH设定。

Host github.com
  User git
  StrictHostKeyChecking no
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes
复制代码

因为我们刚刚修改了ssh_key.enc的位置,因此我们需要修改.travis.yml中刚刚插入的解密指令(不要照抄,不同的环境修改不一样)

- openssl aes-256-cbc -K $encrypted_06b8e90ac19b_key -iv $encrypted_06b8e90ac19b_iv -in .travis/ssh_key.enc -out ~/.ssh/id_rsa -d
复制代码

该命令会利用openssl来解密private key,并将解密后的文件放在 ~/.ssh/id_rsa,接着我们指定该档案的权限:

- chmod 600 ~/.ssh/id_rsa
复制代码

然后将private key加入到系统中:

- eval $(ssh-agent)
- ssh-add ~/.ssh/id_rsa
复制代码

接下来将ssh_config文件复制到~/.ssh目录下:

- cp .travis/ssh_config ~/.ssh/config
复制代码

为了使git操作能够正常进行,我们需要事先设定git的使用者讯息:

- git config --global user.name "Bruce"
- git config --global user.email "your email address"
复制代码

最后的结果大概如下:

language: node_js
node_js: stable
cache:
  directories:
  - node_modules
before_install:
  # Decrypt the private key
  - openssl aes-256-cbc -K $encrypted_0c8703cca11f_key -iv $encrypted_0c8703cca11f_iv -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d
  # Set the permission of the key
  - chmod 600 ~/.ssh/id_rsa
  # Start SSH agent
  - eval $(ssh-agent)
  # Add the private key to the system
  - ssh-add ~/.ssh/id_rsa
  # Copy SSH config
  - cp .travis/ssh_config ~/.ssh/config
  # Set Git config
  - git config --global user.name "Bruce"
  - git config --global user.email "444048170@qq.com"
install:
  - npm install
script:
  - hexo g
after_success:
  - hexo deploy
branches:
  only:
    - hexo
复制代码

reference

1.tommy351,continuous-deployment-to-github-with-travis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值