如何更'懒'的用Hexo和Travis CI搭建本身的blog

前言

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

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。具体的搭建方式网上一大堆,这里我就不讲解如何搭建了,不过我建议直接看官方文档便可,由于官方文档确定是稳定最新的。node

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

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

解决方案

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

咱们简单想想,是否是能够直接版本控制来维护咱们的blog程序,而github自己不就是一个版本控制的网站吗?npm

那么咱们能够将hexo做为blog代码库的一个分支来同步到github上面(注意配置下.gitignore文件,ignore不须要维护的文件)。这样,一旦咱们但愿用另一台电脑来更新博客,咱们只须要将blog的代码库检下来便可。这样多台电脑就至关于多个开发共同开发维护blog代码库。ubuntu

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

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

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

经过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

相关文章
相关标签/搜索