Gitea+Drone DevOps环境
概要: 本文介绍如何使用docker-compose部署和配置基于上述服务的DevOps环境。
创建时间: 2023.08.02 23:02:52
更新时间: 2023.08.03 00:09:13
gitea是一个使用Go编写的简洁强大的Git服务。
drone是一个使用Go编写的现代化DevOps工具,用于CI/CD。
docker-compose.yaml
配置
YAML |
---|
| version: '3.6'
services:
gitea:
container_name: gitea
image: gitea/gitea:${GITEA_VERSION:-1.10.6}
restart: unless-stopped
environment:
# https://docs.gitea.io/en-us/install-with-docker/#environments-variables
- APP_NAME="Gitea"
- USER_UID=1000
- USER_GID=1000
- RUN_MODE=prod
- DOMAIN=${IP_ADDRESS}
- SSH_DOMAIN=${IP_ADDRESS}
- HTTP_PORT=3000
- ROOT_URL=http://${IP_ADDRESS}:3000
- SSH_PORT=222
- SSH_LISTEN_PORT=22
- DB_TYPE=sqlite3
ports:
- "3000:3000"
- "222:22"
networks:
- cicd_net
volumes:
- ./gitea_data:/data
drone:
container_name: drone
image: drone/drone:${DRONE_VERSION:-1.6.4}
restart: unless-stopped
depends_on:
- gitea
environment:
# https://docs.drone.io/server/provider/gitea/
- DRONE_DATABASE_DRIVER=sqlite3
- DRONE_DATABASE_DATASOURCE=/data/database.sqlite
- DRONE_GITEA_SERVER=http://${IP_ADDRESS}:3000/
- DRONE_GIT_ALWAYS_AUTH=false
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET}
- DRONE_SERVER_PROTO=http
- DRONE_SERVER_HOST=${IP_ADDRESS}:3001
- DRONE_TLS_AUTOCERT=false
- DRONE_USER_CREATE=${DRONE_USER_CREATE}
- DRONE_GITEA_CLIENT_ID=${DRONE_GITEA_CLIENT_ID}
- DRONE_GITEA_CLIENT_SECRET=${DRONE_GITEA_CLIENT_SECRET}
ports:
- "3001:80"
- "9001:9000"
networks:
- cicd_net
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./drone_data:/data
drone-runner:
container_name: drone-runner
image: drone/drone-runner-docker:${DRONE_RUNNER_VERSION:-1}
restart: unless-stopped
depends_on:
- drone
environment:
# https://docs.drone.io/runner/docker/installation/linux/
# https://docs.drone.io/server/metrics/
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=drone
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET}
- DRONE_RUNNER_NAME="${HOSTNAME}-runner"
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NETWORKS=cicd_net
- DRONE_DEBUG=false
- DRONE_TRACE=false
ports:
- "3002:3000"
networks:
- cicd_net
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
cicd_net:
name: cicd_net
|
启动脚本boot.sh
配置
Bash |
---|
| #!/usr/bin/env bash
export HOSTNAME=$(hostname)
export DRONE_VERSION=1.10.1
export DRONE_RUNNER_VERSION=1.6.3
export GITEA_VERSION=1.13
export IP_ADDRESS=192.168.0.6
#export MINIO_ACCESS_KEY="EXAMPLEKEY"
#export MINIO_SECRET_KEY="EXAMPLESECRET"
export GITEA_ADMIN_USER="example"
export DRONE_RPC_SECRET="$(echo ${HOSTNAME} | openssl dgst -md5 -hex)"
export DRONE_USER_CREATE="username:${GITEA_ADMIN_USER},machine:false,admin:true,token:${DRONE_RPC_SECRET}"
export DRONE_GITEA_CLIENT_ID=""
export DRONE_GITEA_CLIENT_SECRET=""
docker-compose up -d
echo ""
echo "Gitea: http://${IP_ADDRESS}:3000/"
echo "Drone: http://${IP_ADDRESS}:3001/"
|
变量说明:
GITEA_ADMIN_USER
: gitea服务的管理员用户,如root
DRONE_RPC_SECRET
: 共享密钥,通过命令openssl rand -hex 16
生成后即可
DRONE_GITEA_CLIENT_ID
: Gitea OAuth2客户端ID
DRONE_GITEA_CLIENT_SECRET
: Gitea OAuth2客户端密钥
如何使用Gitea生成OAuth2客户端ID和密钥?
如何使用Gitea生成OAuth2客户端ID和密钥?
- 首次启动
boot.sh
(此时droneCI不可用)
- 进入
http://${IP}:3000/user/settings/applications
页面
- 填写应用名称:
DroneCI
- 填写重定向 URI:
http://${IP}:3001/login
- 点击创建应用,记下客户端ID和客户端密钥,然后填入
boot.sh
文件中
- 再次启动
boot.sh
,浏览器进入http://${IP}:3001
即可获取gitea授权
部署Drone CLI
安装Drone CLI
Bash |
---|
| curl -L https://github.com/drone/drone-cli/releases/latest/download/drone_linux_amd64.tar.gz | tar zx
sudo install -t /usr/local/bin drone
|
获取Drone Token
进入http://${IP}:3001/account
页面,复制关于Example CLI Usage
代码并执行:
Bash |
---|
| export DRONE_SERVER=http://{IP}:3001
export DRONE_TOKEN={Your_Token}
drone info
|
启动流水线
在gitea上创建一个测试库
此处使用Python测试库,更简洁的测试方法参考CICD With DroneCI and Gitea Using Docker Compose:

在Drone中激活此测试库
进入Drone,点击SYNC
同步刚刚建立的git仓库,然后在下面的列表中点击此仓库:

然后参考如下设置,点击SAVE CHANGES
保存更改即可。

推送到gitea并触发Drone构建
完整的用于DroneCI的Python测试仓库参考我的GitHub仓库demo: https://github.com/lz-wang/python_tests
提交变更后,即可触发DroneCI流水线,下图是触发后的页面:

参考