使用daocloud持续化构建hexo博客

前面的话

前面几篇博客陆续记录了我使用coding仓库备份博客网站源码,以及构建了hexo的docker镜像,也提到了使用daocloud进行自动化构建hexo博客的功能。这篇博文就是记录使用daocloud持续化构建hexo博客的折腾。前面的折腾如下:

daocloud

其实我是很喜欢简单粗暴的,直接,爽快,干净,利落。我可以直接记录我搭建的过程,中间可以略去对daocloud的介绍,对碰到的问题的介绍,但是,博客的目的不只是记录啊,更多的还是分享自己碰到的问题,或者自己的理解。所以,对于daocloud的介绍还是打算来一下下。

什么是daocloud?

官网: www.daocloud.io

什么是daocloud?daocloud有什么用?正如官网的主页介绍的:

重新定义计算的边界

业界领先的企业级容器云及解决方案

直观的理解就是一个docker容器,只不过被搬到了云上。那么使用daocloud后我发布博客会有什么区别呢?

原来的方式是写好博客后执行hexo clean &&hexo d -g一系列的操作手工发布博客,而且必须是在安装好了hexo的环境上执行;那么使用daocloud之后呢?现在我只需要编写好博客,不用限制在hexo的环境中,在任何环境下,只要有博客源码存在,然后git push到博客源码的仓库,就会触发daocloud的自动集成,博客就发布好了。是不是方便了很多呢?O(∩_∩)O。

daocloud与docker

既然理解了daocloud其实就是一个云容器(当然可能还有其他的部分),那么与docker就脱不了干系。那么构建的过程原理是如何的呢?

daocloud使用daocloud.yml文件脚本进行持续构建,daocloud.yml是一系列的命令的集合,自动集成前需要一个docker镜像,这个docker镜像可以是公有的docker镜像,也可以是自己构建的镜像。然后daocloud执行daocloud.yml中一系列的命令就是基于这个镜像,直至最后的博客自动发布。那么如果是自己构建的镜像,如之前的文章使用docker制作hexo镜像中讲的一样,需要自己编写Dockerfile,然后构建镜像。

下面是详细的步骤。

使用daocloud详细步骤

编写Dockerfile

在博客根目录新建Dockerfile,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FROM node:slim
MAINTAINER nick <linuxcode2niki@gmail.com>
# instal basic tool
RUN apt-get update && apt-get install -y git ssh-client ca-certificates --no-install-recommends && rm -r /var/lib/apt/lists/*
# set time zone
RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
RUN npm install
# install hexo
RUN npm install hexo-cli -g
# install hexo server
RUN npm install hexo-server
# set base dir
#RUN mkdir /hexo
#WORKDIR /hexo

EXPOSE 4000
#CMD ["/bin/bash"]

Dockerfile用来构建hexo环境,可以缩短每次自动集成的时间。

编写daocloud.yml

在博客根目录新建daocloud.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
50
51
52
53
54
55
56
version: 2.0

test:
image:
daocloud.io/rebootcaty/hexo:latest

services:
#- redis

# using default docker-link env
env:
#- REDIS_PORT_6379_TCP_PROTO = "tcp"
#- REDIS_PASSWORD = ""

install:
# - npm install

before_script:
- mkdir ~/.ssh
# 将ssh配置文件放入目录
- mv .daocloud/id_rsa ~/.ssh/id_rsa
# 将ssh配置文件放入目录
- mv .daocloud/ssh_config ~/.ssh/config
# 修改私钥和配置文件为可读权限
- chmod 600 ~/.ssh/id_rsa
- chmod 600 ~/.ssh/config
# 启动ssh-agent
- eval $(ssh-agent)
# 添加私钥
- ssh-add ~/.ssh/id_rsa
# 删除存放私钥和配置的目录及文件
- rm -rf .daocloud
# 配置git全局的用户名和邮件,没有配置不能clone
- git config --global user.name "nick"
- git config --global user.email "linuxcode2niki@gmail.com"

script:
- hexo clean
- hexo g
- hexo d
- rm -rf ~/.ssh/

build:
lite_image:
compile:
dockerfile_path: Dockerfile
build_dir: /
cache: true

extract:
# - /go/bin/app

#package:
# dockerfile_path: Dockerfile.sec
# build_dir: /
# cache: true

daocloud.yml中拉取镜像 daocloud.io/rebootcaty/hexo:latest,这个到时候可以改成你自己的镜像。这一步不明白没关系,可以先暂时放一放,不影响。

新建.daocloud文件夹

在博客根目录新建.daocloud文件夹:

1
$ mkdir  .daocloud

然后把之前生成的ssh key(一般在~/.ssh/下)复制一份到这个文件夹下:

1
$ cp  ~/.ssh/id_rsa*   .daocloud/

接着在.daocloud文件夹下新建文件ssh_config:

1
$ touch ssh_config

然后写入内容:

1
2
StrictHostKeyChecking no
UserKnownHostsFile /dev/null

到此,准备工作还有最后一步,就是提交到博客源码仓库:

1
2
3
$ git add .
$ git commit -m "first commit hexo"
$ git push origin master

接下来才是真正的开始!

daocloud.io上注册用户新建项目

去daocloud官网www.daocloud.io注册账号

点击项目,新建新项目,填入名称,绑定你的博客源码仓库(比如我的是coding的私有仓库),选择持续集成:

然后点击开始创建,然后到”构建设置”里边:

然后是”触发规则”里边:

可以注意到上面选择了成功构建后设置latest为镜像标签,这就是daocloud.yml中拉取的镜像。

然后到”流程定义”里:

点击保存后点击右上角的手动构建。然后你就会看到一个终端窗口打开了,开始记录构建日志了,嘻嘻。

静静等待完成~

如果成功构建,完成后是这样的:

至此,当每次写完博客,只需要执行下面这几条命令就不用管了,daocloud会自动构建发布。

1
2
3
git  add .
git commit -m "update"
git push origin master

END

关于daocloud,不要觉得太欣喜,毕竟“免费的是最贵的”,写这篇博文的时候我是重新又创建了一个项目,重新操作了一遍,但是在它自动构建的时候,执行了很长时间,上面的最后这两张图是我之前的项目的构建结果(我实在等不了刚刚新创建的这个项目的构建了,好慢好慢)。不过你也可以付费购买更好的服务。

到目前为止,博客的环境迁移,自动发布折腾的差不多了,以后就是坚持写博客,记录知识,分享知识。好吧,坚持不容易,加油!

Blog:

2016-12-21 于杭州
By 史矛革

buy me a cola!

欢迎关注我的其它发布渠道