Please enable Javascript to view the contents

gogs-drone-dockercompose

 ·  ☕ 3 分钟

重要

  1. Drone登录的账号需要在Gogs设置为管理员,他俩兄弟的账密是互通的
  2. Gogs的仓库会自动同步到Drone上,此时,需要在Drone开启激活该项目才能正常运行,激活后能在Gogs仓库WeHooks多一个记录。
  3. Drone默认读取的配置文件名为项目根下.drone.yml,如果仓库内文件名不是。需要再Drone-setting中做修改。

正文

CI / CD( 持续集成 / 持续部署 )方案是DevOps中不可或缺的流程之一,本文简单介绍选择 Gogs + Drone 通过docker compose部署。

主机名gitLab + jenkinsGogs + DroneNUM
成熟度GitLab是一个非常成熟的git工具之一,同时Jenkins也是非常成熟的CICD组件,功能非常强大。性能高,并且简单易用1
语言技术栈GitLab是使用Ruby编写的,Jenkins更是了不起,使用Java来编写的,项目整体比较膨大,同时它们对硬件、CPU等开销比较高DroneGogs皆是使用Go语言来编写构建,在整体的语言性能与内存开销算是有一定的优势2

Drone是一种基于容器技术的持续交付系统。Drone使用简单的YAML配置文件(docker-compose的超集)来定义和执行Docker容器中的Pipelines。Drone与流行的源代码管理系统无缝集成,包括GitHub,GitHub Enterprise,Gogs,Bitbucket等。

镜像说明

drone升级使用1.0.0-rc6版本,此版本并非稳定版本,推荐使用1版本甚至是0.8.6更稳定的版本。1.0后的版本较之前而言,配置更加灵活、优化版本,同时界面也变化了。drone

环境准备

使用的前提,必须符合以下条件

  • 系统安装了Docker,同时要安装了Docker编排工具docker-compose
  • 主流的x64位系统,LinuxMacWindow
  • 安装了git版本控制工具

安装

安装非常简单,拉取docker-compose.yml编排文件,基于Docker环境自动构建即可!

docker-compose: https://github.com/alicfeng/gogs-drone-docker.git/deployment/

 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
version: "2"
services:
  gogs:
    container_name: gogs
    image: gogs/gogs:0.11.91
    ports:
      - 3000:3000
      - 10022:22
    volumes:
      - ./data/gogs/data:/data
    environment:
      - TZ=Asia/Shanghai
    restart: always
    networks:
      - dronenet

  drone-server:
    image: drone/drone:1.6.1
    container_name: drone-server
    ports:
      - 8000:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data/drone/:/var/lib/drone
    environment:
      - DRONE_OPEN=true
      - DRONE_SERVER_HOST=drone-server:8000
      - DRONE_DEBUG=true
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_GOGS=true
      - DRONE_GOGS_SKIP_VERIFY=false
      - DRONE_GOGS_SERVER={http://gogs:3000}
      - DRONE_PROVIDER=gogs
      - DRONE_SERVER_PROTO=http
      - DRONE_RPC_SECRET=7b4eb5caee376cf81a2fcf7181e66175
      - DRONE_USER_CREATE=username:alic,admin:true
      - DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
      - DRONE_DATABASE_DRIVER=sqlite3
      - TZ=Asia/Shanghai
    restart: always
    networks:
      - dronenet

  drone-agent:
    image: drone/agent:1.6.1
    container_name: drone-agent
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_RPC_SERVER={docker-server:8000}
      - DRONE_RPC_SECRET=7b4eb5caee376cf81a2fcf7181e66175
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_DEBUG=true
      - TZ=Asia/Shanghai
    restart: always

  nginx:
    image: nginx:alpine
    container_name: drone_nginx
    ports:
      - "80:80"
    restart: always
    networks:
      - dronenet
networks:
  dronenet:

执行以下命令,创建容器、网络

1
docker-compose up -d

修改Nginx配置

1
docker exec -it nginx ash

容器内执行以下命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
vim /etc/nginx/conf.d/drone.conf

server {
    listen       80;
    server_name drone.qloud.com;
    location / {
        proxy_pass http://drone-server:8000;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

nginx -s reload

运行 docker-runner

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
docker run -d \
           -v /var/run/docker.sock:/var/run/docker.sock \
           -e DRONE_RPC_PROTO=http \
           -e DRONE_RPC_HOST=10.8.3.206:8000 \
           -e DRONE_RPC_SECRET=7b4eb5caee376cf81a2fcf7181e66175 \
           -e DRONE_RUNNER_CAPACITY=2 \
           -e DRONE_RUNNER_NAME=${HOSTNAME} \
           -p 3002:3000 \
           --restart always \
           --name docker-runner \
           drone/drone-runner-docker:1

使用

每当分支的代码更新的时候,Gogs会动过钩子同步通知Drone,而Drone收到通知后根据.drone.yml配置执行命令。

  • 通过git clone分支代码到容器里面
  • 单元测试, 代码静态检查
  • 编译代码,构建可执行文件
  • build image镜像,发布到Registry
  • 部署至生产环境
  • 发送邮件等通知信息,这里还有很多插件,比如微信、钉钉、电报等

价值源于技术,技术源于分享

Reference

Nginx代理

分享

Hex
作者
Hex
CloudNative Developer

目录