环境

目前的环境是hexo+docker+drone

Drone CI/CD 安装

package.json明细

1
2
3
4
5
6
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server"
},

.drone.yml

根据上面的环境配置,编辑.drone.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
kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: build-hexo # 定义流水线名称
steps:
- name: build-web # 流水线名称
image: node:12-alpine # 定义创建容器的Docker镜像
volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
- name: web-build
path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
commands: # 定义在Docker容器中执行的shell命令
- npm install # 应用打包命令
- npm run build
- rm -rf /app/build/* # 删除历史文件
- cp -r public/ /app/build/public/ # 拷贝打包的文件
- cp Dockerfile /app/build/Dockerfile
- cp default.conf /app/build/default.conf

- name: build-docker
image: docker:dind
volumes:
- name: web-build
path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
- name: dockersock
path: /var/run/docker.sock
commands:
- cd /app/build/
- docker build -t my_blog . # 编译容器
- docker stop my_blog # 停止原容器
- docker rm my_blog # 删除原容器
- docker run --name my_blog -p 8005:80 -d my_blog # 启动新容器

volumes: # 定义流水线挂载目录,用于共享数据
- name: web-build
host:
path: /data/drone/temp/hexo/web-build # 从宿主机中挂载的目录

- name: dockersock
host:
path: /var/run/docker.sock

到这里就完成,只需要进行 git push 每次 Drone 就会自动完成打包,部署