至于完整的搭建过程,大家可以参考参考资料的几篇文章,我这里只把我遇到的一些问题做一些总结。
坑集
- 如果遇到镜像无法被拉取(墙),则可以在
drone-server
配置
1
2
3
4
5
6
7
8
|
...
services:
drone-server:
...
environment:
- HTTP_PROXY=http://192.168.0.5:1087
- HTTPS_PROXY=http://192.168.0.5:1087
...
|
drone 默认使用的数据库是 sqlite,在生产环境上,我们可以切换为 MySQL 或者 PG 数据库。
1
2
3
4
5
6
7
|
...
services:
drone-server:
...
environment:
- DRONE_DATABASE_DRIVER=mysql
- DRONE_DATABASE_DATASOURCE=root:123456@tcp(192.168.0.5:3306)/drone?parseTime=true
|
-
打开 gogs 的安装界面,记得将所有的 localhost 都改成本机的ip地址,否则 Drone agent 跑在自己的容器里面,使用 http://localhost:3000/xxx/demo.git 这样的地址是不可能把项目 clone 下来的,这是一个巨坑。
-
drone-agent 中的挂载 -v /var/run/docker.sock:/var/run/docker.sock
是指你本地 docker 的地址,不要随意修改;
-
当你在 Gitlab 上配置 Application 的时候,如果你输入了错误 Redirect URL ,会报错:The redirect URI included is not valid.
docker-compose-with-drone-and-gitlab-gitlab-errors-the-redirect-uri-included-i
-
Failed to activate your repository
这个问题,我卡了蛮长时间的。出现这个原因是 drone 无法连接到 gitlab/gogs:
- 检查你启动 drone 配置的
- DRONE_HOST=http://192.168.0.55:9000
- 如果你是 gitlab ,则很有可能因为 gitlab 限制了本地网络的调用导致的,你需要进行以下设置:(https://gitlab.com/gitlab-org/gitlab-ce/issues/46490)。
-
通过 Docker 启动的 Gitlab,默认给予的 external_url 是容器ID,这个是无法正常 clone 的。
- 在 Docker 启动的时候配置参数
-e 'GITLAB_HOST=http://192.168.0.5'
。
1
2
3
4
5
|
docker exec -it gitlab /bin/bash
vim /etc/gitlab/gitlab.rb
# 找到 external_url,修改为 external_url 'http://ip or domain'
# 然后执行
gitlab-ctl reconfigure
|
- 如果你使用了同一个域名,然后又构建了不同 ssh 连接,你在
git push
的时候可能会报错:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:DIOVqCtRge3+qGPgkJQv6pi3OCb2RXK1v+e0Cscz4UE.
Please contact your system administrator.
Add correct host key in ~/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in ~/.ssh/known_hosts:23
ECDSA host key for 192.168.0.5 has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
|
你只需要进入到 ~/.ssh/known_hosts
删除你之前已经配置过的一行记录即可重新提交。
- Drone 不能自己创建数据库,所以数据库需要单独分开部署,不能在一个
docker-compose.yml
中一起构建。
我已经解决了,解决方案是:MySQL 在启动后执行 SQL 语句,来创建所需要的数据库。
附录
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
version: '2'
services:
mysql-server:
image: mysql:5.7.23
restart: always
# command: --init-file /sql/init.sql
volumes:
- ./mysql/data/:/var/lib/mysql
- ./mysql/logs:/logs
# - ./init.sql:/sql/init.sql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
gogs:
image: gogs/gogs
# container_name: drone_gogs
restart: always
depends_on:
- mysql-server
volumes:
- ./gogs:/data
ports:
- "10022:22"
- "3000:3000"
# gitlab:
# image: gitlab/gitlab-ce:11.1.0-ce.0
# restart: always
# volumes:
# - ./data/conf:/etc/gitlab
# - ./data/log:/var/log/gitlab
# - ./data:/var/opt/gitlab
# ports:
# - "443:443"
# - "80:80"
# - "22:22"
# environment:
# - "GITLAB_HOST=192.168.0.56"
drone-server:
image: drone/drone:0.8
ports:
- 8000:8000
- 9000:9000
volumes:
- ./drone:/var/lib/drone/
restart: always
depends_on:
- mysql-server
# - gitlab
environment:
- DRONE_OPEN=true
- DRONE_DEBUG=true
- DRONE_HOST=http://192.168.0.56:9000
- DRONE_GOGS=true
- DRONE_GOGS_URL=http://192.168.0.56:3000
#- DRONE_GITLAB=true
#- DRONE_GITLAB_CLIENT=8b176db54eaab72a41759f71ca087bc65a87bf9db80a11363e73a5eff2fda0e4
#- DRONE_GITLAB_SECRET=fb05e4ca7264a5a2bf06065b1a7893bda968fc771b2ca71514e008b0b5b86207
#- DRONE_GITLAB_URL=http://192.168.0.56
#- DRONE_GITLAB_SKIP_VERIFY=true
# - DRONE_GITLAB_PRIVATE_MODE=true
#- DRONE_GITLAB_GIT_USERNAME=root
#- DRONE_GITLAB_GIT_PASSWORD=rckNtecW8BhqEkZx
- DRONE_SECRET=ZHJvbmVfZ29nc19naXRsYWIK
- DRONE_DATABASE_DRIVER=mysql
- DRONE_DATABASE_DATASOURCE=drone:drone_123456@tcp(mysql-server:3306)/drone?parseTime=true
- HTTP_PROXY=http://192.168.0.56:1087
- HTTPS_PROXY=http://192.168.0.56:1087
drone-agent:
image: drone/agent:0.8
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_DEBUG=true
- DRONE_SERVER=drone-server:9000
- DRONE_SECRET=ZHJvbmVfZ29nc19naXRsYWIK
|
其中 DRONE_SECRET
是根据 echo -e "<your type content>" | base64
生成的。
说明:
mysql-server:
command: --init-file /sql/init.sql
和 # - ./init.sql:/sql/init.sql
结合着用。
- 也可以使用:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
- 还有一个更简单的方法:直接指定
environment: - MYSQL_DATABASE=drone
即可。
更多内容,请参考
参考资料
- drone docs
- 基于Gogs+Drone搭建的私有CI/CD平台
- 私有化的 CI/CD & DevOps 解决方案
- k8s+drone cicd
- 体验基于gogs+Drone搭建的CI/CD平台
茶歇驿站
一个可以让你停下来看一看,在茶歇之余给你帮助的小站,这里的内容主要是后端技术,个人管理,团队管理,以及其他个人杂想。