Drone-使用缓存插件优化构建速度
Drone-使用缓存插件优化构建速度
之前,我发表了一篇博客,关于自动化构建工具Drone:Drone-比Jenkins更轻量化的持续集成部署工具。经过几个月的实际使用,确实为我们团队减少了不少的重复性工作。
原先如果需要将新版本部署到测试环境,要经过手动的本地编译打包、上传服务器、停止旧服务、发布新服务等一系列步骤,而且手动发布经常会因为各种原因导致莫名浪费很多时间。现在只需要将代码提交Git后,Drone自动会完成这些重复的工作,省了很多的时间。
但是在使用过程中还有一个点让我特别不满,就是Drone的自动构建和发布需要的时间比较久,有时候经常十几分钟甚至半个小时都没有完成发布,而且经常经过长时间的等待后还会发布失败,严重影响到测试同学的工作效率。
查看Drone的构建日志,发现是打包项目的时候,下载构建项目需要的包用时比较久,而且因为网络的原因,经常下载失败导致构建失败。
我们构建下载的那些包是可以存在本地磁盘的,所以不需要每次都去下载。所以我使用了Drone的缓存插件:drone-volume-cache
,将下载的包缓存到磁盘中,下次再构建的时候就不需要下载了,从而提高构建速度。
这是优化后的脚本:
kind: pipeline # 默认为 pipeline
type: docker
name: deployment # 构建文件名称
steps: # 数组结构,流水线化的构建步骤
- name: loading cache # 加载缓存
pull: if-not-exists # 如果镜像不存在则拉取,免去每次都要重新下载
image: drillster/drone-volume-cache
volumes:
- name: cache
path: /cache
settings:
restore: true
mount:
- ./nugetpackages
- name: build # 构建项目
pull: if-not-exists # 如果镜像不存在则拉取,免去每次都要重新下载
image: mcr.microsoft.com/dotnet/sdk:6.0 # 本步骤运行在哪个docker镜像中,该镜像必须存在于 docker hub 中,可在 https://hub.docker.com/_/microsoft-dotnet-sdk 查看对应版本号
commands: # 构建过程中,将会依次执行的命令,如果命令退出码非0,将会终止构建本次构建
- echo ========开始构建并发布项目======== # 输出
- mkdir -p nugetpackages
- dotnet restore --packages ./nugetpackages -s https://api.nuget.org/v3/index.json -s ./nugetpackages # 项目重建、
- dotnet publish -c Release --no-restore --source ./nugetpackages -o ./app/publish --no-self-contained # 项目生成构建
- mv drone-ci-demo/Dockerfile ./app/publish
- echo ========项目发布成功========
- name: scp transmission file # 使用 scp 插件,将打包好的程序传送到需要部署的目标服务器
pull: if-not-exists
image: appleboy/drone-scp
settings:
host:
- 192.168.2.7
username: root
password:
from_secret: ssh_pwd
port: 22
command_timeout: 2m
target: /tmp/project-publish-ftp/drone-ci-demo # 目标服务器文件夹路径
overwrite: true
source:
- ./app/publish # 当前需要传输的文件夹
rm: true
- name: deploy # 步骤3 使用ssh访问主机
pull: if-not-exists
image: appleboy/drone-ssh
settings:
# 需要部署的主机地址
host: 192.168.2.7
# 主机ssh端口
port: 22
# 主机登陆用户名
username: root
password:
# 从drone仓库配置中秘密空间读取密码 ssh登录密码
from_secret: ssh_pwd
script:
- echo =========暂停并删除旧容器========
- docker stop drone-ci-demo && docker rm drone-ci-demo
- echo =========删除旧镜像=============
- docker rmi drone-ci-demo:latest
- echo =========打包镜像========
- cd /tmp/project-publish-ftp/drone-ci-demo/app/publish
- docker build -t drone-ci-demo:latest -t drone-ci-demo:${DRONE_COMMIT} .
- echo ===============运行镜像==========
- docker run --name drone-ci-demo --restart=always -p 90:80
-d drone-ci-demo:latest
- echo ========部署成功========
- name: rebuild cache # 构建缓存
image: drillster/drone-volume-cache
volumes:
- name: cache
path: /cache
settings:
rebuild: true
mount:
- ./nugetpackages
- name: notify # 步骤4 部署完成,邮件通知
pull: if-not-exists # 如果镜像不存在则拉取,免去每次都要重新下载
image: drillster/drone-email
settings:
recipients_only: true # 只发送给指定邮件收件人,不默认发送给流水线创建人
host: smtp.qq.com #SMTP服务器 例如 smtp.qq.com
port: 465 #SMTP服务端口 例如QQ邮箱端口465
subject: "Drone Build Complete!"
username: #邮箱用户名
from_secret: qqmail_username
password: #邮箱密码
from_secret: qqmail_pwd
from:
from_secret: qqmail_username
recipients: 1111111111@qq.com #收件人邮箱
when: #执行条件
status:
- success
- changed
- failure
# 挂载本地磁盘路径
volumes:
- name: cache
host:
path: /tmp/drone-cache
# 可限制哪些分支可以推送自动CICD
trigger:
branch:
- develop
脚本中使用插件 drone-volume-cache
在构建项目前后分别加载和保存需要使用的资源包,并且还使用了drone-scp
插件,将打包后的程序传送到需要部署的目标服务器,所以这个脚本比较适合单机部署。而之前博客的脚本使用了Harbor镜像仓库,比较适合多机器部署。
分类:
Linux工具部署
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?