使用 Github 来管理 Hexo 博客源代码,并使用 Travis 来自动部署
背景
目前我的博客是部署到 GitHub 和 Coding,出于某些原因国内百度爬虫不能爬去到 GitHub 相关的内容,所以才需要同时部署到国内 Coding。
但每次写完文章都需要部署到两个地方,还是有点繁琐,刚好之前就听过持续集成和相关服务 Travis,可以用来解决这个问题。下面是具体的配置和步骤,同时也解决了怎么管理博客源码和定制主题源码的问题。
另外 Coding 在去年开始在免费使用其 page 服务的情况下,需要在网站显示有关 Coding 的广告文字。关于如何只在使用 Coding 的服务时才显示那段广告文字,可以查看我博客的源码中的解决方案。
配置和步骤
管理以及定制 Hexo 主题
将主题 Fork 到自己的账号下后,在博客源代码根目录使用 git submodule 将主题的仓库作为子仓库
git submodule add git@github.com:cnu4/hexo-theme-apollo.git themes/apollo
进入主题目录,修改主题后按正常流程 git commit, git push 更新主题的 git 仓库,再到博客根目录 commit 源代码
持续集成
要求:持续部署到 Github 和 Coding
配置
将 Hexo 源代码 push 到 Github 的仓库,我是将博客的仓库的 source 分支作为源代码仓库
登录 travis 并使用 github 登录后开启上述源代码的仓库
安装 travis cli 工具后登录,使用一下命令生成私钥的加密文件,以下是 Mac 环境下的命令
gem install travis
travis login
travis encrypt-file ~/.ssh/id_rsa --add -r /cnu4/cnu4.github.io
以上命令会自动在 .travis.yml 文件的 before_install 中添加解密得到私钥的代码,并生成文件 id_rsa.enc
创建 .travis 文件夹,在里面新建 ssh_config 文件,填入一下内容,避免第一次连接时的询问
1 | Host * |
将 id_rsa.enc 文件移入 .travis 文件夹
下面是 .travis.yml 配置文件
1 | language: node_js |
在 before_install 中先解密得到私钥并放到 .ssh 目录下,接下来的 npm install 安装 hexo,然后就是构建和部署命令了
配置中需要注意:
配置中通过
git: submodules: false使得 travis 不用https的方式处理 git 子模块,否则此时会出现克隆时身份验证不通过的情况通过将代码
git submodule update --init --recursive添加在ssh-add ~/.ssh/id_rsa之后,使用ssh处理子模块注意加密的 ssh 私钥不能有密码保护,也就是创建私钥的时候不要输入密码
接下来写文章后只需要一下命令便可以完成自动部署到 Github 和 Coding
1 | git add . |
新环境
在换了新电脑后,使用以下流程
1 | git clone repo_of_source.git # 克隆源码 |