环境

目前的环境是hexo+docker+drone

Drone CI/CD 安装

package.json明细

  "scripts": {
    "build": "hexo generate",
    "clean": "hexo clean",
    "deploy": "hexo deploy",
    "server": "hexo server"
  },

.drone.yml

根据上面的环境配置,编辑.drone.yml

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 就会自动完成打包,部署