使用docker 部署 drone:1.0.0 并与 gogs 配合自动构建

by kingzcheung on November 20, 2018

Drone 是一个采用golang编写并基于Docker的持续构建平台,并于最近升级到了1.0.0版本。

drone 1.0 相比drone0.8,改动非常的大,网上找到关于 drone 的资料都是0.8版本,而官方的文档实在是太烂了,导致走了很多弯路。主要的坑有以下几点:

  • Environment 环境常量配置大改
  • Server 的端口改成了80
  • pipeline 配置大改,基本无法兼容旧版本

而最大的坑在于,官方给出drone+gogs 的docker https://docs.drone.io/intro/gogs/single-machine/配置是无法正常启动的,因为它缺少非常多的必要的env参数

$ docker run \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --volume=/var/lib/drone:/data \
  --env=DRONE_GIT_ALWAYS_AUTH=false \
  --env=DRONE_GOGS_SERVER=${DRONE_GOGS_SERVER} \
  --env=DRONE_RUNNER_CAPACITY=2 \
  --env=DRONE_SERVER_HOST=${DRONE_SERVER_HOST} \
  --env=DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO} \
  --env=DRONE_TLS_AUTOCERT=false \
  --publish=80:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:1.0.0-rc.1

由于drone 要启动 server 和agent 两个服务,而且参数太多,所以这里采用docker-compose 编排:

version: "3"
services:
  drone-server:
    image: drone/drone:1.0.0-rc.1
    container_name: drone_server
    ports:
    - "80:80"
    - "443:443"
    environment:
      - DRONE_OPEN=true
      - DRONE_GOGS=true
      - DRONE_DEBUG=false
      - DRONE_PROVIDER=gogs
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_SERVER_HOST=http://drone.yourdomain.cn
      - DRONE_GOGS_SERVER=http://git.yourgogs.cn:3000
      - DRONE_GOGS_SKIP_VERIFY=false
      - DRONE_SERVER_PROTO=http
      - DRONE_TLS_AUTOCERT=false
      - DRONE_ADMIN=admin
      - DRONE_RPC_SECRET=J32iAa4Xv9beFyyP
      - DRONE_LOGS_DEBUG=true
      - DRONE_DATABASE_DRIVER=sqlite3
      - DRONE_DATABASE_DATASOURCE=/data/database.sqlite
    restart: always
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ./data:/data
  drone-agent:
    image: drone/agent:1.0.0-rc.1
    container_name: drone_agent
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
    - drone-server
    restart: always
    environment:
      - DRONE_RPC_SERVER=http://drone-server:9000
      - DRONE_RPC_SECRET=J32iAa4Xv9beFyyP
      - DRONE_LOGS_DEBUG=true
      - DOCKER_HOST=tcp://docker-bind:2375
  docker-bind:
    image: docker:dind
    privileged: true
    command: --storage-driver=overlay
    container_name: docker_bind

启动服务:

$ docker-compose up --build -d