基于Gitea和Drone的CI/CD
说起版本管理,CI/CD等名词的时候,大多数人可能想到的会是 Gitlab /Jenkins,但近些年随着整个软件生态的发展,给了我们一些别的选择,比如 Gitlab自带的 Gitlab-runner ,Travis ,抑或是 本文要讲述的 Gitea + Drone 组合;对于个人来说,更倾向于Gitea + Drone 组合
环境版本
gitea:1.15.2
drone:2
drone-runner-docker:linux-amd64
环境搭建
本文基于 Docker 环境,使用Docker-compose(Docker环境搭建可参考之前的文章Docker系列之安装 , Docker系列之Docker Compose)搭建 Gitea + Drone 环境
基础环境官网已经有详细的描述:Gitea,Drone
- Gitea+Mysql对应Docker-compose脚本
version: "3"
networks:
gitea:
external: false
volumes:
gitea:
driver: local
services:
server:
image: gitea/gitea:1.15.2
container_name: gitea
environment:
- DB_TYPE=mysql
- DB_HOST=db:3306
- DB_NAME=gitea
- DB_USER=gitea
- DB_PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "9300:3000"
- "9200:22"
depends_on:
- db
db:
image: mysql:8
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
- MYSQL_DATABASE=gitea
ports:
- 9306:3306
networks:
- gitea
volumes:
- ./mysql:/var/lib/mysql
- 启动一下(ps:切到docker-compose配置文件所在目录,或者使用 -f 指定配置文件位置)
[root@origin docker-compose]# docker-compose up -d
Creating network "docker-compose_gitea" with the default driver
Creating volume "docker-compose_gitea" with local driver
Pulling db (mysql:8)...
8: Pulling from library/mysql
a330b6cecb98: Pull complete
9c8f656c32b8: Pull complete
88e473c3f553: Pull complete
062463ea5d2f: Pull complete
daf7e3bdf4b6: Pull complete
1839c0b7aac9: Pull complete
cf0a0cfee6d0: Pull complete
1b42041bb11e: Pull complete
10459d86c7e6: Pull complete
b7199599d5f9: Pull complete
1d6f51e17d45: Pull complete
50e0789bacad: Pull complete
Digest: sha256:99e0989e7e3797cfbdb8d51a19d32c8d286dd8862794d01a547651a896bcf00c
Status: Downloaded newer image for mysql:8
Pulling server (gitea/gitea:1.15.2)...
1.15.2: Pulling from gitea/gitea
4e9f2cdf4387: Pull complete
ceb56db4e74f: Pull complete
1b27c5440181: Pull complete
fb014a245ba1: Pull complete
bb332b9bf890: Pull complete
24834170abbb: Pull complete
13693b4b3d6a: Pull complete
Digest: sha256:852a6b4a5339aa2ee5ff27207ef4de159dc1a0787cc229247bbe658baba4e0e4
Status: Downloaded newer image for gitea/gitea:1.15.2
Creating docker-compose_db_1 ... done
Creating gitea ... done
[root@origin docker-compose]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
228e1780e81f gitea/gitea:1.15.2 "/usr/bin/entrypoint…" 2 minutes ago Up 2 minutes 0.0.0.0:9200->22/tcp, :::9200->22/tcp, 0.0.0.0:9300->3000/tcp, :::9300->3000/tcp gitea
55258b48484a mysql:8 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 33060/tcp, 0.0.0.0:9306->3306/tcp, :::9306->3306/tcp docker-compose_db_1
- 启动成功,完善配置
访问地址:http://192.168.0.108:9300/
主要配置上面部分就可以了;这里再说两个可选配置注意事项
这里邮箱设置里面的 SMTP 主机是要包含端口的
这和gitlab有点区别,可以在这里个人推荐是在这里设置管理员
设置完毕,点击立即安装
-
Gitea配置Drone的OAuth的授权应用,用于Drone连接Gitea
设置 >> 应用 >> 创建OAuth2 应用
保存客户端id和密钥 -
生成共享密钥
openssl rand -hex 16
- 安装Drone及Runner
version: '3'
services:
fan-drone-server:
image: drone/drone:2
ports:
- 9080:80
- 9443:443
volumes:
- /data/drone:/data
restart: always
environment:
- DRONE_GITEA_SERVER=http://192.168.0.108:9300
- DRONE_GITEA_CLIENT_ID=客户端id
- DRONE_GITEA_CLIENT_SECRET=客户端密钥
- DRONE_RPC_SECRET=共享密钥
- DRONE_SERVER_HOST=192.168.0.109
- DRONE_SERVER_PROTO=http
- DRONE_USER_CREATE=username:root,admin:true
fan-docker-runner:
image: drone/drone-runner-docker:linux-amd64
ports:
- 9030:3000
restart: always
depends_on:
- fan-drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=192.168.0.109
- DRONE_RPC_SECRET=共享密钥和上面的相同
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=fan-docker-runner-1
// 启动
[root@origin docker-compose]# docker-compose up -d
Creating network "docker-compose_default" with the default driver
Pulling fan-drone-server (drone/drone:2)...
2: Pulling from drone/drone
6a428f9f83b0: Pull complete
a083aabdd28e: Pull complete
f91ef8e40777: Pull complete
8288ffdfc356: Pull complete
Digest: sha256:baaff1ced6739fe40e2697b605d0356e01b9bd55050af2589c6baa2538a140be
Status: Downloaded newer image for drone/drone:2
Pulling fan-docker-runner (drone/drone-runner-docker:linux-amd64)...
linux-amd64: Pulling from drone/drone-runner-docker
188c0c94c7c5: Pull complete
56a34a47cffc: Pull complete
d86e9de69e32: Pull complete
dfdbe7a3e2e7: Pull complete
Digest: sha256:6564d2e7ee0c34e9103dc38270b043123fc81b1ef20b948c0154f46532f7f20d
Status: Downloaded newer image for drone/drone-runner-docker:linux-amd64
Creating docker-compose_fan-drone-server_1 ... done
Creating docker-compose_fan-docker-runner_1 ... done
[root@origin docker-compose]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6cef404c18e drone/drone-runner-docker:linux-amd64 "/bin/drone-runner-d…" About an hour ago Up About an hour 0.0.0.0:9030->3000/tcp, :::9030->3000/tcp docker-compose_fan-docker-runner_1
cc6b107b3ea3 drone/drone:2 "/bin/drone-server" About an hour ago Up About an hour 0.0.0.0:9080->80/tcp, :::9080->80/tcp, 0.0.0.0:9443->443/tcp, :::9443->443/tcp docker-compose_fan-drone-server_1
- 访问Drone控制台
http://192.168.0.109:9080/
可以看到Drone已经成功启动,进入看看
点击授权
完善注册信息
进入Drone可以看到root创建的一个仓库
- 激活仓库
再进入Gitea,点开对应仓库的webhook,可以看到已经创建了一个钩子
测试
- 点击测试推送发现失败
此时,需要在仓库根目录创建配置文件 .drone.yml
kind: pipeline
type: docker
name: default
steps:
- name: test
image: alpine
commands:
- echo hello
- echo world
- 再看Drone,可以看到一条构建记录