最近研究了一下drone,尝试将drone和gitea集合在一起,做CI服务;drone官方是有说明文档,支持gitea的,见drone server的安装文档;但是我个人觉得不够详细,在这里记下安装过程。
先上docker-compose.yaml文件:
version: "3.6"
services:
mysql:
image: mysql:${MYSQL_VERSION}
container_name: mysql
ports:
- "${MYSQL_HOST_PORT}:3306"
volumes:
- ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
- ${MYSQL_DATA_DIR}:/var/lib/mysql/:rw
restart: always
networks:
- default
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
TZ: Asia/Shanghai
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
TZ: Asia/Shanghai
volumes:
- /var/lib/gitea:/data
restart: always
networks:
- default
ports:
- "10022:22"
- "10080:3000"
drone-server:
image: drone/drone:latest
container_name: drone-server
ports:
- "8080:80"
- "8000:8000"
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /dnmp/drone/:/var/lib/drone/:rw
restart: always
environment:
- DRONE_GITEA_SERVER=http://192.168.88.190:10080
#- DRONE_GITEA_SERVER=http://127.0.0.1:10080
- DRONE_GIT_ALWAYS_AUTH=false
- DRONE_RUNNER_CAPACITY=2
- DRONE_SERVER_HOST=192.168.88.190
- DRONE_SERVER_PROTO=http
- DRONE_RPC_SECRET=9c3921e3e748aff725d2e16ef31fbc42
- DRONE_TLS_AUTOCERT=false
- DRONE_LOGS_DEBUG=true
- TZ=Asia/Shanghai
restart: always
networks:
- default
drone-agent:
image: drone/agent:latest
container_name: drone-agent
command: agent
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
#- DRONE_RPC_SERVER=http://192.168.88.190:9000
- DRONE_RPC_SERVER=drone-server:9000
- DRONE_RPC_SECRET=9c3921e3e748aff725d2e16ef31fbc42
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=192.168.88.190
- DRONE_LOGS_DEBUG=true
- TZ=Asia/Shanghai
restart: always
#detach: true
networks:
- default
networks:
default:
我的环境是本地虚拟机centos7,上面IP地址是虚拟机的ip地址。
因为gitea是采用mysql数据库,所以要启动一个msyql的容器服务;通过命名docker-compose -f docker-compose.yml build命令先将镜像构建,其实都是用官方的镜像,构建这一步是很快的,只是做一个检查;
然后docker-compose -f docker-compose.yml up -d 将容器运行起来,通过docker ps -a可以查看到容器的状态:
status这一栏都是正常的,表明服务就可以使用了。
先要配置gitea,通过http://192.168.88.190:10080/进入gitea的web页面,点击登录后,就会出现安装向导,填写信息,点击安装,等几分钟就ok了。安装的细节稍微要注意填写的地址和端口,容器内部要填写3000,对外开放的是10080。记住设置的管理员账号和密码,后面drone登录时也要用到。
然后通过http://192.168.88.190:8080/进入drone的web页面,如下:
输入刚才在gitea设置的管理员账号和密码,就可以登录成功,就能看到如下页面:
刚开始repositories是空的,点击右上方的sync按钮,等一分钟就会自动同步gitea项目过来;同步过来的gitea仓库,默认状态是没开启的。可以点击setting页面,进入设置,如下:
填写配置文件名字,默认是.drone.yml。点击save,就会开启。点击save的时候,drone会将配置信息同步给你的gitea,gitea项目那边会响应,然后配置一个webhook,这里有个坑,后面再讲。
顺利的话,你在gitea项目添加.drone.yal后,就会触发构建,我在gitea仓库test下建的.drone.yml文件:
workspace:
base: /go
path: src/web_api
pipeline:
build:
image: golang
environment:
TZ: Asia/Shanghai
commands:
- pwd
- go env
- date
- go version
- go build
- ls -a
提交gitea后,查看drone的状态:
第一步是clone代码,第二步是build,因为我的.drone.yml超级简单,没有后面的步骤,只是测试用的。第二步build的结果:
看到正常运行,drone+gitea的服务就初步搭建起来了。后面通过在.drone.yml添加内容和服务,就能达到快速CI/CD的效果。
顺便记录一下踩的坑,刚开始我按照drone集成gitea的安装文档,将docker-compose.yml文件写好,运行docker-compose -f docker-compose.yml up -d 将容器运行起来,通过docker ps -a看到drone-server容器怎样都起不来,docker logs drone-server也看不出报错。
在网上找到drone+gitea的贴子,大部分都是drone0.8版本,鉴于此,我将drone的latest改为0.8,安装0.8版本的配置,重新运行,竟然跑起来了。跑起来后,我就摸索drone的配置和服务,后面发现1.0版本有一些配置跟0.8不一样,官方有说明,但不明显。见:
1.0版本跑不起来的配置,是因为drone-server的服务,80端口没对外开放,据我目前的了解,1.0版本默认是开放80端口,我当时按照0.8版本的端口,配置了"8000:8000"和"9000:9000",就差80端口,所以服务一直不正常。
这里也会涉及到gitea的webhook,上面说的在drone将gitea设置为开启状态时,这两者会交互的,我们看下gitea的webhook:
drone关联gitea项目时,就会有添加这个,但是端口不是8080,默认是80,就是没有端口的,类似:
http://192.168.88.190/hook?se...。
点击修改,加上前面设置的端口8080,点击保存,然后test 一下webhook,就能看到效果。
至此,drone1.0+gitea,docker部署安装的步骤就完成了。drone更多细节,还有待继续研究。
有疑问加站长微信联系(非本文作者)