0%

Drone CI/CD with Github and ssh and docker pipeline

緣由

因為專案太多了,想簡單製作 CI/CD 的機制,至少把 git push 後的 auto deploy 建置起來,個人之前還有些 gitlab-ci 的經驗,於是就看上了最近兩年比較紅的 drone ci,過程中遇到了不少問題,官方文件也不盡詳細,最後順利解決了在這邊記錄分享一下。

過程

官網上面或是網路上面有一堆教學文件應該大家都看過不少,我直接提供我這邊遇到的狀況,因為我想要在 git push 之後讓平台直接透過 ssh 工具去進行 auto deploy,同時又想要使用一些 docker image 工具,但官網上面是分開去撰寫的,並沒有特別寫說並用的時候怎麼處理。

我在了解過 drone 運作原理之後摸索出解法,其實很簡單,就是同時起 ssh 和 docker 兩種類型的 runner,然後串在同一包就可以了,下面直接分享我最後的 docker-compose.yml

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
version: '3'
services:
drone-server:
image: drone/drone:1
ports:
- 80
volumes:
- ./:/data
restart: always
environment:
- DRONE_SERVER_HOST=${DRONE_SERVER_HOST}
- DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO}
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET}

# GitHub Config
- DRONE_GITHUB_SERVER=https://github.com
- DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID}
- DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}

- DRONE_LOGS_DEBUG=true
- DRONE_LOGS_PRETTY=true
- DRONE_LOGS_COLOR=true

- VIRTUAL_HOST=<your_domain>
- VIRTUAL_PORT=80
- LETSENCRYPT_HOST=<your_domain>
- LETSENCRYPT_EMAIL=<your_mail>
networks:
- public

# runner for docker version
drone-runner-docker:
image: drone/drone-runner-docker:1
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_HOST=${DRONE_RPC_HOST}
- DRONE_RPC_PROTO=${DRONE_RPC_PROTO}
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET}
- DRONE_RUNNER_CAPACITY=1
networks:
- public
drone-runner-ssh:
image: drone/drone-runner-ssh:1
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_HOST=${DRONE_RPC_HOST}
- DRONE_RPC_PROTO=${DRONE_RPC_PROTO}
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET}
- DRONE_RUNNER_CAPACITY=1
networks:
- public

networks:
public: