Drone CI 中文文档

在本地搭建高可用环境

这纯粹是为了开发目的。高可用设置的所有服务都在一台机器上运行,只适合于本地测试。

你需要创建一个目录,其中包含一个 docker-compose.yml 文件,替换成对应的值,以及一个 haproxy.cfg 文件。

docker-compose.yml 文件

  • DRONE_SERVER_PROXY_HOST 用于设置 Drone Server 的代理主机,例如使用 ngrok。下面有更详细的解释。
  • DRONE_GITHUB_CLIENT_IDDRONE_GITHUB_CLIENT_SECRET 用于设置 GitHub 客户端 ID 和 Secret。
 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
69
70
71
72
73
74
version: "3.8"
services:
    dronea:
        image: drone/drone:latest
        depends_on: 
            db:
                condition: service_healthy
        environment:
        - DRONE_SERVER_HOST=localhost
        - DRONE_SERVER_PROTO=http
        - DRONE_SERVER_PROXY_HOST=${DRONE_SERVER_PROXY_HOST}
        - DRONE_SERVER_PROXY_PROTO=https
        - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
        - DRONE_COOKIE_SECRET=e8206356c843d81e05ab6735e7ebf075
        - DRONE_COOKIE_TIMEOUT=720h
        - DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_SECRET}
        - DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}
        - DRONE_LOGS_DEBUG=true
        - DRONE_CRON_DISABLED=true
        - DRONE_DATABASE_DRIVER=postgres
        - DRONE_DATABASE_DATASOURCE=postgres://postgres:postgres@db:5432/drone?sslmode=disable
        - DRONE_REDIS_CONNECTION=redis://redis-server:6379
    droneb:
        image: drone/drone:latest
        environment:
        - DRONE_SERVER_HOST=localhost
        - DRONE_SERVER_PROTO=http
        - DRONE_SERVER_PROXY_HOST=${DRONE_SERVER_PROXY_HOST}
        - DRONE_SERVER_PROXY_PROTO=https
        - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
        - DRONE_COOKIE_SECRET=e8206356c843d81e05ab6735e7ebf075
        - DRONE_COOKIE_TIMEOUT=720h
        - DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_SECRET}
        - DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}
        - DRONE_LOGS_DEBUG=true
        - DRONE_CRON_DISABLED=true
        - DRONE_DATABASE_DRIVER=postgres
        - DRONE_DATABASE_DATASOURCE=postgres://postgres:postgres@db:5432/drone?sslmode=disable
        - DRONE_REDIS_CONNECTION=redis://redis-server:6379
        depends_on: 
        - dronea
    runner:
        image: drone/drone-runner-docker:latest
        environment:
        - DRONE_RPC_HOST=proxy
        - DRONE_RPC_PROTO=http
        - DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
        - DRONE_TMATE_ENABLED=true
        volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        depends_on: 
        - proxy
        - droneb 
    redis-server:
      image: redis
    proxy:
        image: haproxy
        ports:
            - "8080:80"
        volumes:
        - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
        depends_on: 
        - dronea
    db:
        image: postgres
        environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=postgres
        - POSTGRES_DB=drone
        healthcheck:
            test: ["CMD-SHELL", "pg_isready -U postgres"]
            interval: 5s
            timeout: 5s
            retries: 5

haproxy.cfg 高可用配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
defaults
    mode http
    timeout connect 5s
    timeout client 120s
    timeout server 120s
    maxconn 128

frontend drone
    bind *:80
    default_backend drone_servers

backend drone_servers
    balance roundrobin
    server server1 dronea:80
    server server2 droneb:80
    http-response add-header X-App-Server %b/%s

使用 Ngrok 作为 Drone Server 的代理

Ngrok 允许我们从 GitHub 发送 Webhooks 到我们的本地 Drone 设置。

按照这里的指南 https://dashboard.ngrok.com/get-started/setup 在 8080 端口运行 Ngrok,它将在前台运行。

1
ngrok http 8080

注意转发的主机名,这是你的 DRONE_SERVER_PROXY_HOST,例如。

1
Forwarding    http://c834c33asdde.ngrok.io -> http://localhost:8080

现在你可以在你的docker-compose.yml文件中使用这个 ngrok 主机名作为 DRONE_SERVER_PROXY_HOST。注意不要包括 http/https。

启动服务

通过 docker-compose up 启动,然后在 http://localhost:8080 打开 Drone 用户界面。