Jenkins自动化部署SpringBoot应用至Docker容器全流程解析
1. 为什么你需要JenkinsDocker这套组合拳如果你和我一样是个后端开发肯定经历过这样的“至暗时刻”本地代码跑得好好的一上测试服务器就各种报错手动打包、上传、部署一套流程下来半小时过去了还容易手滑出错更别提多环境部署了开发、测试、生产每个环境都得来一遍简直是在重复造轮子。我之前就深受其苦直到我把Jenkins和Docker这套自动化部署流程给跑通了才真正体会到了什么叫“解放双手”。简单来说Jenkins就像你项目里那个不知疲倦、绝对靠谱的“自动化管家”。你只需要告诉它“嘿兄弟我代码提交到Git仓库了后面的打包、测试、部署就交给你了。” 它就会自动拉取最新代码调用Maven进行编译打包然后根据你写好的脚本把打好的“包裹”Jar包塞进一个标准化的“集装箱”Docker镜像里最后把这个集装箱运到服务器上启动起来。整个过程全自动你只需要点一下“构建”按钮或者更酷的是连按钮都不用点代码一提交它就自动开干了。而Docker就是这个故事里的“标准化集装箱”。它把我们的SpringBoot应用和它运行所需要的所有东西比如Java运行环境、系统库、配置文件统统打包成一个镜像。这个镜像在任何安装了Docker的机器上运行起来都是一模一样的彻底解决了“在我机器上好好的”这个千古难题。Jenkins和Docker的结合就是让“自动化管家”去操作“标准化集装箱”实现从代码到服务的无缝、可靠、可重复的交付。这套流程特别适合中小型团队或者个人开发者。你不需要搭建复杂的K8s集群用JenkinsDocker就能搭建起一个非常实用的CI/CD持续集成/持续部署流水线。它能帮你节省大量重复劳动的时间减少人为失误保证每次部署的环境一致性让你能更专注于写代码本身。接下来我就手把手带你走一遍这个全流程把我踩过的坑和总结的经验都分享给你。2. 环境准备给你的“管家”和“集装箱”安个家在开始让“管家”干活之前我们得先给它和“集装箱”准备好工作场地。这里假设你有一台Linux服务器CentOS 7/8或Ubuntu 20.04我们将在这台服务器上安装所有必要的工具。2.1 安装Docker搭建标准化集装箱码头Docker的安装现在非常方便通过官方脚本或者包管理器都能搞定。我习惯用官方仓库安装这样版本比较新。# 1. 卸载旧版本如果是全新系统可跳过 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 2. 安装必要的依赖包 sudo yum install -y yum-utils # 3. 设置稳定的Docker仓库这里使用阿里云镜像加速国内访问更快 sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 4. 安装Docker引擎和命令行工具 sudo yum install -y docker-ce docker-ce-cli containerd.io # 5. 启动Docker并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 6. 验证安装是否成功运行一个hello-world容器试试 sudo docker run hello-world如果最后一步你看到了“Hello from Docker!”的欢迎信息恭喜你Docker安装成功了。这里有个小建议为了避免每次执行docker命令都要加sudo可以把当前用户加入docker用户组sudo usermod -aG docker $USER然后退出终端重新登录就生效了。2.2 安装Jenkins请来我们的自动化管家Jenkins本身是用Java写的所以我们需要先安装Java环境。Jenkins对Java版本有要求我推荐安装Java 11或17这些LTS长期支持版本。# 1. 安装Java这里以OpenJDK 11为例 sudo yum install -y java-11-openjdk-devel # 2. 验证Java安装 java -version # 3. 导入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 # 4. 安装Jenkins sudo yum install -y jenkins # 5. 启动Jenkins并设置开机自启 sudo systemctl start jenkins sudo systemctl enable jenkins # 6. 查看初始管理员密码这个密码在第一次登录Jenkins网页时要用到 sudo cat /var/lib/jenkins/secrets/initialAdminPassword安装完成后打开浏览器访问http://你的服务器IP:8080就能看到Jenkins的解锁页面了。把上一步查看到的密码粘贴进去接着按照引导安装推荐的插件创建一个管理员账户Jenkins就准备就绪了。第一次安装插件可能会比较慢耐心等待一下。2.3 准备一个SpringBoot项目示例为了演示我们需要一个“货物”。你可以在Gitee或GitHub上找一个简单的SpringBoot项目或者自己快速创建一个。这里我假设你有一个最基础的SpringBoot Web项目它提供了一个简单的HTTP接口。关键是要确保项目根目录下有一个标准的pom.xml文件并且能通过mvn clean package命令成功打包成一个可执行的Jar文件。这是我们整个流水线的起点。3. 核心配置编写Dockerfile与Jenkins任务环境搭好了现在我们来准备两个最核心的配置文件一个是告诉Docker如何构建镜像的“说明书”Dockerfile另一个是告诉Jenkins每一步该做什么的“任务清单”Jenkins Job。3.1 编写Dockerfile给应用打造专属集装箱Dockerfile的每一行指令都是在定义镜像的一层。一个好的Dockerfile应该是精简、高效、安全的。我们直接在SpringBoot项目的根目录下创建一个Dockerfile文件注意没有后缀名。# 第一阶段使用Maven镜像来构建应用可选更佳实践 # 如果你希望构建过程也在容器内完成保证环境绝对一致可以使用多阶段构建。 # 这里我们先采用简单方式假设jar包已在宿主机生成。 # 使用一个轻量级的JRE基础镜像而不是完整的JDK可以大大减小镜像体积。 FROM openjdk:11-jre-slim # 设置一个维护者标签非必须但是个好习惯 LABEL maintaineryour_emailexample.com # 在容器内部创建一个工作目录 WORKDIR /app # 将宿主机当前目录下的jar包复制到容器内的/app目录下并重命名为app.jar # 注意这里的 target/*.jar 需要根据你实际的打包路径和jar包名调整。 # 例如如果你的jar包叫 myapp-0.0.1-SNAPSHOT.jar可以写为 COPY target/myapp-*.jar app.jar COPY target/*.jar app.jar # 声明容器运行时对外暴露的端口这里和你的SpringBoot应用端口一致默认8080 EXPOSE 8080 # 设置JVM运行参数这里是个例子你可以根据需要调整。 # -Xmx512m 设置最大堆内存-Xms256m 设置初始堆内存-Duser.timezoneGMT08 设置时区为东八区。 ENV JAVA_OPTS-Xmx512m -Xms256m -Duser.timezoneGMT08 # 使用 exec 格式的 ENTRYPOINT 来启动应用这样容器可以正确接收停止信号实现优雅关闭。 # 这里通过 shell 形式sh -c来解析环境变量 JAVA_OPTS。 ENTRYPOINT [sh, -c, java $JAVA_OPTS -jar /app/app.jar]我来解释几个关键点和踩过的坑镜像选择openjdk:11-jre-slim比openjdk:8体积小很多因为只包含了运行环境JRE没有编译工具JDK。对于生产环境-slim或-alpine基于更小的Alpine Linux版本是首选。COPY路径COPY target/*.jar app.jar这行命令假设你的jar包在target目录下。在Jenkins的构建服务器上这个路径是相对于你的项目工作空间的。一定要确认好路径。ENTRYPOINT格式使用ENTRYPOINT的exec形式中括号[]是Docker推荐的做法。我们通过sh -c来包裹命令是为了能让$JAVA_OPTS这个环境变量被正确解析。这比直接用CMD更灵活因为ENTRYPOINT不容易在运行容器时被覆盖。优雅停止这种写法能让Java应用在收到Docker的SIGTERM停止信号时有机会执行一些清理工作比如通过Spring的PreDestroy注解实现优雅关闭避免数据丢失。3.2 配置Jenkins任务定义自动化流水线现在登录到Jenkins的Web界面我们来创建一个任务。新建任务点击左侧菜单“新建任务”输入一个任务名称例如“springboot-docker-deploy”选择“构建一个自由风格的软件项目”然后点击“确定”。源码管理这是流水线的第一步——拉取代码。在“源码管理”部分选择“Git”。在“Repository URL”中填入你的Git项目地址比如https://gitee.com/your_name/your_project.git。在“Credentials”下添加你的Git仓库用户名和密码或SSH密钥。如果是公开仓库可能不需要。在“Branches to build”中指定分支例如*/main或*/master。构建触发器决定什么时候开始构建。我常用的有两种轮询SCM让Jenkins每隔一段时间比如每分钟去检查一次代码仓库有没有更新。配置为* * * * *Cron表达式表示每分钟。这种方式简单但有一定延迟。Webhook推荐在Git仓库如Gitee/GitHub中配置一个钩子当有代码推送时主动通知Jenkins触发构建。这需要你在Jenkins中安装“Gitee Plugin”或“GitHub plugin”等插件并在管理界面配置好。这是实现真正“持续集成”的关键响应最快。构建环境这里可以勾选“Delete workspace before build starts”这样每次构建前都会清空上一次的工作空间避免旧文件干扰。对于简单项目不勾选也行。构建步骤这是流水线的核心我们添加一个“执行shell”的步骤。把下面这一大段脚本粘贴进去。别怕我们拆开一步步看。4. 构建脚本详解Shell命令里的门道Jenkins的Shell构建步骤就是一系列按顺序执行的Linux命令。下面这个脚本是我在实际项目中打磨过的包含了错误处理和日志输出比简单的命令更健壮。#!/bin/bash # 设置脚本遇到错误就立即退出避免错误累积 set -e echo 1. 使用Maven打包项目 # 使用项目根目录的pom.xml进行打包跳过单元测试以加快构建速度 mvn clean package -DskipTests # 检查打包是否成功如果target目录下没有jar包则构建失败 JAR_FILE$(find target -name *.jar | head -n 1) if [ -z $JAR_FILE ]; then echo 错误未找到生成的jar包Maven打包可能失败 exit 1 fi echo 找到生成的Jar包: $JAR_FILE echo 2. 准备Docker构建上下文 # 创建一个专门的docker构建目录保持干净 DOCKER_DIR./docker_build_context rm -rf $DOCKER_DIR mkdir -p $DOCKER_DIR # 将Dockerfile复制到构建目录 cp Dockerfile $DOCKER_DIR/ # 将刚刚打包好的jar包复制到构建目录并重命名为统一的app.jar方便Dockerfile引用 cp $JAR_FILE $DOCKER_DIR/app.jar cd $DOCKER_DIR echo 当前Docker构建目录: $(pwd) ls -la echo 3. 构建Docker镜像 # 定义镜像名称和标签使用项目名和构建编号BUILD_NUMBER是Jenkins环境变量 IMAGE_NAMEmy-springboot-app IMAGE_TAGlatest # 使用 --no-cache 确保每次构建都重新拉取层避免使用旧缓存。生产中可以去掉以加快速度。 docker build --no-cache -t ${IMAGE_NAME}:${IMAGE_TAG} . echo 4. 清理旧容器 # 查找所有正在运行或已停止的、名字包含我们应用名的容器 CONTAINER_NAMEmy-springboot-container RUNNING_CONTAINER$(docker ps -a -q --filter name${CONTAINER_NAME}) if [ ! -z $RUNNING_CONTAINER ]; then echo 发现正在运行的旧容器: $RUNNING_CONTAINER正在停止并删除... docker stop $RUNNING_CONTAINER docker rm $RUNNING_CONTAINER echo 旧容器清理完毕。 else echo 没有找到需要清理的旧容器。 fi echo 5. 运行新容器 # 运行新构建的镜像 # -d: 后台运行 # -p 8080:8080: 将宿主机的8080端口映射到容器的8080端口SpringBoot默认端口 # --name: 给容器起个名字方便管理 # -e: 传递环境变量给容器这里可以覆盖Dockerfile中定义的JAVA_OPTS # --restartalways: 设置容器总是自动重启除非手动停止增强服务可靠性 docker run -d \ -p 8080:8080 \ --name ${CONTAINER_NAME} \ -e JAVA_OPTS-Xmx512m -Xms256m -Dserver.port8080 \ --restartalways \ ${IMAGE_NAME}:${IMAGE_TAG} echo 6. 检查容器状态 # 等待几秒让容器有足够时间启动 sleep 5 # 查看容器是否在运行 docker ps --filter name${CONTAINER_NAME} # 查看容器最近50行日志快速判断启动是否正常 docker logs --tail 50 ${CONTAINER_NAME} echo Jenkins构建成功应用已部署。 这个脚本做了以下几件关键事并且每一步都有状态输出和简单的错误检查打包调用Maven跳过测试生成Jar包。-DskipTests在集成测试独立的情况下可以加快构建。准备创建一个干净的临时目录作为Docker的“构建上下文”只把Dockerfile和app.jar放进去。这能有效减小构建时发送给Docker守护进程的数据量提升速度。构建镜像在构建目录中执行docker build命令。-t参数给镜像打上标签。我在这里用了--no-cache是为了演示时每次都是全新构建在实际生产流水线中为了利用缓存加速通常只在基础镜像更新或Dockerfile变更时才使用这个参数。清理旧容器在启动新容器前先根据名字找到并停止、删除旧的容器。这是实现“滚动更新”的最简单形式。脚本里加了判断避免因为找不到容器而报错导致构建失败。运行新容器使用docker run启动容器。--restartalways是个非常实用的参数它保证容器在意外退出比如宿主机重启后会自动重新启动提高了服务的可用性。健康检查最后通过docker ps和docker logs查看容器状态和启动日志给构建结果一个快速的反馈。配置好之后点击保存。回到任务页面点击“立即构建”就可以触发第一次手动构建了。点击构建历史记录里的构建编号再点击“控制台输出”你就能实时看到上面这些脚本命令的执行过程和日志。5. 问题排查与进阶优化第一次构建很可能不会一帆风顺。别担心遇到问题才是学习的最佳时机。下面我分享几个常见的坑和解决办法。5.1 常见启动失败问题排查如果构建完成后访问http://服务器IP:8080没反应或者Jenkins控制台显示容器启动后很快退出了可以按以下步骤排查检查容器状态在服务器上执行docker ps -a。如果容器状态是“Exited”说明它启动失败了。查看详细日志这是最重要的线索执行docker logs [容器ID或名字]比如docker logs my-springboot-container。日志里通常会明确告诉你错误原因比如“no main manifest attribute”说明Jar包不可执行。检查Maven打包插件spring-boot-maven-plugin是否配置正确确保打出来的是可执行的fat jar。“Connection refused” 或 “Port already in use”端口冲突。检查宿主机8080端口是否被其他程序占用或者修改docker run -p参数映射到其他端口如-p 8081:8080。“Unable to access jarfile”Dockerfile里COPY的jar包路径或名称不对。进入容器检查docker exec -it my-springboot-container /bin/sh然后ls -la /app看看jar包是否存在。JVM内存不足错误调整docker run命令中的-e JAVA_OPTS参数减小堆内存设置或者给Docker容器分配更多内存资源。进入容器内部调试如果日志不够清晰可以尝试以交互模式启动一个临时容器来调试。例如先不用-d后台运行而是用-it交互模式并覆盖入口点docker run -it --rm -p 8080:8080 my-springboot-app:latest /bin/sh这样你会直接进入容器的Shell可以手动执行java -jar /app/app.jar来观察输出。5.2 使用Jenkins Pipeline提升可维护性上面我们在“自由风格”项目里写了一大段Shell脚本虽然能用但不够优雅也不利于版本控制和复用。Jenkins更强大的方式是使用Pipeline流水线。它允许你用代码Jenkinsfile来定义整个构建、测试、部署流程并保存在项目源码库中。在你的SpringBoot项目根目录创建一个名为Jenkinsfile的文件内容如下pipeline { agent any // 指定在任何可用的代理上运行 stages { stage(拉取代码) { steps { checkout scm // 从源码管理配置中拉取代码 } } stage(Maven打包) { steps { sh mvn clean package -DskipTests } } stage(构建Docker镜像) { steps { script { // 读取pom.xml中的版本号作为镜像标签更专业 def version sh(script: mvn help:evaluate -Dexpressionproject.version -q -DforceStdout, returnStdout: true).trim() docker.build(my-springboot-app:${version}) } } } stage(部署到Docker) { steps { script { def version sh(script: mvn help:evaluate -Dexpressionproject.version -q -DforceStdout, returnStdout: true).trim() // 先停止并删除旧容器 sh docker stop my-springboot-container || true docker rm my-springboot-container || true // 运行新容器 docker.run( -d -p 8080:8080 --name my-springboot-container --restartalways my-springboot-app:${version} ) } } } } post { always { echo 当前流水线构建完成。 // 可以在这里添加清理工作比如删除临时镜像 } success { echo 构建部署成功 } failure { echo 构建部署失败 // 可以在这里添加邮件通知等 } } }然后在Jenkins中新建一个“流水线”类型的任务在“Pipeline”配置里选择“Pipeline script from SCM”指定你的Git仓库和Jenkinsfile路径。这样你的整个CI/CD流程就和代码一起被版本管理起来了修改流程就像修改代码一样方便。5.3 镜像仓库与生产环境考量在真正的生产环境中我们通常不会直接把镜像放在本地服务器。而是会推送到一个镜像仓库比如Docker Hub、阿里云容器镜像服务、Harbor等私有仓库。推送镜像在构建镜像后增加一个docker push步骤。docker tag my-springboot-app:latest your-registry.com/your-project/my-springboot-app:latest docker push your-registry.com/your-project/my-springboot-app:latest生产环境拉取运行在生产服务器上你的部署脚本就不再需要构建了只需要拉取镜像并运行。docker pull your-registry.com/your-project/my-springboot-app:latest docker run ... your-registry.com/your-project/my-springboot-app:latest使用环境变量文件生产环境的配置数据库地址、密码等不应硬编码在镜像或命令中。可以使用--env-file参数指定一个环境变量文件或者结合配置中心使用。健康检查在Dockerfile或docker run命令中配置健康检查指令HEALTHCHECK让Docker引擎能够判断容器内应用是否真的“健康”就绪这对于后续的负载均衡和自动恢复非常重要。把Jenkins和Docker这套流程跑通就像是给你的软件开发流程装上了一台自动化的传送带。代码从提交到上线中间繁琐的打包、部署环节全部自动完成不仅效率提升了整个发布过程也变得标准、可追溯。我第一次成功跑通整个流程时看着代码提交后几分钟服务就自动更新了那种成就感和便利性真的会让人上瘾。刚开始配置可能会遇到各种小问题多看看日志善用搜索引擎和社区每一个坑踩过去你的技能树就又点亮了一颗。

相关新闻

OpenHarmony驱动开发实战:I3C总线在传感器融合场景中的应用

OpenHarmony驱动开发实战:I3C总线在传感器融合场景中的应用

1. 为什么传感器融合需要I3C?从I2C的瓶颈说起 如果你玩过无人机或者体验过VR设备,你可能会惊叹于它们流畅的跟随和定位能力。这背后,是多个传感器(比如加速度计、陀螺仪、磁力计)在协同工作,这个过程就叫传…

2026/5/17 12:29:00 阅读更多 →
我用了两周_OpenClaw,终于明白为什么它能火成这样

我用了两周_OpenClaw,终于明白为什么它能火成这样

今天这篇,可能会稍微有点长。 但我保证,看完之后,你对"AI 能帮你干啥"的理解,会上一个台阶。 这两周,我的技术圈朋友几乎都在聊一个东西——OpenClaw。 说实话,一开始我也没当回事。 又一个 …

2026/5/17 12:29:00 阅读更多 →
langchain4j Agent Skills 实战教程(非常详细),Java AI 应用开发从入门到精通,收藏这一篇就够了!

langchain4j Agent Skills 实战教程(非常详细),Java AI 应用开发从入门到精通,收藏这一篇就够了!

在聊 Agent Skills 之前,先快速介绍一下 langchain4j。 langchain4j 是一个面向 Java 开发者的 LLM 应用开发框架。就像 Spring 统一了 Java Web 开发的接口一样,langchain4j 也在做类似的事情——为 Java AI 开发提供统一的抽象层。 它提供了: • 统一的 API:无论你用 Open…

2026/7/4 22:34:42 阅读更多 →

最新新闻

Discordia语音功能实战:构建语音频道机器人全流程

Discordia语音功能实战:构建语音频道机器人全流程

Discordia语音功能实战:构建语音频道机器人全流程 【免费下载链接】Discordia Discord API library written in Lua for the Luvit runtime environment 项目地址: https://gitcode.com/gh_mirrors/di/Discordia 想要为你的Discord服务器添加音乐播放器、语音…

2026/7/6 19:47:11 阅读更多 →
tslint-react与TypeScript完美结合:构建类型安全的React应用

tslint-react与TypeScript完美结合:构建类型安全的React应用

tslint-react与TypeScript完美结合:构建类型安全的React应用 【免费下载链接】tslint-react :orange_book: Lint rules related to React & JSX for TSLint. 项目地址: https://gitcode.com/gh_mirrors/ts/tslint-react 想要在TypeScript项目中打造专业级…

2026/7/6 19:47:11 阅读更多 →
终极指南:3分钟快速上手DyberPet桌面宠物,让你的角色活起来

终极指南:3分钟快速上手DyberPet桌面宠物,让你的角色活起来

终极指南:3分钟快速上手DyberPet桌面宠物,让你的角色活起来 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet DyberPet是一款基于PySide6开发的桌面宠物框架…

2026/7/6 19:41:05 阅读更多 →
ReVanced Integrations 中的 SponsorBlock 集成:自动跳过赞助片段的实现指南 [特殊字符]

ReVanced Integrations 中的 SponsorBlock 集成:自动跳过赞助片段的实现指南 [特殊字符]

ReVanced Integrations 中的 SponsorBlock 集成:自动跳过赞助片段的实现指南 🚀 【免费下载链接】revanced-integrations 🔩 ReVanced Integrations containing classes to be merged by ReVanced Patcher 项目地址: https://gitcode.com/g…

2026/7/6 19:39:04 阅读更多 →
HEIF Utility:Windows用户必备的HEIC图片转换终极指南

HEIF Utility:Windows用户必备的HEIC图片转换终极指南

HEIF Utility:Windows用户必备的HEIC图片转换终极指南 【免费下载链接】HEIF-Utility HEIF Utility - View/Convert Apple HEIF images on Windows. 项目地址: https://gitcode.com/gh_mirrors/he/HEIF-Utility 你是否在Windows电脑上遇到过iPhone照片无法打…

2026/7/6 19:39:04 阅读更多 →
JS Analyzer常见问题解决:Jython环境配置与Burp Suite兼容性问题排查终极指南 [特殊字符]

JS Analyzer常见问题解决:Jython环境配置与Burp Suite兼容性问题排查终极指南 [特殊字符]

JS Analyzer常见问题解决:Jython环境配置与Burp Suite兼容性问题排查终极指南 🚀 【免费下载链接】JSAnalyzer 项目地址: https://gitcode.com/gh_mirrors/js/JSAnalyzer JS Analyzer是一款强大的Burp Suite扩展,专门用于JavaScript静…

2026/7/6 19:39:04 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻