Drone CI 小试
749 字
4 分钟
Drone CI 小试
Drone CI 安装
参考官方教程, 事先在 gitea 中创建新的 Oauth2 应用
重定向 URI 根据实际情况填写, 例如这里 http://drone.sephy.io/login

接下来通过 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

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

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

完整的流水线如下:
- maven wrapper 构建(因为我用的私有 maven 库不支持 https, maven wrapper 用的 3.6.3 版本);
- docker 镜像构建上传(这里又涉及到配置 nexus 支持 docker 私服, 我又折腾了很久);
- 到指定机器部署
# https://github.com/lework/ci-demo-springboot/blob/master/.drone.ymlkind: pipelinetype: dockername: 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, 大功告成!

📎 参考文章
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
SpringBoot 在 Docker 容器中的 1 号进程
技术分享踩到了 1 个坑, 发现平滑关机在 docker 容器中没有按照预想的执行
2
Drone-docker-runner 共享宿主机maven缓存
技术分享2024-08-24
3
Docker 常用操作
技术分享2024-04-11
4
Nexus Docker 镜像仓库配置
技术分享之前一直想搞本地的 docker 代理, harbor 也折腾成功过, 但是这次为了配合 Drone CI 流水线(将构建的镜像发布到自建 docker 镜像仓库),折腾一下 nexus3 的 docker 代理相关配置
5
JMM
技术分享Java 内存模型详解。包含主内存/工作内存、happens-before、内存屏障、volatile 原理等。
随机文章随机推荐













