Drone CI 小试

749 字
4 分钟
Drone CI 小试

Drone CI 安装#

参考官方教程, 事先在 gitea 中创建新的 Oauth2 应用

重定向 URI 根据实际情况填写, 例如这里 http://drone.sephy.io/login

Untitled 85
Untitled 85

接下来通过 docker 启动 drone

version: "3.8"
services:
drone:
image: drone/drone:2.22
container_name: drone
environment:
- TZ=Asia/Shanghai
- DRONE_GITEA_CLIENT_ID=${上一步gitea中创建的应用ID}
- DRONE_GITEA_CLIENT_SECRET=${上一步gitea中创建的应用secret}
- DRONE_GITEA_SERVER=http://gitea.sephy.io/ # gitea 地址
- DRONE_GIT_ALWAYS_AUTH=true
- DRONE_RPC_SECRET=${YOUR_DRONE_RPC_SECRET}
- DRONE_SERVER_HOST=drone.sephy.io # drone 域名
- DRONE_SERVER_PROTO=http
- DRONE_DATABASE_DRIVER=mysql # drone 连接到 mysql
- DRONE_DATABASE_DATASOURCE=${MYSQL_USER}:${MYSQL_PORT}@tcp(mysql:3306)/drone?parseTime=true
- DRONE_USER_CREATE=username:sephy,admin:true # 指定 sephy 与 gitea 的账号匹配并设置为管理员
volumes:
- ~/data/data/drone:/data:rw
restart: unless-stopped
depends_on:
- mysql

启动成功后 访问 http://drone.sephy.io

Untitled 86
Untitled 86

点击 continue 会进入 gitea 的 oauth2 认证流程, 成功后会返回 drone 进入主页

Untitled 87
Untitled 87

到此安装步骤完成

流水线配置#

drone ci 的核心是通过项目里的 .drone.yml 来定义流水线步骤, 这里查阅了很多资料, 结合自身实际情况搞出来这么一个适用于 spring boot + docker 构建部署的流水线, 其中流水线脚本涉及到的用户名密码, 可以通过 drone 的 secret 维护起来

Untitled 88
Untitled 88

完整的流水线如下:

  1. maven wrapper 构建(因为我用的私有 maven 库不支持 https, maven wrapper 用的 3.6.3 版本);
  2. docker 镜像构建上传(这里又涉及到配置 nexus 支持 docker 私服, 我又折腾了很久);
  3. 到指定机器部署
# https://github.com/lework/ci-demo-springboot/blob/master/.drone.yml
kind: pipeline
type: docker
name: default
trigger:
branch:
- feature/xxx
event:
- push
steps:
- name: maven-build
image: maven:3.9.6-eclipse-temurin-21
volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
- name: maven-cache
path: /root/.m2
commands:
- unset MAVEN_CONFIG # https://github.com/carlossg/docker-maven/issues/301
- ./mvnw clean package -pl web-server -am -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -U -B # -pl web-server 只构建 web-server -am 是向下的, 表示同时处理选定模块所依赖的模块
- cp web-server/target/web-server-0.0.1-SNAPSHOT.jar web-server/docker/app.jar
# https://plugins.drone.io/plugins/docker
- name: docker-build
image: plugins/docker
pull: if-not-exists
settings:
dockerfile: web-server/docker/Dockerfile
context: web-server/docker
registry: docker-registry.sephy.io
insecure: true
username:
from_secret: docker_registry_username
password:
from_secret: docker_registry_password
repo: docker-registry.sephy.io/java/web-server # 这里必须指定完整的仓库地址, 否则会推送到默认的 docker.io
mirror: http://docker-mirror.sephy.io
# cahce_from:
# - docker-registry.sephy.io/java/web-server:latest
build_args:
- JAR_FILE=app.jar
tags:
- latest
- main
# https://plugins.drone.io/plugins/ssh
- name: deplpy
image: appleboy/drone-ssh
environment:
#
DOCKER_REGISTRY_USERNAME:
from_secret: docker_registry_username
DOCKER_REGISTRY_PASSWORD:
from_secret: docker_registry_password
settings:
host: 192.168.50.21
username:
from_secret: ssh_username
password:
from_secret: ssh_password
port: 22
command_timeout: 2m
script:
- echo "deploy..."
- docker login -u ${DOCKER_REGISTRY_USERNAME} -p ${DOCKER_REGISTRY_PASSWORD} docker-registry.sephy.io
- docker pull docker-registry.sephy.io/java/web-server:latest
- docker compose --compatibility -f ~/docker-compose/docker-compose.b450.yml up -d web-server
# https://docs.drone.io/pipeline/docker/syntax/workspace/
volumes: # 定义流水线挂载目录,用于共享数据# 从宿主机中挂载的目录
- name: maven-cache
host:
path: /home/sephy/.m2

编写完成后, 提交到 gitea, 发现配置的 webhook 不能正常触发, 发现 gitea 需要配置 ALLOWED_HOST_LIST, 顺带修改 gitea 的 docker compose, 增加对应配置, 重启 gitea

version: "3.8"
services:
gitea:
image: gitea/gitea:1.21.4
container_name: gitea
environment:
- GITEA__webhook__ALLOWED_HOST_LIST=*

然后尝试推送新的代码, OK, 大功告成!

Untitled 89
Untitled 89

📎 参考文章#

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Drone CI 小试
https://blog.sephy.top/posts/drone-ci-小试/
作者
虾米
发布于
2024-02-17
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
虾米
coder
分类
标签
站点统计
文章
61
分类
4
标签
52
总字数
64,663
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.9
文章许可
CC BY-NC-SA 4.0