社交是每一个人的欲望,而单从一个技术人员角度来说,创建本身的技术博客也是一种重要的外界沟通。blog中的每篇博文均可以是本身一段时间的技术总结(最重要的是可以有规律的坚持下去)。 html
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的使用者,所以,咱们须要一些加密操做。
brew install ruby
复制代码
首先本机安装ruby。
$ 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里面,以下:
$ gem install travis // 安装travis命令行工具
$ travis login --auto // 命令行登陆travis
复制代码
$ travis encrypt-file ssh_key --add
复制代码
这里假设private key的文件名为ssh_key
,travis会加密产生ssh_key.enc
,并自动在.travis.yml
的before_install
位置自动插入解密指令。
注意:这里在windows系统下使用travis encrypt-file
命令加密生成的ssh_key.enc
在travis执行时会在解密密钥时失败。具体缘由在travis的issue中能够查看File decryption fails on Windows。最简单的作法就是在linux或mac环境下生成该文件。
首先咱们在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
复制代码