个人开发者如何用Jenkins实现CI/CD自动化部署
1. 从手动到自动为什么个人开发者也需要Jenkins如果你和我一样是个喜欢折腾个人项目的开发者那你一定经历过这样的场景在本地写完代码测试通过后你需要手动登录到远程服务器拉取最新的代码然后执行一系列构建命令比如npm run build或者mvn clean package接着停止旧服务部署新构建的产物最后再启动服务。这个过程不仅繁琐而且容易出错。更头疼的是如果你同时在维护多个项目或者一个项目有多个服务这种重复劳动会迅速消耗你的热情和精力。这就是我决定引入 Jenkins 的原因。一开始我也觉得 Jenkins 是大型团队才需要的“重型武器”个人项目用起来有点“杀鸡用牛刀”。但实际用上之后我才发现它带来的效率提升和解放感对于个人开发者来说同样是革命性的。它就像一个不知疲倦的助手只要你把代码推送到仓库它就能自动帮你完成后续所有繁琐的部署工作。你可以把时间真正花在写代码和思考上而不是一遍又一遍地执行重复的部署命令。Jenkins 的核心价值在于“持续集成/持续部署”也就是我们常说的 CI/CD。对于个人项目CI/CD 并不意味着复杂的流水线和严格的代码审查而是将“部署”这个动作自动化、标准化。你不再需要记住每个项目的部署命令也不需要担心因为手误打错命令而导致的线上故障。一切流程都由 Jenkins Pipeline 定义好清晰、可重复、可追溯。今天我就结合自己的实践和你详细聊聊如何为个人项目搭建一套简单、高效、可靠的 Jenkins 自动化部署环境让你也能体验“一键部署”的畅快。2. 环境准备选择最适合个人场景的安装方式在开始之前我们需要一个运行 Jenkins 的环境。对于个人开发者最常见的场景是在一台云服务器上安装。这里我以 CentOS 7 为例因为它依然是很多云服务商的默认镜像稳定性也足够好。当然你也可以选择 Ubuntu 或其他 Linux 发行版核心步骤大同小异。2.1 基础环境JDK 与 Docker 的抉择Jenkins 本身是一个 Java 应用所以首先需要安装 Java 运行环境。网络上有很多教程会直接让你用yum install java-1.8.0-openjdk这当然可以。但为了更好的版本管理和一致性我推荐一个更“现代”的做法使用 Docker 来运行 Jenkins。为什么是 Docker对于个人环境Docker 有几个显而易见的优势环境隔离Jenkins 及其所有插件、工具链都被封装在一个容器里不会污染你的主机环境。哪天你想彻底清理 Jenkins直接删除容器和镜像即可非常干净。快速部署与升级拉取一个官方镜像几分钟就能跑起来。升级时直接拉取新版本镜像重新创建容器即可几乎是无缝的。一致性无论在哪个服务器上只要使用同一个镜像Jenkins 的运行环境就是完全一致的避免了“在我机器上好好的”这类问题。当然如果你对 Docker 不熟悉或者服务器资源极其有限比如只有 512MB 内存直接主机安装也是完全可行的。下面我会给出两种方式的详细步骤你可以根据自己的情况选择。方案一使用 Docker 运行 Jenkins推荐首先确保你的服务器已经安装了 Docker 和 Docker Compose。如果没有可以快速安装# 安装 Docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun systemctl start docker systemctl enable docker # 安装 Docker Compose curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose chmod x /usr/local/bin/docker-compose然后创建一个docker-compose.yml文件来定义 Jenkins 服务。这种方式比单纯用docker run命令更易于管理和配置。version: 3.8 services: jenkins: image: jenkins/jenkins:lts-jdk17 # 使用官方LTS版本基于JDK17 container_name: my-jenkins privileged: true # 避免容器内权限问题 user: root # 以root运行简化权限配置生产环境请谨慎 ports: - 8080:8080 # Jenkins Web 界面端口 - 50000:50000 # Jenkins Agent 通信端口 volumes: - ./jenkins_home:/var/jenkins_home # 挂载数据卷持久化配置和任务 - /var/run/docker.sock:/var/run/docker.sock # 挂载Docker守护进程套接字允许Jenkins容器内调用主机Docker - /usr/bin/docker:/usr/bin/docker # 挂载主机Docker客户端可选但更可靠 environment: - JAVA_OPTS-Djenkins.install.runSetupWizardfalse # 首次启动跳过安装向导需提前初始化注意上面配置中设置了跳过安装向导这要求/var/jenkins_home目录下已有初始化的配置文件。对于全新安装建议先不设置这个环境变量通过8080端口访问完成首次配置后再调整 compose 文件。或者你可以先运行一次从容器内复制初始密码文件到挂载卷。启动服务docker-compose up -d。访问http://你的服务器IP:8080按照页面提示从容器日志中获取初始管理员密码即可完成安装。方案二在 CentOS 7 主机上直接安装 Jenkins如果你选择主机安装步骤也很直接# 1. 安装 JDK (以 OpenJDK 11 为例) sudo yum install -y java-11-openjdk-devel java -version # 验证安装 # 2. 添加 Jenkins 官方仓库并安装 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key sudo yum install -y jenkins # 3. 启动并设置开机自启 sudo systemctl start jenkins sudo systemctl enable jenkins # 4. 查看初始密码 sudo cat /var/lib/jenkins/secrets/initialAdminPassword安装完成后同样访问http://你的服务器IP:8080进行初始化设置。两种方式对比我强烈推荐 Docker 方案。它不仅干净而且后续如果你想在 Jenkins 的 Pipeline 中使用 Docker 来构建和运行你的应用例如构建一个 Node.js 应用的镜像在方案一中因为已经挂载了 Docker SocketPipeline 里可以直接使用docker命令会方便很多。2.2 初始化配置与插件安装无论哪种安装方式首次通过 Web 界面访问时都会经历一个初始化流程。这里有几个关键选择插件安装Jenkins 会推荐安装一批常用插件。对于个人使用我建议直接选择“安装推荐的插件”。这包括了 Git、Pipeline、SSH Agent 等核心插件足以满足大部分自动化部署需求。如果网络不好导致安装失败可以多试几次或者后续在“插件管理”中手动安装。创建管理员用户务必创建一个强密码的管理员账户不要一直使用初始密码。实例配置保持默认的 Jenkins URL 即可除非你有特殊的域名或端口需求。初始化完成后你就进入了 Jenkins 的主仪表盘。一个干净的 Jenkins 环境就准备好了。3. 核心概念解析Job、Pipeline 与 Workspace在开始创建第一个自动化任务前我们需要理解 Jenkins 的几个核心概念这能帮助我们在后续配置中做出更合理的选择。Job任务这是 Jenkins 中可执行任务的基本单位。你可以把它想象成一个“工作说明书”里面定义了要做什么比如构建代码、怎么做执行的脚本、何时做触发条件。传统的 Jenkins 提供了多种 Job 类型如“自由风格软件项目”。但对于现代实践我们几乎只使用Pipeline。Pipeline流水线这是 Jenkins 的灵魂。它将整个软件交付过程从拉取代码、构建、测试到部署建模为一段代码通常是 Groovy 语法。这段代码被称为Jenkinsfile它可以被存放在项目的源代码仓库中。这样做的好处是巨大的版本化流水线配置和代码在一起可以跟随代码一起被评审和版本管理。可重复在任何能运行 Jenkins 的地方都能得到完全一致的构建结果。可视化Jenkins 提供了强大的 Pipeline 可视化界面你能清晰地看到每个阶段的执行状态和日志。一个最简单的Jenkinsfile可能长这样pipeline { agent any // 指定在哪台机器上运行 stages { stage(拉取代码) { steps { git https://github.com/your-username/your-repo.git } } stage(构建) { steps { sh npm install sh npm run build } } stage(部署) { steps { sh scp -r dist/* userserver:/path/to/deploy } } } }Workspace工作空间这是 Jenkins 为每次构建分配的一个独立目录。所有源代码的拉取、构建命令的执行、生成产物的存放默认都在这个目录下进行。你可以在 Jenkins 的 Web 界面中直接浏览某个构建的 Workspace 内容这对于调试构建失败非常有用。在 Pipeline 中你可以通过env.WORKSPACE这个环境变量来获取当前工作空间的绝对路径。Agent代理/节点Jenkins 默认在 Master 节点即你安装 Jenkins 的服务器上执行任务。但对于资源密集型任务或者需要特定环境比如 macOS 或 Windows的任务你可以配置额外的 Agent 节点。对于个人项目所有任务在 Master 上运行通常就足够了。但如果你有一台更强大的备用机器可以将其配置为 Agent专门用来执行构建减轻 Master 的负担。配置 Agent 需要安装“SSH Build Agents”等插件并在“系统管理”-“节点管理”中添加。理解了这些我们就可以开始动手创建第一个自动化部署任务了。4. 实战构建你的第一个自动化部署流水线假设我们有一个简单的 Vue.js 前端项目代码托管在 GitHub 上我们需要在每次向主分支推送代码时自动构建并将产物部署到服务器的 Nginx 静态目录下。4.1 创建 Pipeline 任务与基础配置在 Jenkins 首页点击“新建任务”。输入一个任务名称例如my-vue-project-deploy选择“流水线”类型然后点击“确定”。在任务配置页面我们主要关注以下几个部分描述写上这个任务是干嘛的方便自己日后查看。构建触发器这是决定何时自动运行任务的关键。我们选择“GitHub hook trigger for GITScm polling”。这需要配合 GitHub 的 Webhook 使用可以实现代码推送后立即触发构建。我们稍后再配置。流水线这里定义 Pipeline 脚本的来源。有两种主要方式Pipeline script直接将Jenkinsfile的内容粘贴在文本框里。适合快速测试。Pipeline script from SCM推荐使用这个。它让 Jenkins 从你的源代码仓库如 Git中读取Jenkinsfile。这样流水线配置就和代码在一起了。你需要配置仓库地址、凭据访问仓库的用户名密码或SSH密钥、以及Jenkinsfile在仓库中的路径默认为根目录。我们先选择“Pipeline script”写一个最简单的脚本来测试环境。4.2 编写第一个 Jenkinsfile从拉取到部署让我们创建一个功能更完整的Jenkinsfile它包含错误处理、环境变量使用等实践。pipeline { agent any // 使用任何可用的代理目前就是Master environment { // 定义环境变量便于管理和修改 PROJECT_NAME my-vue-app DEPLOY_PATH /usr/share/nginx/html // 服务器上的部署路径 SERVER_IP 192.168.1.100 // 部署目标服务器IP SERVER_USER deploy-user // 部署用SSH用户 } stages { stage(拉取代码) { steps { echo 开始从Git仓库拉取代码... // 使用checkout指令更灵活可以指定分支等 checkout([ $class: GitSCM, branches: [[name: */main]], // 拉取main分支 extensions: [], userRemoteConfigs: [[ url: https://github.com/your-username/your-vue-repo.git, credentialsId: github-ssh-key // 在Jenkins凭据管理中配置的SSH密钥ID ]] ]) // 打印当前提交信息便于追溯 sh git log -1 --oneline } } stage(安装依赖 构建) { steps { echo 开始安装项目依赖并构建... // 假设项目使用 npm sh npm ci // 使用 ci 命令比 install 更快、更严格适合自动化环境 sh npm run build } post { // 阶段后的处理无论成功失败都会执行 always { echo 构建阶段完成。 // 可以在这里归档构建产物但部署阶段通常直接使用 } success { // 构建成功可以做一些清理或通知 sh echo 构建成功 } } } stage(部署到服务器) { steps { echo 开始部署构建产物到 ${SERVER_IP}... // 使用 sshagent 插件来管理SSH密钥安全地执行远程命令 sshagent([deploy-server-ssh-key]) { // Jenkins中配置的服务器SSH私钥凭据ID // 1. 备份当前线上版本可选但建议做 sh ssh -o StrictHostKeyCheckingno ${SERVER_USER}${SERVER_IP} \ tar -czf /tmp/${PROJECT_NAME}-backup-$(date %Y%m%d%H%M%S).tar.gz -C ${DEPLOY_PATH} . // 2. 清空目标目录或使用rsync增量同步 sh ssh -o StrictHostKeyCheckingno ${SERVER_USER}${SERVER_IP} \ rm -rf ${DEPLOY_PATH}/* // 3. 将构建产物dist目录复制到服务器 sh scp -o StrictHostKeyCheckingno -r ${WORKSPACE}/dist/* ${SERVER_USER}${SERVER_IP}:${DEPLOY_PATH}/ // 4. 可选重启Nginx或相关服务 sh ssh -o StrictHostKeyCheckingno ${SERVER_USER}${SERVER_IP} \ sudo systemctl reload nginx } } post { success { echo 部署成功应用已更新。 // 可以在这里集成钉钉、企业微信等通知 } failure { echo ❌ 部署失败 // 可以在这里触发回滚例如从备份恢复 sh ssh -o StrictHostKeyCheckingno ${SERVER_USER}${SERVER_IP} \ echo 部署失败请检查日志。备份文件位于 /tmp/${PROJECT_NAME}-backup-*.tar.gz } } } } post { // 整个流水线结束后的处理 always { echo 流水线 ${currentBuild.fullDisplayName} 执行完毕。 // 清理工作空间可选Jenkins可以配置自动清理 // cleanWs() } failure { echo 流水线执行失败 // 发送失败通知 } } }这个脚本做了几件关键事情使用环境变量将服务器IP、路径等信息定义为变量便于统一修改和维护。安全的Git克隆使用credentialsId引用在 Jenkins 中预先配置好的 SSH 密钥避免在脚本中硬编码密码。使用 npm ci在自动化环境中npm ci比npm install更可靠它严格根据package-lock.json安装依赖确保每次构建的依赖树一致。SSH 密钥管理使用sshagent步骤块它会在块内自动管理SSH私钥执行远程命令时无需手动处理密钥文件既安全又方便。部署策略包含了简单的备份、清理、复制和重启服务步骤。在实际中你可能需要考虑更优雅的部署策略如蓝绿部署或滚动更新但对于个人项目这个简单脚本已经非常实用。后置处理每个stage和整个pipeline都有post块用于根据成功或失败状态执行不同的操作如发送通知、执行回滚。4.3 配置凭据与 Webhook 实现自动触发配置凭据Jenkins 的凭据管理非常安全。我们需要配置两种凭据访问 Git 仓库的凭据进入“系统管理” - “管理凭据” - “全局凭据” - “添加凭据”。选择“SSH Username with private key”类型将你的私钥粘贴进去并设置一个 ID如github-ssh-key在Jenkinsfile中会用到这个 ID。访问部署服务器的 SSH 私钥同样添加一个“SSH Username with private key”类型的凭据私钥是能登录到部署服务器SERVER_USER的那个ID 设为deploy-server-ssh-key。配置 GitHub Webhook为了实现代码一推送就自动构建我们需要在 GitHub 仓库设置 Webhook。进入你的 GitHub 仓库 - Settings - Webhooks - Add webhook。Payload URL: 填写http://你的Jenkins服务器IP:8080/github-webhook/。如果你的 Jenkins 有域名且启用了 HTTPS则用 HTTPS。Content type: 选择application/json。在 Jenkins 任务配置的“构建触发器”中我们已经勾选了“GitHub hook trigger for GITScm polling”。这会让 Jenkins 监听这个 Webhook。回到 Webhook 设置页面点击“Add webhook”。GitHub 会发送一个测试 Ping如果配置正确在 Jenkins 的“系统日志”中可以看到相关记录。现在当你向这个仓库的 main 分支推送代码时GitHub 会通知 JenkinsJenkins 会自动触发一次构建并执行Jenkinsfile中定义的所有步骤最终完成部署。整个过程完全无需你手动干预。5. 进阶技巧与避坑指南基础流程跑通后我们可以让它更健壮、更高效。下面分享几个我在实践中总结的进阶技巧和常见问题的解决方法。5.1 优化构建速度与资源利用个人服务器的资源通常有限优化构建速度很重要。使用 Docker 作为构建环境在 Pipeline 中可以为每个stage甚至整个pipeline指定一个 Docker 镜像作为agent。这能确保每次构建都在一个纯净、一致的环境中开始避免了主机环境依赖冲突的问题也便于切换不同技术栈如 Node.js 14 和 16。例如pipeline { agent none // 不在全局指定在stage中指定 stages { stage(Build) { agent { docker { image node:16-alpine // 使用轻量级的Alpine Node镜像 args -v /home/jenkins/.npm:/root/.npm // 挂载npm缓存加速安装 } } steps { sh npm ci npm run build } } } }合理利用缓存像 npm、Maven、Gradle 这类工具都有本地仓库缓存。你可以通过挂载卷Docker方式或在构建步骤中显式缓存目录来避免每次构建都重新下载全部依赖。Jenkins 也有“缓存”相关的插件。并行执行如果项目有独立的单元测试、集成测试等阶段且它们之间没有依赖可以在stage中使用parallel指令让它们同时运行缩短整体流水线时间。stage(测试) { parallel { stage(单元测试) { steps { sh npm run test:unit } } stage(集成测试) { steps { sh npm run test:integration } } } }5.2 处理复杂项目多服务与多环境如果你的个人项目是一个微服务架构或者需要区分开发、测试、生产环境Jenkins Pipeline 也能很好地应对。多服务仓库如果你的一个 Git 仓库里包含了多个独立服务即 Monorepo你可以在Jenkinsfile中使用dir()指令进入不同子目录进行操作。stage(构建服务A) { steps { dir(service-a) { sh mvn clean package } } } stage(构建服务B) { steps { dir(service-b) { sh npm run build } } }参数化构建你可以让流水线在启动时接受参数比如选择要部署的分支、环境等。在任务配置中勾选“参数化构建过程”添加“选项参数”或“字符串参数”。在Jenkinsfile中可以通过params.ENV来引用。pipeline { parameters { choice(name: DEPLOY_ENV, choices: [dev, staging, prod], description: 选择部署环境) } stages { stage(部署) { steps { script { if (params.DEPLOY_ENV prod) { // 执行生产环境特有的严格检查 sh echo 正在部署到生产环境请确认 } // 根据参数选择不同的部署配置 sh ./deploy.sh --env ${params.DEPLOY_ENV} } } } } }这样每次构建时你可以手动选择参数也可以在其他自动化触发中传递参数。5.3 常见问题排查与调试“Permission denied” (publickey)这是 SSH 连接失败最常见的原因。确保在 Jenkins 凭据中配置的私钥是正确的且对应的公钥已经添加到 GitHub 或部署服务器的~/.ssh/authorized_keys文件中。部署服务器的 SSH 服务允许该密钥登录。使用ssh -v命令在服务器上手动测试连接查看详细日志。Workspace 找不到文件在 Pipeline 脚本中路径是相对于WORKSPACE的。如果你在一个stage的dir()块中切换了目录后续stage的路径又会回到WORKSPACE根目录。记住使用绝对路径{WORKSPACE}/subdir或妥善管理工作目录。Pipeline 脚本语法错误Jenkins 提供了一个非常实用的“流水线语法”工具。在任务配置页面点击“流水线语法”链接你可以通过可视化方式生成各个步骤如git,sh,sshagent的代码片段避免手写语法错误。查看控制台输出构建失败时第一件事就是点开构建历史查看“控制台输出”。里面的日志会详细告诉你错误发生在哪一行、是什么错误。学会阅读 Jenkins 的控制台日志是排错的基本功。中文乱码问题如果在控制台输出中看到中文乱码可能是 Jenkins 容器或服务器的 Locale 设置问题。可以在启动 Jenkins 容器时增加环境变量-e LANGC.UTF-8或-e LANGzh_CN.UTF-8。对于主机安装可以检查服务器的语言环境设置。6. 维护与监控让自动化流程持续稳定运行搭建好流水线只是第一步确保它能长期稳定运行同样重要。定期更新 Jenkins 与插件LTS 版本的 Jenkins 和插件会定期发布安全更新和功能改进。建议在测试环境先进行更新测试。对于 Docker 安装更新就是拉取新镜像并重启容器。管理磁盘空间Jenkins 的 Workspace 和构建历史会占用大量磁盘空间。在“系统管理”-“全局工具配置”中可以设置“丢弃旧的构建”策略自动清理历史记录。对于 Docker 安装也要注意清理无用的 Docker 镜像和容器。备份 Jenkins 配置你的所有任务配置、凭据需额外处理、插件设置都存储在JENKINS_HOME目录Docker 挂载的jenkins_home卷或主机的/var/lib/jenkins。定期备份这个目录至关重要。你可以写一个简单的脚本用tar命令打包然后传到其他存储位置。设置构建通知虽然自动化了但你仍然需要知道构建的结果。Jenkins 支持邮件、钉钉、企业微信等多种通知方式。安装像“Email Extension Plugin”这样的插件可以定制化构建成功或失败时的邮件内容让你及时知晓状态。最后我想说的是为个人项目引入 Jenkins 这类自动化工具最大的收获不仅仅是节省了时间更是一种工程思维的训练。它迫使你去思考如何将一次手动的、充满不确定性的操作转化为一个标准化、可重复的流程。这个过程本身就是对软件交付生命周期的一次深刻理解。当你看到代码推送后一系列任务自动、有序地执行并最终成功部署时那种成就感和掌控感是手动操作无法比拟的。

相关新闻

Mac 上使用 Homebrew 安装配置 MySQL 与 Workbench 全攻略

Mac 上使用 Homebrew 安装配置 MySQL 与 Workbench 全攻略

1. 项目概述:为什么在Mac上搭建MySQL环境值得投入 如果你是一名在Mac上工作的开发者、数据分析师,或者只是对数据库技术感兴趣的学习者,那么亲手在本地搭建一套MySQL环境,并配上一个顺手的图形化管理工具,几乎是绕不开…

2026/10/17 3:23:10 阅读更多 →
基于传感器数据与大语言模型的智能睡眠护理系统SAGE架构详解

基于传感器数据与大语言模型的智能睡眠护理系统SAGE架构详解

1. 项目概述:当大语言模型遇见睡眠监测最近在折腾一个挺有意思的项目,名字听起来有点唬人,叫“SAGE: Sensor-Augmented Grounding Engine for LLM-Powered Sleep Care Agent”。简单翻译一下,就是一个用传感器数据来“锚定”大语言…

2026/10/17 3:23:33 阅读更多 →
多智能体模拟中基于榜样学习的道德规范演化:技术实现与工程实践

多智能体模拟中基于榜样学习的道德规范演化:技术实现与工程实践

1. 项目概述:当智能体学会“看齐”最近在捣鼓多智能体模拟时,我一直在琢磨一个挺有意思的问题:我们常说“榜样的力量是无穷的”,这句话在人类社会里几乎是个常识,但如果我们把一群AI智能体扔进一个虚拟社会里&#xff…

2026/10/18 16:19:41 阅读更多 →

最新新闻

VB编写OPC UA客户端:从连接到订阅的完整实战指南

VB编写OPC UA客户端:从连接到订阅的完整实战指南

简介:这是面向工业自动化开发者的OPC UA客户端示例,基于Visual Basic(VB)编写,适合正在学习OPC UA通信协议,或需要在VB环境中快速实现数据采集与读写功能的工程师借鉴参考。压缩包大小15.26MB,共…

2026/10/20 17:36:10 阅读更多 →
EtherNet/IP 网络调试:设备扫描、CIP 连接与排障实战

EtherNet/IP 网络调试:设备扫描、CIP 连接与排障实战

简介:Ethernet/IP Tool V2.2.0 是一款面向自动化与工业网络工程师的 Ethernet/IP 协议调试测试工具,支持设备发现、实时数据交互、参数配置与通信故障排查,适用于设备集成、网络运维及教学培训等场景。压缩包共 20 个文件,以 exe …

2026/10/20 17:36:10 阅读更多 →
SQL Server JDBC无法打开数据库MSSQLSERVER排查与修复

SQL Server JDBC无法打开数据库MSSQLSERVER排查与修复

如果你在日志里看到这条 com.microsoft.sqlserver.jdbc.SQLServerException: 无法打开登录所请求的数据库 "MSSQLSERVER"。登录失败。 ,第一反应多半是"数据库连不上了,赶紧检查账号密码"。但按这个思路去排查,大概率会…

2026/10/20 17:36:10 阅读更多 →
Selenium四类高频难点完整方案:下拉框、文件上传、弹窗与多窗口切换

Selenium四类高频难点完整方案:下拉框、文件上传、弹窗与多窗口切换

做Web自动化测试,跑到电商、后台管理系统这类项目时,脚本最容易翻车的其实不是登录、不是数据断言,而是下拉框、文件上传、弹窗和多窗口切换这种看起来不起眼的交互操作。很多新人在这四个场景上栽了跟头,多半是因为官方文档只讲了…

2026/10/20 17:36:10 阅读更多 →
Selenium进阶:JS执行、Cookie管理与浏览器配置实战

Selenium进阶:JS执行、Cookie管理与浏览器配置实战

做Selenium自动化做了几年,我最大的感受是:能被 find_element 和 click 解决的需求,只能算 Selenium 的入门玩法。真正让你在复杂页面、登录态、无人值守环境中活下来的,往往是三样进阶技能——JavaScript 执行、Cookie 管理和…

2026/10/20 17:36:10 阅读更多 →
Windows下CUDA 11.8配cuDNN 8.9.7.29完整配置指南

Windows下CUDA 11.8配cuDNN 8.9.7.29完整配置指南

简介:本资源为NVIDIA官方CUDNN 8.9.7.29 Windows x64版本完整安装包,专为使用CUDA 11.x进行深度学习开发的Windows开发者设计,适用于TensorFlow、PyTorch等框架的GPU加速部署与本地模型训练优化。压缩包共32个文件,包含14个.lib库…

2026/10/20 17:35:09 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →