前段时间开了个隐蔽的小站用来写日志,因为不想在这上面花太多钱买好的服务器,
所以博客系统采用了全静态的Hexo,加上轻量的Gitea,512M内存正好。

但是这个博客系统有点麻烦的就是部署到Git上面之后还得在网站根目录git pull一遍。
Drone正好能解决这个问题。当博客被部署到Git上之后可以触发Drone的webhook实现自动CI/CD。

此文用来简单讲一下配置过程。

Gitea的安装

参考官方文档即可食用。
https://gitea.io

Drone的安装

Drone根据源码管理系统的不同安装方式也不同,不过前提是要有Docker环境。
Docker的安装可以参考Docker官方文档。
https://docs.docker.com/get-docker/

与Gitea配合使用首先要在Gitea生成一个用于OAuth验证的Client ID和Secret Key,按照下面官方介绍的安装即可。
https://docs.drone.io/server/provider/gitea/

安装Docker Runner

执行持续集成的流水线主要是Runner,Runner有很多种,个人比较推荐的是Docker。
Docker环境里和系统有一定的隔离性,
https://docs.drone.io/runner/docker/installation/linux/

注意事项

如果想要把宿主目录挂载到Runner里面,需要把工程设置成可信任。
https://docs.drone.io/pipeline/docker/syntax/volumes/host/
因为对宿主的文件系统操作是有一定的风险性的。
要把工程设置成可信任,需要先设置一个Drone的管理员。
只需要要启动Drone的时候在环境变量里设置一个和Gitea同名的管理员即可。
参考以下文档:
https://docs.drone.io/server/reference/drone-user-create/
比如你的Gitea账户名称为JUN,就这样设置:

DRONE_USER_CREATE=username:JUN,machine:false,admin:true,token:xxxxx

docker-compose

以下是一段可供参考的docker-compose配置文件

version: '3'
services:
  drone:
    image: drone/drone:latest
    container_name: drone
    volumes:
      - "/usr/local/drone:/data"
    environment:
      - DRONE_AGENTS_ENABLED=true
      - DRONE_GITEA_SERVER=https://git.yourdomain.com
      - DRONE_GITEA_CLIENT_ID=xxxxxx
      - DRONE_GITEA_CLIENT_SECRET=xxxxx
      - DRONE_RPC_SECRET=xxxxx
      - DRONE_SERVER_HOST=drone.yourdomain.com
      - DRONE_SERVER_PROTO=https
      - DRONE_GIT_ALWAYS_AUTH=true
      - DRONE_USER_CREATE=username:JUN,machine:false,admin:true,token:xxxxxx
    restart: always
    ports:
      - "8081:80"

  drone-docker-runner:
    image: drone/drone-runner-docker:latest
    container_name: drone-docker-runner
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    environment:
      - DRONE_RPC_PROTO=https
      - DRONE_RPC_HOST=drone.yourdomain.com
      - DRONE_RPC_SECRET=xxxxxx
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RUNNER_NAME=drone-runner
    restart: always
    depends_on:
      - drone

.drone.yml

以下是一段可供参考的流水线配置。
这里在runner上挂载了宿主的目录,已经在drone里将工程设置成了可信任。
简单介绍一下:
workspace是指git clone的临时目录。这里设置成了容器里的/home/wwwroot/tmp/deploy_temp。
然后image这里我使用了golang是为了以后可以编译运行golang,可以根据自身需要设置成alpine也可以。

volumes段里设置了宿主目录映射。
将宿主目录的/home/wwwroot/site_root映射到了容器内/tmp/site_root。
这段流水线主要进行的是将git clone下来的文件复制到宿主目录的/home/wwwroot/site_root下。

---
kind: pipeline
type: docker
name: deploy-site

workspace:
  base: /home/wwwroot/tmp
  path: deploy_temp

steps:
- name: copy-file
  image: golang
  volumes:
  - name: site_root
    path: /tmp/site_root
  commands:
  - mkdir -p /tmp/site_root
  - cd /tmp/site_root
  - rm -rf *
  - cp -rf /home/wwwroot/tmp/deploy_temp/* /tmp/site_root

volumes:
- name: site_root
  host:
    path: /home/wwwroot/site_root

trigger:
  branch:
  - master
  event:
  - push
最后修改:2020 年 02 月 10 日
如果觉得我的文章对你有用,请随意赞赏