Gitea + Drone CI 实现 DevOps 自动化部署 CI/CD
2023年10月5日约 408 字大约 1 分钟
Gitea 作为代码仓库,Drone CI 作为持续集成工具,实现轻量级的 DevOps 自动化部署 CI/CD。
使用了 docker runner 来执行构建任务,通过自己编写 .drone.yml
,可以在不同的容器镜像中执行命令。
顺带一提,本站点也是使用这套工具实现自动化部署的,具体可以参考这个项目 naomi233.github.io
服务使用 docker compose
来管理
Gitea
# docker-compose.yml
services:
gitea:
image: gitea/gitea:1-linux-amd64
container_name: gitea
ports:
- 3000:3000
environment:
- TZ=Asia/Shanghai
- USER_UID=1000
- USER_GID=1000
restart: always
volumes:
- ./data:/data
设置 Gitea 的 OAuth 应用,Gitea 的 OAuth 应用可以在 Gitea 的 Settings
-> Applications
中找到。
填入 OAuth 应用名,重定向地址填写访问 Drone 的地址。
Drone CI
填入刚刚 Gitea 中注册的 OAuth 应用的 Client ID 和 Client Secret 到 .env
文件中。
# .env
# Drone CI 通信 Gitea OAuth 应用配置
GITEA_CLIENT_ID=
GITEA_CLIENT_SECRET=
# docker-compose.yml
services:
drone-server:
image: drone/drone:2
container_name: drone-server
restart: always
ports:
- 80:80
volumes:
- ./data:/data
environment:
- DRONE_GITEA_SERVER=http://gitea
- DRONE_GITEA_CLIENT_ID=${GITEA_CLIENT_ID}
- DRONE_GITEA_CLIENT_SECRET=${GITEA_CLIENT_SECRET}
- DRONE_RPC_SECRET=super-rpc-secret
- DRONE_USER_CREATE=admin:true
- DRONE_SERVER_PROTO=http
drone-runner:
image: drone/drone-runner-docker:1
container_name: drone-runner
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=drone-server
- DRONE_RPC_SECRET=super-rpc-secret
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=my-docker-runner
示例配置
下面是一个示例的 .drone.yml
配置文件,使用 pnpm 构建 Vue.js 项目并部署到服务器 /home/wwwroot/dist
路径上。
# .drone.yml
kind: pipeline
type: docker
name: Docs deploy
trigger:
branch:
- master
volumes:
- name: deploy
host:
path: /home/wwwroot/dist
steps:
- name: Build & Deploy
image: gplane/pnpm:9-node20
environment:
NODE_OPTIONS: --max_old_space_size=2048
volumes:
- name: deploy
path: /drone/src/dist
commands:
- pnpm config set registry https://mirrors.tencent.com/npm/
- pnpm config list
- pnpm install --frozen-lockfile
- pnpm run build