GitLab版本升级全流程实战:从评估、测试到生产部署与问题排查
1. 项目概述为什么说GitLab升级是个“技术活”干了这么多年运维和DevOps我处理过不下几十次GitLab的版本升级。从最初的战战兢兢到后来的驾轻就熟中间踩过的坑、熬过的夜足够写一本“血泪史”。很多团队把GitLab升级看作一个简单的“点一下按钮”或者“跑一条命令”的事情结果往往在升级后遇到各种诡异问题CI/CD流水线突然失败、仓库数据不一致、甚至整个服务挂掉。今天我就结合自己多年的实战经验把GitLab版本升级这个“技术活”从头到尾拆解清楚让你不仅能安全升级更能理解每一步背后的逻辑做到心里有底。GitLab不仅仅是一个代码仓库它集成了项目管理、CI/CD、容器镜像仓库、安全扫描等一整套DevOps工具链。这意味着它的升级不是一个孤立事件而是一个牵一发而动全身的系统工程。升级的核心目标通常有三个获取新功能、修复安全漏洞、保持官方技术支持。尤其是安全漏洞修复在相关热搜词里频繁出现“gitlab高危漏洞修复方案”这往往是驱动紧急升级的最直接原因。一个未及时修复的漏洞可能成为整个研发体系的安全短板。那么这个项目适合谁呢如果你是团队中的运维工程师、DevOps工程师、或者负责基础架构的研发同学需要对线上GitLab实例的生命周期负责那么这篇内容就是为你准备的。我会假设你已经有GitLab的基础运维经验比如会日常备份、查看日志、修改配置等。我们将不局限于某条具体命令而是深入探讨从评估、准备、实施到验证的全流程以及如何应对那些“教科书上不会写”的意外情况。2. 升级前的深度评估与规划盲目开始升级是最大的风险来源。在动手之前我们必须像医生做手术前会诊一样对当前环境和升级目标进行全方位的评估。2.1 明确升级路径与版本兼容性这是第一步也是最容易出错的一步。GitLab官方并不支持跨大版本的直接升级例如从13.x直接跳到15.x你必须遵循官方的升级路径逐个中间版本升级。你需要先确定当前的确切版本。# 登录GitLab服务器执行以下命令查看当前版本 sudo gitlab-rake gitlab:env:info | grep -i “version”假设你查到的版本是14.10.5而你的目标版本是16.9.0。你不能直接升级。你需要查阅GitLab官方文档的“升级路径”章节。通常路径可能是14.10.5-15.0.x-15.x-16.0.x-16.9.0。你需要规划出所有必须经过的中间版本号。注意务必使用官方文档。不同版本间的升级指引可能有细微差别特别是涉及PostgreSQL、Gitaly等核心组件升级时。直接搜索“Upgrade GitLab”加上你的起始版本号找到官方的升级指南页面。除了主版本还需要特别注意版本生命周期。GitLab社区版和企业版对不同版本的支持周期不同。如果你正在使用的版本已经接近“生命周期结束”那么升级就不仅是功能需求更是安全需求。评估时要列出所有需要经过的版本并确认每个目标版本是否仍处于标准支持或安全维护期内。2.2 全面检查系统状态与依赖升级成功的前提是当前系统本身是健康的。你需要进行一次全面的“体检”。系统资源检查确保磁盘空间充足。升级过程会解压新包、备份数据库、可能产生临时文件。建议可用空间至少是当前GitLab数据目录大小的两倍。同时检查内存和CPU升级过程中某些步骤如数据库迁移资源消耗较大。组件状态检查运行GitLab的健康检查命令。sudo gitlab-rake gitlab:check仔细查看输出确保没有严重的警告或错误。常见的如Sidekiq队列积压、仓库存储路径权限问题等必须在升级前解决。备份验证这是你的“救命稻草”。绝对不要在未验证备份有效性的情况下进行升级。执行一次完整备份sudo gitlab-backup create备份完成后不要以为就万事大吉了。真正关键的一步是验证备份。我个人的习惯是在测试环境中尝试用这个备份恢复一个实例。如果条件不允许至少也要检查备份文件是否完整生成、大小是否合理并确保备份文件已经被安全地传输到异地存储如另一个机房或云存储。第三方集成与定制化检查列出所有与当前GitLab实例集成的外部系统LDAP/AD认证、Jira、Jenkins、自定义的CI Runner、Webhook接收端、以及任何通过修改源代码或配置文件实现的定制化功能。评估这些集成和定制在目标版本中是否仍然兼容。官方升级说明中通常会有一个“重大变更”章节必须逐条阅读。2.3 制定详尽的回滚方案任何变更管理都必须包含回滚计划。对于GitLab升级回滚的复杂度和风险远高于普通应用。回滚的核心难点在于数据库。GitLab升级通常会伴随数据库schema迁移。一旦迁移执行成功数据库结构就发生了变化通常情况下无法直接降级回旧版本。因此我们的回滚方案主要依赖于备份。详细的回滚步骤预案应包含立即停止所有写入操作可暂时将GitLab置为只读模式。停止GitLab所有服务。将当前出问题的数据目录重命名作为问题现场保留。从已验证的、升级前创建的完整备份中进行恢复。恢复完成后启动旧版本GitLab服务。这个预案必须提前写好并和团队沟通清楚触发条件例如升级后核心功能不可用超过15分钟或数据一致性出现问题时。记住时间就是数据犹豫会放大损失。3. 搭建隔离的测试环境与演练“在测试环境踩遍所有的坑在生产环境才能如履平地。”这句话对于GitLab升级尤其正确。搭建一个与生产环境尽可能相似的测试环境是升级成功率的保障。3.1 测试环境构建策略理想情况是使用与生产环境完全一致的硬件/云资源配置、操作系统版本和安装方式Omnibus包、Docker、Helm Chart等。将生产环境的有效备份恢复到测试环境这是最真实的演练。数据脱敏如果备份中包含真实用户数据代码、问题、合并请求等在恢复到测试环境前务必考虑数据脱敏。特别是当测试环境网络隔离性不强时防止敏感代码泄露。模拟升级在测试环境严格按照规划好的升级路径一步一步执行升级操作。记录下每一步的命令、输出、耗时以及遇到的任何警告或错误。功能验证清单创建一个详细的检查清单在测试环境升级后逐项验证。清单应包括用户登录特别是第三方认证。代码仓库的克隆、推送、拉取。查看问题、合并请求。CI/CD流水线的创建与运行这是重灾区。Webhook的触发。管理员后台各项设置。集成功能如Jira、Jenkins。3.2 记录演练中的“坑”与解决方案在测试演练中你会遇到各种预料之外的问题。这正是演练的价值所在。例如你可能会发现从14.x升级到15.0时因为默认的Sidekiq队列命名发生了变化导致你自定义的监控告警规则失效。某个版本的升级需要手动执行一个数据迁移的Rake任务而文档中可能用小字提示容易被忽略。升级后之前配置的某些CSS自定义样式因为前端资源路径改变而全部失效。将所有这些问题、排查过程和最终解决方案详细记录下来。这份记录将成为你生产升级操作的“作战手册”能极大降低紧张感和操作失误率。4. 生产环境升级实操全流程解析当测试环境验证通过回滚方案准备就绪升级窗口期通常选择低峰时段如深夜也已确定就可以开始生产升级了。下面以最常见的Omnibus包安装方式为例详解核心步骤。4.1 执行最终检查与备份在升级窗口开始时不要急着敲命令。先做最后确认通告通知所有用户系统即将进入维护窗口。置只读可选但推荐对于重大升级可以将GitLab置于只读模式防止升级期间用户写入数据造成复杂状态。sudo gitlab-ctl deploy-page up最终备份执行升级前的最后一次全量备份。即使几小时前刚备份过也要再做一次。确保备份文件命名包含时间戳和版本号如backup_20231027_0200_pre_upgrade_14.10.5.tar。检查服务状态确认所有GitLab服务运行正常为升级后对比提供基线。4.2 分步升级操作详解假设我们的升级路径第一步是从14.10.5到15.0.0。获取升级包根据你的操作系统下载目标版本的Omnibus安装包。最好提前下载到服务器本地避免升级过程中网络问题。# 例如对于Ubuntu/Debian wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/focal/gitlab-ce_15.0.0-ce.0_amd64.deb/download.deb -O gitlab-ce_15.0.0.deb执行升级安装使用包管理器安装新版本包这会自动替换旧版本文件并触发升级脚本。sudo dpkg -i gitlab-ce_15.0.0.deb关键点安装过程中包管理器会运行gitlab-ctl reconfigure。这个命令是升级的核心它会根据新版本的模板生成新的配置文件如gitlab.rb中的自定义设置会被保留合并。执行数据库迁移Migration。重新配置并启动所有服务。监控升级过程reconfigure命令的输出会非常长你需要密切关注其中有无错误ERROR信息。一个常见的做法是将输出重定向到文件同时用tail -f监控关键阶段。sudo gitlab-ctl reconfigure 21 | tee /var/log/gitlab/reconfigure_15.0.0.log重点关注数据库迁移步骤这里耗时最长也最容易出错。如果卡住需要根据日志具体分析。4.3 升级后立即进行的验证安装和reconfigure完成后GitLab服务会自动启动。但这不意味着升级成功。服务状态检查sudo gitlab-ctl status确保所有服务nginx sidekiq gitlab-workhorse postgresql等都是run状态。如果有down或不断重启的服务立即查看对应日志/var/log/gitlab/service-name/current。运行健康检查sudo gitlab-rake gitlab:check对比升级前的检查结果看是否有新增的警告。一些警告可能在升级后首次出现是正常的例如提示需要重启Redis按提示处理即可。快速功能冒烟测试以管理员和普通用户身份快速执行核心操作登录、访问项目页面、拉取一个仓库、创建一个新的合并请求。这个阶段的目标是确认“系统可用”而非详细测试所有功能。取消只读模式如果之前设置了只读现在可以关闭。sudo gitlab-ctl deploy-page down如果以上步骤都顺利那么第一个目标版本的升级就完成了。你需要重复这个过程下载包、安装、reconfigure、验证按照规划路径一步步升级到下一个中间版本直至最终目标版本。切记不要跳版本5. 升级后专项测试与监控生产服务恢复后升级工作只完成了一半。接下来需要一段时间的稳定观察和专项测试。5.1 核心功能回归测试在升级后的几天内组织测试人员或让内部用户配合进行更全面的功能测试。重点测试那些在测试环境中难以完全模拟的、与生产数据强相关的场景大型仓库操作克隆、获取一个历史很深、体积很大的仓库。复杂CI/CD流水线运行那些包含多阶段、多依赖、有复杂制品传递的流水线。检查构建日志、产物生成、部署步骤是否正常。集成链路触发一个真实的Webhook看外部系统如Jenkins、钉钉/飞书群是否能正常接收和处理。测试从Jira创建分支等功能。后台管理检查所有管理员设置页面确认配置项均正常加载和保存。5.2 系统性能与稳定性监控升级可能引入性能变化。你需要密切监控以下指标至少一周系统资源CPU、内存、磁盘I/O、网络流量。与升级前基线对比看是否有异常增长。GitLab服务指标页面响应时间通过监控工具或查看Nginx访问日志。Sidekiq队列长度使用sudo gitlab-rake gitlab:sidekiq:monitor或直接查看管理后台。队列积压是常见问题。Gitaly性能Gitaly是Git操作的核心服务监控其请求延迟和错误率。数据库连接数和慢查询PostgreSQL的连接池是否吃紧是否有新的慢查询出现。日志审计定期查看/var/log/gitlab下各服务的日志特别是application.log和sidekiq.log过滤ERROR和WARN级别信息及时发现潜在问题。6. 常见问题排查与修复实录即使准备再充分在生产升级中也可能遇到问题。这里分享几个我亲身遇到过的高频问题及其解决思路。6.1 数据库迁移失败现象在sudo gitlab-ctl reconfigure过程中卡在Running rake db:migrate或类似步骤最终报错退出提示某个数据库迁移失败。原因分析这是最严重的问题之一。可能原因有1磁盘空间不足2数据库本身存在数据不一致升级前健康检查未发现3特定版本迁移脚本的Bug4自定义数据库扩展冲突。解决步骤立即停止操作如果reconfigure失败服务很可能处于一个半升级的混乱状态。不要尝试重启服务。检查日志查看/var/log/gitlab/gitlab-rails/application.log和/var/log/gitlab/reconfigure.log找到具体的错误信息。常见处理磁盘空间清理磁盘后重试sudo gitlab-ctl reconfigure。数据不一致根据错误信息可能需要在回滚后于旧版本中运行一些修复性的Rake任务如gitlab-rake gitlab:db:repair修复后再尝试升级。迁移脚本Bug搜索错误信息很可能在GitLab官方Issue中找到线索。有时需要手动执行一个跳过某条迁移的指令需极端谨慎并参考官方建议。决策点如果短时间内无法解决应立即启动回滚预案用备份恢复服务。将问题隔离到测试环境研究透彻后再择机尝试。6.2 Sidekiq队列积压或Job失败现象升级后CI/CD流水线卡在“Pending”状态或者邮件发送失败管理后台显示Sidekiq队列有大量任务堆积且失败任务数不断增加。原因分析Sidekiq是GitLab的异步任务处理器。升级可能导致1Job的类结构或参数发生变化旧队列中的Job无法被新版本的Worker处理2Redis数据结构不兼容3某个Worker依赖的外部服务如SMTP配置失效。解决步骤清空旧队列这是处理不兼容Job的常用方法。进入GitLab管理后台Admin Area - Monitoring - Background Jobs查看所有队列。可以尝试重试失败任务但如果持续失败可能需要清空特定的队列。注意清空队列意味着丢弃那些任务比如会丢失排队中的邮件通知。需评估影响。# 也可以在命令行清空所有Sidekiq队列谨慎 sudo gitlab-rake gitlab:sidekiq:drop_post_deployment_migrations # 或者清空特定队列 sudo gitlab-rails runner “Sidekiq::Queue.new(‘pipeline_processing’).clear”检查Worker日志查看/var/log/gitlab/sidekiq/current找到导致Job失败的具体错误。检查依赖服务确认SMTP、LDAP等外部集成配置在升级后是否依然正确。有时gitlab.rb的配置语法在新版本中略有变化需要调整。6.3 页面访问出现500错误或静态资源404现象升级后访问GitLab页面出现白屏或500错误浏览器控制台显示大量JS/CSS文件加载失败404。原因分析前端资源编译失败或路径错误。Omnibus包在reconfigure时会运行assets:precompile。如果这个过程因内存不足或其他原因失败或中断就会导致前端文件缺失。解决步骤检查编译日志查看reconfigure日志中关于资产预编译的部分。手动触发编译尝试手动执行编译命令。sudo gitlab-rake assets:precompile RAILS_ENVproduction检查权限确保/var/opt/gitlab/gitlab-rails/shared等目录的权限属于git用户。重启服务编译完成后重启GitLab服务。sudo gitlab-ctl restart6.4 备份恢复失败现象升级失败后尝试用备份恢复但恢复过程报错无法完成。原因预防与解决预防优于治疗这就是为什么强调必须在测试环境验证备份恢复流程。很多恢复失败是因为备份本身不完整或者恢复环境如GitLab版本、系统库版本与备份环境不一致。检查版本匹配恢复备份时目标GitLab实例的版本必须与创建备份时的版本完全一致。你不能用14.10的备份恢复到15.0的环境。检查空间和权限恢复需要临时空间且运行恢复命令的用户通常是git需要对相关目录有读写权限。分析恢复日志恢复命令会输出详细日志仔细阅读错误信息。常见问题包括数据库连接失败、磁盘空间不足、备份文件损坏等。升级GitLab是一个系统工程它考验的不仅是技术更是流程、预案和心态。最深刻的体会是尊重流程敬畏生产。每一次成功的升级背后都是周密的计划、彻底的测试和可靠的兜底方案。不要追求速度要求稳。当你在测试环境解决了所有问题生产升级就会变成一个按剧本执行的、枯燥但安稳的过程——而这正是我们运维工作者最希望看到的结果。

相关新闻

深入解析Set-Cookie:从原理到实战的Web状态管理指南

深入解析Set-Cookie:从原理到实战的Web状态管理指南

1. 项目概述:从“小饼干”到网络通行证如果你在浏览器里输入一个网址,登录后刷新页面,发现依然保持着登录状态,这背后默默工作的功臣就是Cookie。这个听起来像“小饼干”的技术,实际上是Web世界维持用户状态、实现个性…

2026/8/15 6:27:28 阅读更多 →
C++游戏开发实战:用Dev-C++和EasyX复刻升级版Chrome小恐龙

C++游戏开发实战:用Dev-C++和EasyX复刻升级版Chrome小恐龙

1. 项目概述:从“小恐龙”到“跳跳跳”的代码进化几年前,那个在Chrome浏览器断网时出现的像素小恐龙,成了无数程序员和游戏爱好者心中的经典。它简单、纯粹,却蕴含着游戏设计最基础的乐趣:跳跃与躲避。今天&#xff0c…

2026/8/16 8:58:16 阅读更多 →
西门子PC Adapter USB A2连接PLC故障排查全攻略

西门子PC Adapter USB A2连接PLC故障排查全攻略

1. 从一次深夜调试的“失联”说起那天晚上十一点,我正远程指导一个现场的兄弟调试一台S7-300 PLC。他手头只有一根经典的西门子PC ADAPTER USB A2编程电缆,这是很多老西门子工程师工具箱里的“传家宝”,从早期的S7-200到S7-300/400&#xff0…

2026/8/15 6:27:28 阅读更多 →

最新新闻

腾讯云智能顾问:游戏架构主动治理与成本性能优化实战

腾讯云智能顾问:游戏架构主动治理与成本性能优化实战

1. 项目概述:当游戏架构治理遇上云原生智能 在游戏行业摸爬滚打十几年,从端游、页游到手游,再到现在的云游戏,我亲眼见证了技术架构复杂度的指数级增长。早期一个游戏服务器集群可能就几十台机器,运维靠人肉盯监控、半…

2026/8/16 8:57:57 阅读更多 →
从零构建微服务治理:Consul服务注册发现与配置中心实战指南

从零构建微服务治理:Consul服务注册发现与配置中心实战指南

1. 项目概述:为什么我们需要Consul? 在微服务架构里摸爬滚打几年后,我深刻体会到,服务之间的“找得到”和“管得住”是比写业务代码更让人头疼的事。想象一下,你的订单服务需要调用用户服务,你总不能把用户…

2026/8/16 8:57:57 阅读更多 →
Syncthing for Android 完整上手指南:不依赖网盘,5 步跑通手机与电脑的免费文件同步

Syncthing for Android 完整上手指南:不依赖网盘,5 步跑通手机与电脑的免费文件同步

Syncthing for Android 完整上手指南:不依赖网盘,5 步跑通手机与电脑的免费文件同步 【免费下载链接】syncthing-android Wrapper of syncthing for Android. 项目地址: https://gitcode.com/gh_mirrors/sy/syncthing-android 深夜加班&#xff0…

2026/8/16 8:57:57 阅读更多 →
基于QCustomPlot实现的Nyquist图、Nichols图

基于QCustomPlot实现的Nyquist图、Nichols图

目录 1.前言 2.底图预览 2.1Nyquist图 2.2Nichols图 3.附着标记点实现 4.代码附录 1.前言 Nyquist(奈奎斯特)图、Nichols(尼科尔斯)图是两种频率分析图表,与之相近的还有Bode图。由于其业务特性特性&#xff0c…

2026/8/16 8:57:57 阅读更多 →
AI模型部署实战:从推理优化到生产级运维的工程指南

AI模型部署实战:从推理优化到生产级运维的工程指南

1. 先搞清楚 River AI 这轮融资到底意味着什么 看到“General Catalyst 领投 River AI 11 亿美元融资”这个标题,很多人的第一反应可能是“又一个AI公司拿到钱了”。但如果你在关注AI基础设施、模型部署或者企业级AI应用,这轮融资背后有几个更值得关注的…

2026/8/16 8:57:57 阅读更多 →
PS4存档管理的终极解决方案:Apollo Save Tool完整上手教程

PS4存档管理的终极解决方案:Apollo Save Tool完整上手教程

PS4存档管理的终极解决方案:Apollo Save Tool完整上手教程 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 想象一下这个场景:你辛苦肝了上百小时的《血缘》存档,因为一…

2026/8/16 8:56:57 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →