hexo+travis-ci自动构建并部署

这两天一直在查阅travis-ci自动构建的资料,在次以作记录

需求

Hexo是一个基于Node.js的博客框架,从模板、主题再到插件应有尽有,写好文章后可以得到一个静态整站,对于像个人博客这种更新需求不大的网站是再适合不过了。个人是将博客源文件放在了github,目前国内也有gitee也可以托管博客内容,所以就有了以下需求:

  • 将博客托管在giteegithub
  • 推送github源文件时生成博客静态内容并同步到giteegithub
  • 推送github源文件时也希望将构建的静态文件同步到个人服云务器

在网上查查阅了很多资料,大部分是将博客源文件和托管仓储库放置在一起,使用不同的分支进行管理,但是个人不希望将源文件公开,怎么办?无巧不成书,2019年github私有仓库不再收费,并且私有库数量不限,正好解决我的问题。详情查看:github传送门

使用travis-ci构建

Travis CI 提供的是持续集成服务(Continuous Integration,简称 CI)。目前有两个版本:

  • travis-ci.org: 应该是旧版本,用于构建github公有项目,
  • travis-ci.com:新版本,提供公有和私有项目的构建,貌似github可以创建私有项目后travis-ci也可以创建私有持续集成服务了,本章后节都是使用的私有服务

持续集成

持续集成指的是只要代码有变更,就自动运行构建和测试,反馈运行结果。确保符合预期以后,再将新代码”集成”到主干。

持续集成的好处在于,每次代码的小幅变更,就能看到运行结果,从而不断累积小的变更,而不是在开发周期结束时,一下子合并一大块代码。

开始使用Travis CI

  1. travis-ci.com使用github账号注册
  2. 接受Travis CI的授权。您将被重定向到GitHub。
  3. 单击绿色的激活按钮,然后选择要与Travis CI一起使用的存储库。
  4. 将.travis.yml文件添加到存储库中,告诉travis ci该怎么做。
  5. 由于我们要链接gitee和个人服务器,所以我这里需要配置SSH,如果不配置ssh可以思考下怎么推送代码到gitee?

配置ssh

配置ssh的目的时为了将代码推送到gitee和个人云服务器,可以把travis-ci自动构建时所使用的容器类比成我们自己的电脑,平时我们自己电脑推送代码到giteegithub就需要配置ssh。

点击setting进入到页面底部,添加个人私钥。

travis-ci构建设计思路

  • 在推送源代码到github是出发travis-ci自动构建
  • 在构建脚本中将生成的静态页面推送到gitee.iogithub.io和个人云服务器

推送代码到远程仓库

使用git push推送到github时,travis-ci会触发自动构建,构建时按照.travis.yml文件配置的脚本内容执行。
下面是推送后在travis-ci控制面板看到的:

travis-ci推送到远程服务器

待补充。。。

我的.travis.yml

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
language: node_js
node_js: stable #设置相应的版本
# cache:
# apt: true
# directories:
# - node_modules # 缓存不经常更改的内容
addons:
ssh_known_hosts:
- github.com
- 192.30.253.113
- gitee.com
- 120.55.226.24
install:
- npm install gulp -g #安装gulp压缩
- npm install #安装hexo及插件
script:
- hexo clean #清除
- hexo g && gulp #生成 && gulp 暂时不用压缩
# - ./deploy.sh
after_script:
- git config --global user.name 'idrools'
- git config --global user.email 'zxh877027287@gmail.com'
- git remote set-url --add origin git@gitee.com:idrools/idrools-blog.git
- git pull
- git push
- git clone git@github.com:idrools/idrools.github.io.git idrools_github_io #克隆github页面
- git clone git@gitee.com:idrools/idrools.git idrools_gitee_io #克隆gitee仓库页面
- yes
- cp -rf public/. idrools_github_io/ #覆盖掉托管服务静态内容
- cp -rf public/. idrools_gitee_io/ #覆盖掉托管服务静态内容
- ls
- cd idrools_github_io
- git add .
- git commit -am 'auto push github' #推送到github
- git push
- cd ..
- cd idrools_gitee_io
- git add .
- git commit -am 'auto push gitee' #推送到gitee
- git push
branches:
only:
- master
notifications:
email:
- idrools007@gmail.com
- zxh877027287@gmail.com
on_success: change
on_failure: always