未完待续!
目的是为了实现hexo博客的自动部署, 每次push完之后, 触发drone ci自动进行部署。
选用drone的原因还是因为轻量, 且功能够用,如果用其他的CI工具,比如jenkins,我这小小的VPS部署服务一多,就扛不住了。
本文中drone是和gitea进行集成的, 如果要和其他仓库集成, 参考官方文档即可:https://docs.drone.io/
部署服务还是通过docker来进行。
准备工作
登录gitea, 进入设置->应用, 新建一个给drone用的OAuth2授权

注意, 重定向URI(Redirect URI)是你的drone服务的域名加上login。
生成授权之后, 会得到一个客户端ID和客户端秘钥, 记下来, 后面会用到。
drone搭建
本文在部署的时候, 是将drone和gitea进行集成, 
drone的服务分为两部分:
- drone-server
 
- drone-runner-docker
 
本人将这两个服务都部署在同一个docker-compose.yml中,同时数据库还是连接的一个单独的mysql容器服务,所以需要先创建数据库, 命令如下:
1
   | create database drone default character set utf8mb4 collate utf8mb4_unicode_ci;
   | 
 
下面是docker-compose.yml文件, 其中db-net就是一个包含mariadb容器的docker网络, 具体创建过程见另外一篇博客:个人博客工具搭建。各个参数见说明。
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
   | version: "3" networks:   db-net:     external: true services:     drone-server:         image: drone/drone:2.12.1         container_name: drone-server         restart: always         networks:             db-net:                 aliases:                     - drone         ports:             - "6340:80"         volumes:             - ${PWD}/data:/data             - /var/run/docker.sock:/var/run/docker.sock         environment:             - TZ=Asia/Shanghai             - DRONE_SERVER_HOST=drone服务的域名             - DRONE_SERVER_PROTO=https             - DRONE_RPC_SECRET=自已生成的一个随机字符串即可             - DRONE_GITEA_CLIENT_ID=之前在gitea上生成的客户端ID             - DRONE_GITEA_CLIENT_SECRET=之前在gitea上生成的客户端密钥             - DRONE_GITEA_SERVER=gite的地址             - DRONE_DATABASE_DATASOURCE=数据库连接地址,格式 username:password@tcp(host:port)/drone             - DRONE_DATABASE_DRIVER=mysql             - DRONE_USER_CREATE=username:sobriver,admin:true 
      drone-runner-docker:         image: drone/drone-runner-docker:1.8.2         container_name: drone-runner-docker         restart: always         depends_on:             - drone-server         volumes:             - /var/run/docker.sock:/var/run/docker.sock         environment:             - TZ=Asia/Shanghai             - DRONE_RPC_HOST=drone服务的域名             - DRONE_RPC_PROTO=https             - DRONE_RPC_SECRET=自已生成的一个随机字符串即可,和server的要一样             - DRONE_RUNNER_CAPACITY=2             - DRONE_RUNNER_NAME=docker-runner
   | 
 
nginx配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   | server {     listen 443 ssl;     server_name 你的域名     charset utf-8;     ssl_certificate   域名pem文件;     ssl_certificate_key 域名key文件;     ssl_session_timeout 5m;     ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;     ssl_prefer_server_ciphers on;     location / {         proxy_pass http://localhost:6340;         proxy_set_header Host $host;         proxy_set_header X-Real-IP $remote_addr;         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;         proxy_set_header X-Forwarded-Proto $scheme;     } }
  | 
 
服务启动之后,打开登录页面, 会自动跳转到gitea的登录, 登录成功之后, 对应于相应的仓库, 激活即可。
.drone.yml文件编写
此处实现当我们写完一篇文章,push到远程之后,自动触发hexo的构建,并将构建完成之后的文件移动到博客文件目录。
在项目的根目录下创建.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 40 41 42 43 44
   | kind: pipeline type: docker name: blog-job steps: - name: Hexo Build   image: node:12-alpine   commands:   - npm install hexo-cli -g   - npm install hexo-generator-sitemap --save   - npm install hexo-generator-baidu-sitemap --save   - npm install   - hexo clean   - hexo g - name: Origin File Clean   image: appleboy/drone-ssh   settings:     host:        from_secret: SSH_HOST     port:        from_secret: SSH_PORT     username:        from_secret: SSH_USERNAME     password:       from_secret: SSH_PASSWORD     script:       - rm -rf /blog/public/* - name: SCP File Transfer   image: appleboy/drone-scp   settings:     target: /blog     source: ./public     host:        from_secret: SSH_HOST     port:        from_secret: SSH_PORT     username:        from_secret: SSH_USERNAME     password:       from_secret: SSH_PASSWORD     rm: true    trigger:   event:   - push
   | 
 
说一下几个步骤含义:
- Hexo Build  使用hexo构建文件
 
- Origin File Clean  清除原先文件, 此处设置的构建文件的存储路径为
/blog/public/ 
- SCP File Transfer 将构建完的文件移动到指定目录
 
其中from_secret的值是利用drone的secret来新建的,如下图所示:

几个值含义如下:
- SSH_HOST  远程登录主机的IP
 
- SSH_PORT 远程登录端口
 
- SSH_USERNAME  远程登录用户名
 
- SSH_PASSWORD 远程登录密码
 
参考资料:
- https://docs.drone.io/server/provider/gitea/
 
- https://www.qikqiak.com/post/drone-with-k8s-2/