TravisCI加密配置文件并自动部署Hexo

前言

Travis-CI是一个可以将Github上的代码做持续集成的网站。
持续集成和版本控制相关联, Git就是一种版本控制, 可以提交, 也可以下载, 就像网盘一样。
持续集成就是你的每一次提交上传, 服务器都会自动对你提交后的代码进行编译, 单元测试等一系列行为, 并告知你是否成功。

阅读条件

  1. 至少一次手动hexo d部署过GitHub Page博客
  2. 熟悉Linux基本命令
  3. 熟练Git基本命令

准备环境

准备虚拟机

  1. 使用的是CentOS7虚拟机, 用户名root, 密码root

  2. 网络连接选择桥接模式, 关于桥接模式可以看我的另一篇文章。

  3. Windows网络环境选择专用网络

  4. Windows10需要在网络适配器属性界面, 添加VMware Bridge Protocol协议。

  5. 使用Xshell(发送命令)和FileZilla(传输文件)在Windows上连接虚拟机. 两者都是通过ssh连接的, 在软件中配置好虚拟机的IP地址和账号密码root即可。

准备Travis-CI帐号

Travis-CI支持GitHub帐号登录。
配置教程参考使用 Travis 自动部署 Hexo 到 Github 与 自己的服务器

准备Git并clone

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. 修改yum源 为 网易源
yum install -y wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum clean all
yum makecache
# 2. 安装git
yum install -y git
# 3. 配置git
git config --global user.name "Ahaochan"
git config --global user.email "844394093@qq.com"
# 3. clone项目到/opt文件夹下
cd /opt
git clone https://github.com/Ahaochan/Ahaochan.github.io.git
cd Ahaochan.github.io/
# 4. 新建并切换到source分支
git branch source
git checkout source
# 5. 删除所有文件, 为hexo源文件腾出位置
rm -rf *

准备Travis-CI 客户端

1
2
3
4
5
6
7
8
9
10
# 1. 安装gcc和ruby环境
yum install -y gcc ruby ruby-devel
# 2. 改为国内gem源
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
# 3. 安装Travis
gem install travis
# 4. 登录Travis, 并输入账号密码, 注意使用的是 travis-ci.org 或 travis-ci.com
# org 现在已迁移到 com, 发送标题 Open Source Migration Beta Testing 邮件到 support@travis-ci.com 即可开通 Beta 迁移功能.
# https://docs.travis-ci.com/user/migrate/open-source-on-travis-ci-com/#existing-open-source-repositories-on-travis-ciorg
travis login --com

将本地的hexo移动到服务器

请确保服务器的项目分支已经切换到source
通过FileZilla将本地的hexo文件夹部署到服务器。
为了节省GitHub空间, 我只将以下文件加入仓库中。

加密next.yml

我将hexo/_config.ymltheme/next/_config.yml的内容统一复制到source/_data/next.yml中。
配置文件包含太多敏感信息, 所以我进行了加密.
Travis-CI提供了加密策略, 只要加密后, 就只有Travis-CI能解密, 就算是加密的人也不能解密。具体可以看我翻译的Travis-CI文档。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 确保在source分支下操作
git checkout source
# 2. 进入next.yml所在文件夹
cd source/_data
# 3. 进行加密(如果想要加密多个文件, 需要将多个文件打包, 再在Travis-CI解压)
travis encrypt-file next.yml
# 4. 在.travis.yml中加入配置, 注意要指定source/_data/next.yml路径. (这里不要复制我的key, 每个人都不一样)
vim /opt/Ahaochan.github.io/.travis.yml
before_install:
- openssl aes-256-cbc -K $encrypted_3873d9e40d23_key -iv $encrypted_3873d9e40d23_iv -in source/_data/next.yml.enc -out source/_data/next.yml -d
# 5. 在.gitignore添加一行, 不提交next.yml
vim /opt/Ahaochan.github.io/.gitignore
source/_data/next.yml

给予Travis推送GitHub的权限

网上很多都是生成ssh公钥, 或者直接使用git push -u origin master的方式部署。
我参考的使用 Travis 自动部署 Hexo 到 Github 与 自己的服务器配置了REPO_TOKEN, 但是没有物尽其用。
这里将REPO_TOKEN做了替换。

1
2
3
4
5
# next.yml
deploy:
- type: git
repo: https://REPO_TOKEN@github.com/Ahaochan/Ahaochan.github.io.git
branch: master
1
2
3
4
# .travis.yml
before_install:
# 注意要放在解密next.yml文件命令之后
- sed -i "s/REPO_TOKEN/${REPO_TOKEN}/" source/_data/next.yml

从GitHub下载最新模块和主题

为了节省Github空间, 我在.travis.yml配置了很多的下载命令.
详细可以看我的GitHub

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 使用语言
language: node_js
# node版本
node_js: lts/*
# 设置只监听哪个分支
branches:
only:
- source
# 缓存,可以节省集成的时间,这里我用了yarn,如果不用可以删除
cache:
apt: true
yarn: true
directories:
- node_modules
- theme
before_install:
# 配置git
- git config --global user.name "Ahaochan"
- git config --global user.email "844394093@qq.com"
# 由于使用了yarn,所以需要下载,如不用yarn这两行可以删除
- curl -o- -L https://yarnpkg.com/install.sh | bash
- export PATH=$HOME/.yarn/bin:$PATH
# npm模块安装
- yarn global add hexo-cli
- yarn add hexo-asset-image --save
- yarn add hexo-generator-searchdb --save
- yarn add hexo-generator-feed --save
- yarn add hexo-related-popular-posts --save
- yarn add hexo-symbols-count-time --save
- yarn add hexo-generator-sitemap --save
- yarn add hexo-generator-baidu-sitemap --save
- yarn add hexo-deployer-git --save
- yarn add hexo-leancloud-counter-security --save
- yarn add hexo-helper-live2d --save
# next.yml配置文件解密
- openssl aes-256-cbc -K $encrypted_3873d9e40d23_key -iv $encrypted_3873d9e40d23_iv -in source/_data/next.yml.enc -out source/_data/next.yml -d
# 将 GitHub Token 替换到 next.yml 中
- sed -i "s/REPO_TOKEN/${REPO_TOKEN}/" source/_data/next.yml
# next主题下载
- git clone https://github.com/theme-next/hexo-theme-next themes/next
# next主题依赖下载
- git clone https://github.com/theme-next/theme-next-pangu.git themes/next/source/lib/pangu
- git clone https://github.com/theme-next/theme-next-reading-progress themes/next/source/lib/reading_progress
- git clone https://github.com/theme-next/theme-next-fastclick themes/next/source/lib/fastclick
- git clone https://github.com/theme-next/theme-next-jquery-lazyload themes/next/source/lib/jquery_lazyload
- git clone https://github.com/theme-next/theme-next-pace themes/next/source/lib/pace
- git clone https://github.com/theme-next/theme-next-canvas-nest themes/next/source/lib/canvas-nest
- git clone https://github.com/theme-next/theme-next-fancybox3 themes/next/source/lib/fancybox
install:
# 不用yarn的话这里改成 npm i 即可
- yarn
script:
# 配置 LeanCloud
- hexo lc-counter register $leancloud_username $leancloud_password --config source/_data/next.yml
- hexo clean --config source/_data/next.yml
- hexo g --config source/_data/next.yml
- hexo d --config source/_data/next.yml

最后

最后将所有文件git push -u origin source推送到远程的source分支上即可。
如果失败, 可以在 https://travis-ci.org/Ahaochan/Ahaochan.github.io/requests 查看错误信息。

参考资料