1. Gitea配置
配置webhook远程访问权限(非远程可忽略),在 /data/gitea/conf/app.ini 文件中添加:
[webhook] ALLOWED_HOST_LIST = *
设置 -> 应用 -> 管理 OAuth2 应用程序,记下客户端ID和客户端密钥


2. Drone配置
docker-compose.yaml
version: "3" services: drone: image: drone/drone:latest restart: always container_name: drone ports: - 8080:80 environment: # gitea地址 - DRONE_GITEA_SERVER=${DRONE_GITEA_SERVER} # gitea客户端ID - DRONE_GITEA_CLIENT_ID=${DRONE_GITEA_CLIENT_ID} # gitea客户端密钥 - DRONE_GITEA_CLIENT_SECRET=${DRONE_GITEA_CLIENT_SECRET} # drone密钥(自定义字符串),与 runner 中的相同 - DRONE_RPC_SECRET=${DRONE_RPC_SECRET} # drone服务器地址 - DRONE_SERVER_HOST=${DRONE_SERVER_HOST} # drone服务器协议,http 或 https - DRONE_SERVER_PROTO=http # drone部署 git 是否总是进行认证(若项目为私有时需要) - DRONE_GIT_ALWAYS_AUTH=true # drone部署 git 账户的用户名 - DRONE_GIT_USERNAME=${DRONE_GIT_USERNAME} # drone部署 git 账户的密码 - DRONE_GIT_PASSWORD=${DRONE_GIT_PASSWORD} # drone创建管理员用户 - DRONE_USER_CREATE=username:giteauser,admin:true # 时区 - TZ=Asia/Shanghai volumes: - ./drone/data:/data drone-runner: image: drone/drone-runner-docker:latest container_name: drone-runner restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock environment: # drone服务器协议,http 或 https - DRONE_RPC_PROTO=http # 连接 drone 服务器的主机名(和可选端口) - DRONE_RPC_HOST=${DRONE_RPC_HOST} # 设置密钥,同上 - DRONE_RPC_SECRET=${DRONE_RPC_SECRET} # 限制运行程序可同时执行的管道数量 - DRONE_RUNNER_CAPACITY=2 # drone-runner名称 - DRONE_RUNNER_NAME=runner # 时区 - TZ=Asia/Shanghai ports: - 8081:3000 depends_on: - drone
使用管理员账户登录(非管理员账户缺少配置项),选择项目 -> settings


以springboot项目为例,在项目根目录添加 .drone.yml
kind: pipeline type: docker name: app steps: # 1. maven打包 - name: maven compile pull: if-not-exists # 构建镜像的 maven + jdk 选择,最好选择满足匹配你的项目版本的 image: maven:3-openjdk-8 volumes: # maven构建缓存 - name: maven-cache path: /root/.m2 # 挂载宿主机的目录 - name: maven-build path: /app/build commands: # 开始打包 maven 工程 - mvn clean package -Dmaven.test.skip=true # 将打包后的相关文件复制到宿主机映射目录 - cp target/*.jar /app/build - cp docker/* /app/build # 2. 构建镜像并创建容器 - name: build image pull: if-not-exists image: plugins/docker volumes: - name: socker path: /var/run/docker.sock - name: maven-build path: /app/build commands: - cd /app/build - docker build -t ${DRONE_REPO_NAME}:${DRONE_BUILD_NUMBER} . - (docker ps | grep ${DRONE_REPO_NAME} || echo __not_exist__) | grep __not_exist__ || docker stop ${DRONE_REPO_NAME} - (docker ps -a | grep ${DRONE_REPO_NAME} || echo __not_exist__) | grep __not_exist__ || docker rm ${DRONE_REPO_NAME} - docker run -d --name ${DRONE_REPO_NAME} -p 8080:8080 -e "TZ=Asia/Shanghai" ${DRONE_REPO_NAME}:${DRONE_BUILD_NUMBER} # 定义流水线挂载目录,用于共享数据 volumes: - name: maven-build host: # 从宿主机中挂载的目录 path: /opt/drone/app/build - name: maven-cache host: path: /root/docker/maven/cache - name: socker host: path: /var/run/docker.sock # drone执行触发器 trigger: branch: - main