当前位置: 首页 > news >正文

龙芯3B6000平台Docker部署Jenkins实战:国产化CI/CD环境搭建指南

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度

这次我们来看一个在国产龙芯 3B6000 平台上,使用 Docker 部署 Jenkins 的实战方案。对于使用龙芯架构的开发者或运维人员来说,如何在非 x86 的生态下搭建一套稳定、高效的 CI/CD 流水线,是一个很实际的需求。Docker 容器化部署 Jenkins 不仅能简化环境配置,还能提供更好的隔离性和可移植性。本文将带你从零开始,完成在龙芯 3B6000 服务器上安装 Docker、拉取适配镜像、部署 Jenkins 服务,并进行基础配置和功能验证的全过程。

核心关注点在于:龙芯平台下的 Docker 安装是否有特殊要求?是否有现成的 Jenkins 镜像可用?部署后的性能表现和常见问题如何?如果你手头有龙芯设备,或者正在评估国产化平台的 CI/CD 方案,这篇文章可以直接作为操作手册。

1. 核心能力速览

在开始具体操作前,我们先快速了解这个方案的核心信息。

能力项说明
目标平台龙芯 3B6000 处理器(LoongArch 架构)
核心组件Docker 容器引擎 + Jenkins CI/CD 服务
部署方式通过 Docker 容器化部署,实现环境隔离与快速启动
主要功能提供完整的 Jenkins Web 管理界面,支持任务创建、代码拉取、构建、测试、部署等自动化流水线
环境依赖龙芯 3B6000 服务器、支持 LoongArch 的 Linux 发行版(如 Loongnix、UOS、麒麟)
网络要求服务器需能访问外部网络以下载 Docker 安装包和容器镜像
适合场景在国产化龙芯平台上搭建自动化构建、测试与部署环境,适用于软件开发、运维、测试团队

2. 适用场景与使用边界

这个方案主要解决在龙芯架构上快速搭建标准化 CI/CD 环境的问题。

适合谁用:

  • 龙芯平台开发者:需要在本地或开发服务器上搭建构建环境。
  • 国产化项目运维:负责在龙芯服务器上部署和维护持续集成流水线。
  • 技术评估人员:评估龙芯生态下 Docker 和主流开源工具链的可用性与成熟度。

能解决什么问题:

  1. 环境标准化:通过 Docker 容器,避免直接在宿主机上安装复杂的 Jenkins 及其 Java 依赖,保证环境一致性。
  2. 快速部署与迁移:一个docker run命令即可启动 Jenkins,方便在不同龙芯机器间迁移。
  3. 资源隔离:Jenkins 及其构建任务在容器内运行,与宿主机环境隔离,更安全。
  4. 利用社区镜像(如有):如果存在适配 LoongArch 的 Jenkins 镜像,可以省去复杂的交叉编译和适配工作。

不适合什么场景:

  • 超大规模集群:对于需要管理成千上万节点的 Jenkins 集群,单机 Docker 部署可能只是起点,需要更复杂的架构。
  • 对性能有极致要求:容器化会有轻微的性能开销,如果对构建速度有毫秒级极致要求,需评估。
  • 无法访问外网的环境:需要提前在有网环境下载好 Docker 安装包和 Jenkins 镜像,再离线导入。

安全与合规边界:

  • 权限控制:Jenkins 拥有执行 shell 命令的能力,务必妥善管理管理员账号和项目权限。
  • 网络安全:默认 Jenkins 会开启 Web 端口(如 8080),确保防火墙策略正确,避免暴露在公网。
  • 数据持久化:务必做好 Jenkins 工作目录(/var/jenkins_home)的卷挂载,防止容器重启后数据丢失。

3. 环境准备与前置条件

开始部署前,请确保你的龙芯 3B6000 服务器满足以下条件。

1. 硬件与操作系统

  • CPU: 龙芯 3B6000。
  • 操作系统: 一个支持 LoongArch 架构的 Linux 发行版。常见的有:
    • Loongnix Server
    • 统信 UOS Server
    • 麒麟软件服务器操作系统
  • 建议配置: 至少 4GB 内存,20GB 可用磁盘空间。运行 Jenkins 和多个构建任务时,内存需求会增长。

2. 网络连接

  • 服务器需要能够访问互联网,用于下载 Docker 安装包和后续拉取镜像。可以通过ping www.baidu.com测试网络连通性。

3. 系统更新

  • 在安装任何新软件前,建议先更新系统包管理器并升级现有软件包,以确保系统处于最新状态。
    # 以 Loongnix 或基于 Debian/Ubuntu 的衍生版为例,使用 apt sudo apt update sudo apt upgrade -y # 如果是基于 CentOS/RHEL 的发行版,使用 yum 或 dnf # sudo yum update -y

4. 检查现有 Docker

  • 检查系统是否已经安装了旧版本的 Docker,避免冲突。
    docker --version
    如果已安装,但版本较低或不是官方版本,可以考虑先卸载。卸载命令取决于系统的包管理器。

4. 安装 Docker 引擎

在龙芯架构上安装 Docker,通常不能直接使用apt install docker.ioyum install docker,因为官方仓库可能没有提供 LoongArch 的二进制包。我们需要从龙芯社区或发行版提供的仓库进行安装。

步骤 1: 卸载旧版本(可选)如果之前安装过,先进行清理。

sudo apt remove docker docker-engine docker.io containerd runc -y sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd

步骤 2: 安装依赖工具安装ca-certificatescurlgnupglsb-release等工具。

sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release

步骤 3: 添加 Docker 官方 GPG 密钥(可选,主要针对 x86/arm64)对于龙芯,此步骤可能不适用,但添加也无妨。如果网络不通,可跳过。

sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

步骤 4: 添加适用于龙芯的 Docker 仓库这是关键步骤。你需要根据你使用的具体龙芯发行版,添加正确的软件源。

  • 情况A: 发行版已提供 Docker 包很多国产发行版已经集成了适配的 Docker。首先检查你的/etc/apt/sources.list/etc/yum.repos.d/下的源文件。例如,在 Loongnix 中,可能已经配置了包含 Docker 的源。
  • 情况B: 手动添加龙芯社区源可以参考龙芯开源社区或你的操作系统厂商提供的文档。例如,可能需要添加像http://pkg.loongnix.cn/loongnix这样的源。请以你所用系统的官方文档为准。
    # 以下是一个示例,切勿直接使用,请替换为你的实际源地址 # echo "deb [arch=loongarch64] http://your-loongarch-mirror/loongnix stable main" | sudo tee /etc/apt/sources.list.d/loongnix.list

步骤 5: 安装 Docker Engine添加正确的源后,更新包列表并安装 Docker。

sudo apt update # 搜索可用的 docker 包,确认名称 # apt search docker-ce | grep docker sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

根据网络搜索材料中提到的“龙芯3B6000 安装高版本rpm Docker 29.5.1”,在某些使用 RPM 包管理器的系统(如基于 CentOS 的龙芯系统)上,你可能需要安装docker的 RPM 包,命令可能是sudo yum install dockersudo dnf install docker

步骤 6: 启动 Docker 并设置开机自启

sudo systemctl start docker sudo systemctl enable docker

步骤 7: 验证 Docker 安装运行一个测试镜像,验证 Docker 是否安装成功并能正常运行容器。

sudo docker run hello-world

如果看到 “Hello from Docker!” 等欢迎信息,说明 Docker 引擎安装成功。如果找不到hello-world的 LoongArch 镜像,可以尝试拉取一个更小的、支持多架构的镜像进行测试,如busybox

sudo docker run --rm busybox echo “Docker on LoongArch is working!”

步骤 8: (可选)将当前用户加入 docker 组为了避免每次运行docker命令都需要sudo,可以将你的用户加入docker组。

sudo usermod -aG docker $USER

重要:执行此命令后,你需要完全退出当前终端会话并重新登录,或者新开一个终端,用户组更改才会生效。

5. 获取与运行 Jenkins 镜像

Docker 安装成功后,下一步就是获取并运行 Jenkins 镜像。一个挑战是:Docker Hub 上的官方jenkins/jenkins镜像主要支持amd64arm64架构,可能没有直接提供loongarch64的版本。

方案一:使用已移植的镜像(如果存在)优先搜索龙芯社区或国内镜像仓库是否有移植好的 Jenkins 镜像。

  1. 搜索镜像
    # 可以在 Docker Hub 或阿里云、华为云等国内镜像仓库搜索 # 例如使用 docker search,但结果可能有限 docker search jenkins --filter “is-official=true”
  2. 拉取镜像:如果找到了如loongnix/jenkinsregistry.cn-loongarch64.loongnix.cn/jenkins这样的镜像,直接拉取。
    docker pull loongnix/jenkins:lts

方案二:使用通用 Java 镜像自行构建如果找不到现成的镜像,可以基于一个支持 LoongArch 的 Java 运行时镜像(如openjdk:11-jdkeclipse-temurin:11-jdkloongarch64版本),通过 Dockerfile 自行安装 Jenkins。

  1. 创建 Dockerfile
    # 使用一个已知支持loongarch64的基础镜像,例如龙芯提供的OpenJDK镜像 FROM cr.loongnix.cn/library/openjdk:11 # 设置 Jenkins 版本和环境变量 ARG JENKINS_VERSION=2.440.1 ENV JENKINS_HOME /var/jenkins_home ENV JENKINS_SLAVE_AGENT_PORT 50000 # 安装 Jenkins RUN apt update && apt install -y wget \ && wget https://get.jenkins.io/war-stable/${JENKINS_VERSION}/jenkins.war -O /usr/share/jenkins/jenkins.war \ && apt purge -y wget && apt autoremove -y && rm -rf /var/lib/apt/lists/* # 创建 Jenkins 用户和目录 RUN useradd -d “$JENKINS_HOME” -u 1000 -m -s /bin/bash jenkins RUN mkdir -p /usr/share/jenkins/ref # 暴露端口 EXPOSE 8080 EXPOSE 50000 # 设置卷和用户 VOLUME $JENKINS_HOME USER jenkins # 启动命令 ENTRYPOINT [“java”, “-jar”, “/usr/share/jenkins/jenkins.war”]
    注意:上述 Dockerfile 仅为示例。你需要确认cr.loongnix.cn/library/openjdk:11镜像是否存在且可用,并选择合适的 Jenkins 版本。
  2. 构建镜像
    docker build -t my-loongarch-jenkins:latest .

方案三:直接运行 Jenkins WAR 包最简单直接的方式是,在宿主机下载 Jenkins 的通用 WAR 包,然后在支持 LoongArch 的 Java 容器中运行它。

  1. 下载 Jenkins WAR 包
    wget https://get.jenkins.io/war-stable/latest/jenkins.war
  2. 使用 Docker 运行
    # 创建一个用于持久化数据的目录 mkdir -p ~/jenkins_home # 运行容器,将 WAR 包和持久化目录挂载进去 docker run -d \ --name jenkins \ -p 8080:8080 \ -p 50000:50000 \ -v ~/jenkins_home:/var/jenkins_home \ -v $(pwd)/jenkins.war:/usr/share/jenkins/jenkins.war \ cr.loongnix.cn/library/openjdk:11 \ java -jar /usr/share/jenkins/jenkins.war
    这个命令做了几件事:
    • -d: 后台运行容器。
    • --name jenkins: 给容器命名。
    • -p 8080:8080: 将容器的 8080 端口(Jenkins Web 界面)映射到宿主机的 8080 端口。
    • -p 50000:50000: 映射代理端口,用于 Jenkins 节点通信。
    • -v ~/jenkins_home:/var/jenkins_home:至关重要。将宿主机的~/jenkins_home目录挂载到容器的 Jenkins 工作目录,实现数据持久化。
    • -v $(pwd)/jenkins.war:/usr/share/jenkins/jenkins.war: 将下载的 WAR 包挂载到容器内。
    • 最后指定基础镜像和启动命令。

6. 初始化配置与访问 Jenkins

无论采用哪种方案运行了 Jenkins 容器,接下来的配置步骤是通用的。

步骤 1: 检查容器状态

docker ps

你应该能看到一个名为jenkins(或你指定的名字)的容器正在运行,并且端口映射正确。

步骤 2: 获取初始管理员密码Jenkins 第一次启动时,会生成一个随机的初始管理员密码,保存在容器内的/var/jenkins_home/secrets/initialAdminPassword。由于我们做了目录挂载,这个文件实际上在宿主机的~/jenkins_home/secrets/目录下。

cat ~/jenkins_home/secrets/initialAdminPassword

复制输出的那一长串密码。

步骤 3: 访问 Jenkins Web 界面打开你的浏览器,访问http://<你的龙芯服务器IP地址>:8080

  1. 你会看到 “Unlock Jenkins” 页面,将上一步复制的密码粘贴进去,点击 “Continue”。
  2. 接下来是 “Customize Jenkins” 页面,建议选择 “Install suggested plugins” 来安装推荐插件。这个过程可能需要几分钟,取决于网络速度。
  3. 插件安装完成后,会提示你创建第一个管理员用户。建议在此创建一个新的管理员账号,并记住密码。
  4. 最后配置 Jenkins 实例的 URL,默认是http://<你的服务器IP>:8080,确认即可。

步骤 4: 完成安装并登录完成上述步骤后,你就进入了 Jenkins 的主仪表板。至此,Jenkins 已经成功部署在龙芯 3B6000 的 Docker 容器中。

7. 基础功能测试与验证

部署完成后,我们需要验证 Jenkins 的基本功能是否正常。

测试 1: 创建第一个自由风格任务

  1. 在 Jenkins 首页,点击 “新建 Item”。
  2. 输入任务名称,例如 “Test-LoongArch-HelloWorld”,选择 “Freestyle project”,点击 “OK”。
  3. 在配置页面,向下滚动到 “Build Steps” 部分。
  4. 点击 “Add build step”,选择 “Execute shell”。
  5. 在命令框中输入简单的测试命令:
    echo “Hello from LoongArch 3B6000!” uname -a docker version
  6. 点击 “Save”。
  7. 回到任务页面,点击 “Build Now” 立即构建。
  8. 构建开始后,点击构建历史中的编号(如 #1),然后点击 “Console Output” 查看实时日志。
  9. 验证:在控制台输出中,你应该能看到打印的 “Hello…” 信息,以及uname -a输出的系统信息(应包含loongarch64),还有docker version输出的 Docker 版本信息。这表明 Jenkins 可以在容器内成功执行 Shell 命令,并能访问宿主机 Docker。

测试 2: 验证 Docker 集成(Docker in Docker)很多 CI/CD 流水线需要 Docker 来构建镜像。我们需要测试 Jenkins 容器内的 Docker 客户端能否与宿主机 Docker 守护进程通信。

  1. 修改上面的测试任务,或者新建一个任务。
  2. 在构建步骤的 Shell 命令中,尝试运行一个简单的 Docker 命令:
    docker run --rm busybox echo “Docker command executed inside Jenkins container on LoongArch.”
  3. 运行这个任务。
  4. 可能遇到的问题与解决
    • 权限错误:如果提示 “Got permission denied while trying to connect to the Docker daemon socket…”,这是因为 Jenkins 容器内的用户没有权限访问宿主机的 Docker socket。
    • 解决方案:在启动 Jenkins 容器时,将宿主机的 Docker socket 挂载到容器内,并确保容器内用户有权限(通常通过使用 root 用户或调整组权限)。更安全的做法是使用 Docker DinD(Docker in Docker)或使用专门的 Docker 构建代理。一个简单的测试启动命令修改如下(注意安全风险):
      docker run -d \ --name jenkins \ -p 8080:8080 \ -p 50000:50000 \ -v ~/jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ # 挂载 Docker socket -v $(pwd)/jenkins.war:/usr/share/jenkins/jenkins.war \ cr.loongnix.cn/library/openjdk:11 \ java -jar /usr/share/jenkins/jenkins.war
      重新运行容器并执行测试任务,应该能成功执行 Docker 命令。

8. 配置优化与最佳实践

基础功能跑通后,可以进行一些优化配置,让 Jenkins 更实用、更安全。

1. 数据持久化与备份我们已经通过-v ~/jenkins_home:/var/jenkins_home实现了数据持久化。此外,你应该:

  • 定期备份~/jenkins_home目录。
  • 考虑使用 Docker 卷(docker volume create jenkins-data)来管理数据,而不是直接绑定宿主机目录,以获得更好的可移植性。

2. 时区设置容器内默认可能是 UTC 时间。可以通过环境变量调整容器时区,使日志时间与本地时间一致。

# 在 docker run 命令中添加环境变量 -e TZ=Asia/Shanghai

完整的运行命令示例:

docker run -d \ --name jenkins \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ # 使用命名卷 -v /var/run/docker.sock:/var/run/docker.sock \ -e TZ=Asia/Shanghai \ cr.loongnix.cn/library/openjdk:11 \ java -jar /usr/share/jenkins/jenkins.war

3. 资源限制为防止 Jenkins 容器占用过多宿主资源,可以设置 CPU 和内存限制。

# 在 docker run 命令中添加资源限制 --memory=2g \ # 限制内存为 2GB --cpus=“1.5” # 限制使用 1.5 个 CPU 核心

4. 使用 Docker Compose 管理使用docker-compose.yml文件可以更方便地定义和管理服务。创建一个docker-compose.yml文件:

version: ‘3.8’ services: jenkins: image: cr.loongnix.cn/library/openjdk:11 # 或你构建的镜像名 container_name: jenkins restart: unless-stopped ports: - “8080:8080” - “50000:50000” volumes: - jenkins-data:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock - ./jenkins.war:/usr/share/jenkins/jenkins.war environment: - TZ=Asia/Shanghai command: java -jar /usr/share/jenkins/jenkins.war # 资源限制 # deploy: # resources: # limits: # cpus: ‘1.5’ # memory: 2G volumes: jenkins-data:

然后使用docker-compose up -d启动服务。

5. 插件安装根据你的项目需求安装必要的 Jenkins 插件,例如:

  • Git Plugin: 用于从 Git 仓库拉取代码。
  • Pipeline: 用于定义流水线即代码(Jenkinsfile)。
  • Docker Pipeline: 在流水线中集成 Docker。
  • Blue Ocean: 提供更现代的 UI 体验。 可以在 Jenkins 的 “Manage Jenkins” -> “Plugins” 中搜索安装。

9. 常见问题与排查方法

在龙芯平台上部署,可能会遇到一些特殊问题。

问题现象可能原因排查方式解决方案
docker run失败,提示no matching manifestDocker Hub 上没有对应loongarch64架构的镜像。docker pull时观察错误信息。1. 寻找龙芯社区移植的镜像。
2. 使用支持loongarch64的基础镜像(如龙芯提供的 OpenJDK)自行构建。
Jenkins 启动后 Web 页面无法访问1. 防火墙未开放端口。
2. 容器启动失败。
3. 端口被占用。
1.docker ps查看容器状态。
2.docker logs jenkins查看容器日志。
3.netstat -tlnp | grep 8080检查端口占用。
1. 开放防火墙端口:sudo ufw allow 8080
2. 根据日志解决启动错误(如 Java 版本、权限问题)。
3. 更换映射端口:-p 8081:8080
控制台输出中文乱码容器内缺少中文字符集。在容器内执行locale查看。在 Dockerfile 中安装中文字体包,或设置环境变量LANG=C.UTF-8
插件安装极其缓慢或失败默认插件中心网络连接不畅。观察插件管理页面的下载进度和错误信息。更换为国内镜像源:在 “Manage Jenkins” -> “Plugin Manager” -> “Advanced” 中,将 “Update Site” 替换为国内镜像 URL,例如清华源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
构建任务中无法执行 Docker 命令Jenkins 容器内没有 Docker 客户端,或无法连接到宿主机 Docker 守护进程。在任务 Shell 中执行which dockerdocker info1. 确保启动容器时挂载了 Docker socket (-v /var/run/docker.sock:/var/run/docker.sock)。
2. 考虑使用 Jenkins 的 Docker 代理或 Kubernetes 插件来运行构建环境。
日志时间与本地时间不符容器时区未设置,默认为 UTC。查看 Jenkins 系统日志的时间戳。启动容器时添加环境变量-e TZ=Asia/Shanghai
initialAdminPassword文件为空或找不到1. 目录挂载权限问题。
2. Jenkins 首次启动未完成。
1. 检查~/jenkins_home/secrets/目录权限。
2. 查看容器日志docker logs jenkins
1. 确保挂载目录对容器内 Jenkins 用户(UID 1000)可写。
2. 等待 Jenkins 完全启动,或删除~/jenkins_home目录重新启动容器(会丢失数据)。

10. 总结与下一步

在龙芯 3B6000 上通过 Docker 部署 Jenkins,核心挑战在于软件生态的适配。成功的关键在于找到或构建一个能在loongarch64架构上运行的 Java 环境,并以此为基础运行 Jenkins 的通用 WAR 包。本文提供的“方案三:直接运行 WAR 包”是目前最直接、最可能成功的方法。

部署完成后,你获得了一个在国产化平台上可用的自动化引擎。接下来可以:

  1. 配置项目:将你的 Java、Python、Go 或前端项目配置到 Jenkins 上,实现代码提交后自动构建。
  2. 探索流水线:尝试使用 Jenkins Pipeline(Jenkinsfile)来定义更复杂、可版本化的构建流程。
  3. 集成国产组件:探索如何与国产 Git 服务(如 Gitee)、国产制品库等集成。
  4. 性能监控:观察在龙芯平台上的构建性能,与 x86 平台进行对比,评估是否满足项目需求。

这个方案证明了在龙芯架构上运行主流开源 DevOps 工具是可行的,为国产化技术栈的持续集成与交付提供了实践参考。如果在部署中遇到其他龙芯特有的问题,多关注龙芯开源社区和所用操作系统的官方文档,通常能找到解决方案。

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度

http://www.jsqmd.com/news/1137429/

相关文章:

  • ClaudeCode实战指南:50条生产级AI编程提效技巧
  • OpenCV cv2.resize 与 PIL Image.resize 对比:3种像素对齐方式对图像质量的影响
  • 2026最新7款AI编程助手学生党平替实测
  • Agent三线布局:养马养虾练模型的工程化落地方法论
  • SVG preserveAspectRatio属性详解:从CSS background-size到9种对齐模式
  • 基于ICM-42605和MKV44F64VLH16的6DOF运动追踪系统设计
  • AI驱动的大规模代码重构:从原理到实战的完整指南
  • 离散数学函数:从集合论到Python 3.12代码的4种映射关系实现
  • douyin-downloader:抖音无水印批量下载工具的技术深度解析
  • Python timedelta本质解析:时间长度标尺的原理、陷阱与工程实践
  • PyTorch Tensor 类型转换的3个常见陷阱:float32精度丢失与梯度计算中断
  • 基于Laravel与eBPF/XDP构建高性能深度集成应用防火墙
  • SeleniumBase无痕Chrome自动化:绕过Colab反检测的完整指南
  • XXL-Job 2.4.0 高可用集群部署:Docker Compose + Nginx 负载均衡 2 节点实战
  • 小米三款TWS耳机深度拆解:从物理结构到算法逻辑的硬核对比
  • Camunda 7.x 数据库性能优化:3个关键表(RU/HI)的索引设计与数据清理策略
  • Linux PAM后门PamDOORa深度解析:原理、检测与防御实战
  • 红帆OA iorepsavexml接口任意文件上传漏洞分析与安全加固
  • Sidecar模式加速单体应用开发:构建、调试与发布优化实战
  • SPI EEPROM与Cortex-M4微控制器的嵌入式数据存储优化方案
  • ksubdomain:基于Go的高并发子域名枚举工具原理与Linux部署实战
  • VirtualBox 6.0.20 共享文件夹配置:Ubuntu 12.04 3步挂载与2个常见错误修复
  • Plone内容迁移方法论:基于Transmogrifier的声明式数据管道实践
  • Dism++终极指南:解锁Windows系统维护的16种语言完整解决方案
  • 逆向工程解析PaintTool SAI文件格式:从二进制黑盒到数据自由
  • CVPR/ICCV/ECCV 三大顶会投稿指南:从论文格式到审稿流程的5个关键步骤
  • 超轻量嵌入式智能体框架PicoClaw:427KB运行AIoT边缘Agent
  • Markdown HTML 标签实战:3种文字居中方案与20+字体兼容性测试
  • MIC1557与STM32L162ZE构建高可靠定时系统
  • Unity 2022.3 LTS 帧率控制实战:Application.targetFrameRate 与 VSync 的 3 种组合效果实测