龙芯3B6000平台Docker部署Jenkins实战:国产架构CI/CD解决方案

这次我们来看一个在国产龙芯 3B6000 平台上,使用 Docker 部署 Jenkins 的实战方案。对于使用龙芯架构的开发者或运维人员来说,如何在非 x86 的生态中搭建一套稳定、高效的 CI/CD 流水线,是一个很实际的需求。本文将直接切入主题,带你完成从 Docker 安装、Jenkins 容器化部署到基础功能验证的全过程。

龙芯 3B6000 采用 LoongArch 指令集,其软件生态正在快速完善。通过 Docker 部署 Jenkins,可以充分利用容器化的隔离性和可移植性,简化环境配置,实现与 x86 平台相近的持续集成体验。整个过程的核心在于解决龙芯架构下的 Docker 安装、镜像适配以及 Jenkins 服务的稳定运行。如果你手头有龙芯 3B6000 设备,并希望搭建自己的自动化构建环境,这篇文章提供的步骤可以直接复用。

1. 核心能力速览

在龙芯 3B6000 上通过 Docker 运行 Jenkins,其核心价值在于为国产平台提供了一套标准化的 CI/CD 解决方案。下表概括了本次部署的关键信息:

能力项说明
目标平台龙芯 3B6000 (LoongArch 架构)
核心组件Docker 29.5.1+ (社区版), Jenkins (官方镜像或适配镜像)
部署方式Docker 容器化部署,非原生安装
管理界面Jenkins Web UI (默认端口 8080)
主要功能项目构建、自动化测试、流水线 (Pipeline)、插件生态
资源需求依赖 Docker 运行资源,Jenkins 本身对 CPU 和内存有一定要求,建议 2GB 以上内存。
适合场景为运行在龙芯平台上的 Java、Python、Go 等项目提供持续集成与持续部署能力。
技术门槛需要具备基础的 Linux 操作和 Docker 使用知识。

2. 适用场景与使用边界

在龙芯 3B6000 上部署 Jenkins,主要服务于特定的开发与运维场景。

它非常适合:

  1. 龙芯原生应用开发团队:需要为 LoongArch 架构的软件项目搭建自动化构建、测试流水线。
  2. 软件适配与迁移团队:在将软件从 x86/ARM 向龙芯平台迁移的过程中,利用 Jenkins 自动化完成编译、打包和基础测试。
  3. 教育或研究机构:在龙芯实验环境中,为学生或研究人员提供一套标准的 CI/CD 实践平台。
  4. 内部工具链建设:为内部使用的、部署在龙芯服务器上的工具或服务,建立自动化发布流程。

需要注意的边界:

  1. 插件兼容性:并非所有 Jenkins 插件都经过 LoongArch 架构的充分测试,部分插件可能因依赖原生库而无法工作。建议优先使用核心插件和经过广泛验证的常用插件。
  2. 构建代理(Agent):如果构建任务非常复杂或需要特殊环境,可能需要配置基于龙芯架构的 Jenkins Agent 节点。这同样涉及 Agent 软件在龙芯上的兼容性问题。
  3. 性能考量:相比于主流 x86 服务器,在龙芯平台上进行大规模、高并发构建时,需要合理评估任务调度和资源分配,避免单个节点负载过重。
  4. 镜像来源:直接使用jenkins/jenkins:lts官方镜像可能无法在 LoongArch 上运行,需要寻找或构建适配的镜像。

3. 环境准备与前置条件

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

操作系统:推荐使用较新的龙芯社区发行版或中标麒麟、统信 UOS 等针对龙芯优化的操作系统。本文以通用 Linux 操作为例,具体命令可能因发行版包管理器不同而略有差异。

系统更新:首先更新系统软件包列表,确保环境最新。

sudo apt update && sudo apt upgrade -y # 或者对于 yum/dnf 系 # sudo yum update -y

依赖安装:安装 Docker 所需的基础工具。

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

网络与存储:

  • 确保服务器可以访问外部网络,以下载 Docker 安装包和 Jenkins 镜像。
  • 规划好 Docker 的工作目录(如/var/lib/docker)和 Jenkins 的数据持久化目录(如/home/jenkins_home),确保有足够的磁盘空间。

4. Docker 安装与配置

这是最关键的一步。由于龙芯是 LoongArch 架构,无法直接使用 Docker 官方为 x86_64 或 ARM64 提供的二进制包和镜像仓库。

4.1 安装 Docker

根据网络搜索材料中提到的信息,在龙芯 3B6000 上可以通过添加针对 LoongArch 的 Docker 仓库来安装较高版本(如 29.5.1+)。以下是一种通用安装思路:

  1. 添加 Docker 的 GPG 密钥和仓库源(具体仓库地址需根据龙芯社区或发行版提供的源进行配置):

    # 示例:添加仓库,实际URL需要替换为龙芯可用的Docker CE仓库 curl -fsSL https://download.docker.com/linux/loongarch/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=loongarch64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/loongarch \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    请注意:上述https://download.docker.com/linux/loongarch地址可能不存在。实际操作中,你需要寻找由龙芯社区、发行版厂商或第三方维护的 Docker CE for LoongArch 仓库。例如,某些社区源可能位于http://pkg.loongnix.cn/docker-ce/或类似地址。

  2. 安装 Docker Engine

    sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  3. 验证安装

    sudo docker --version # 预期输出类似:Docker version 29.5.1, build 12345 sudo systemctl start docker sudo systemctl enable docker sudo docker run hello-world

    如果hello-world镜像能成功运行并输出欢迎信息,说明 Docker 引擎安装成功。但hello-world镜像也需要有 LoongArch 版本,否则会报架构错误。你可能需要先拉取一个已知支持 LoongArch 的轻量级镜像(如busybox:latest,如果其支持多架构)进行测试。

4.2 配置 Docker 镜像加速器

为了提升拉取镜像的速度,特别是后续拉取可能存在的 LoongArch 适配镜像时,建议配置国内镜像加速器。

  1. 编辑 Docker 守护进程配置文件:
    sudo tee /etc/docker/daemon.json <<-'EOF' { “registry-mirrors”: [“https://your-mirror.mirror.aliyuncs.com“], # 替换为你的加速器地址,例如阿里云、腾讯云等提供的龙芯架构加速器(需确认支持) “exec-opts”: [“native.cgroupdriver=systemd”], “log-driver”: “json-file”, “log-opts”: { “max-size”: “100m” }, “storage-driver”: “overlay2” } EOF
  2. 重启 Docker 服务使配置生效:
    sudo systemctl daemon-reload sudo systemctl restart docker

5. 获取与运行 Jenkins 镜像

标准的jenkins/jenkins镜像不支持 LoongArch。我们需要找到或构建一个能在该架构上运行的 Jenkins 镜像。

5.1 方案一:使用社区构建的适配镜像

这是最快捷的方式。关注龙芯开源社区或国内镜像仓库,寻找标签中包含loongarch64的 Jenkins 镜像。例如,假设我们找到了一个镜像registry.example.com/jenkins:lts-loongarch64

  1. 拉取镜像
    sudo docker pull registry.example.com/jenkins:lts-loongarch64
  2. 运行 Jenkins 容器
    sudo docker run -d \ --name my-jenkins \ -p 8080:8080 \ -p 50000:50000 \ -v /home/jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ --restart unless-stopped \ registry.example.com/jenkins:lts-loongarch64
    参数解释
    • -d: 后台运行。
    • --name: 容器名称。
    • -p 8080:8080: 将容器内 Jenkins Web 界面端口映射到宿主机。
    • -p 50000:50000: 用于 Jenkins Agent 连接的端口。
    • -v /home/jenkins_home:/var/jenkins_home:关键!将容器内的 Jenkins 数据目录挂载到宿主机,实现数据持久化。确保/home/jenkins_home目录存在且 Jenkins 进程有写入权限(通常需要chown -R 1000:1000 /home/jenkins_home)。
    • -v /var/run/docker.sock:/var/run/docker.sock: 允许 Jenkins 容器使用宿主机的 Docker 引擎(用于在 Pipeline 中运行 Docker 命令)。
    • --restart unless-stopped: 设置容器自动重启策略。

5.2 方案二:自行构建 Jenkins 镜像(备选)

如果找不到现成镜像,可以考虑基于 LoongArch 的基础镜像(如loongnix/loongnix:latest)自行构建。这需要编写 Dockerfile。

  1. 创建 Dockerfile
    # 使用LoongArch基础镜像 FROM loongnix/loongnix:latest # 安装必要的依赖,如 Java (Jenkins 需要) RUN yum install -y java-11-openjdk-devel wget git # 下载 Jenkins WAR 包 ARG JENKINS_VERSION=2.440.3 RUN wget https://get.jenkins.io/war-stable/${JENKINS_VERSION}/jenkins.war -O /usr/share/jenkins/jenkins.war # 创建 Jenkins 用户和目录 RUN useradd -d /var/jenkins_home -u 1000 -m -s /bin/bash jenkins RUN mkdir -p /usr/share/jenkins/ref RUN chown -R jenkins:jenkins /usr/share/jenkins /var/jenkins_home # 暴露端口 EXPOSE 8080 50000 # 以 Jenkins 用户运行 USER jenkins ENTRYPOINT [“java”, “-jar”, “/usr/share/jenkins/jenkins.war”]
  2. 构建镜像
    sudo docker build -t my-jenkins-loongarch:latest .
  3. 使用自定义镜像运行容器:命令同方案一,将镜像名替换为my-jenkins-loongarch:latest

6. 初始化与访问 Jenkins

无论采用哪种镜像方案,容器启动后,都可以通过以下步骤完成 Jenkins 的初始化。

  1. 检查容器状态
    sudo docker ps | grep my-jenkins # 应看到容器状态为 Up sudo docker logs my-jenkins # 查看日志,等待出现 “Jenkins is fully up and running” 或类似信息
  2. 访问 Web 界面: 在浏览器中访问http://<你的龙芯服务器IP>:8080
  3. 解锁 Jenkins: 首次访问会要求输入初始管理员密码。该密码在容器日志或挂载的数据卷中。
    # 从容器日志中获取(推荐) sudo docker logs my-jenkins 2>&1 | grep -A 2 “Please use the following password” # 或从挂载的数据卷中获取 cat /home/jenkins_home/secrets/initialAdminPassword
  4. 安装推荐插件: 在初始化向导中,选择“安装推荐的插件”。由于架构特殊,插件下载过程可能会比在 x86 上慢,甚至个别插件安装失败。如果失败,可以稍后在 Jenkins 管理界面中重试或手动安装。
  5. 创建管理员账户: 按照提示创建第一个管理员用户。
  6. 配置实例 URL: 保持默认或根据你的网络环境设置。

7. 基础功能验证与配置

成功进入 Jenkins 主界面后,需要进行一些基础验证和配置,确保其能在龙芯平台上正常工作。

7.1 验证系统信息

  1. 点击 Jenkins 首页的 “Manage Jenkins” -> “System Information”。
  2. 查看 “System Properties” 中的os.archos.name属性。os.arch应该显示为loongarch64,这确认了 Jenkins 运行在正确的架构上。

7.2 测试自由风格项目构建

这是验证 Jenkins 核心构建功能是否正常的最简单方法。

  1. 新建任务:点击 “New Item”,输入任务名称(如test-loongarch-build),选择 “Freestyle project”,点击 OK。
  2. 配置构建步骤:在任务配置页面,向下滚动到 “Build Steps” 部分。
  3. 添加构建步骤:点击 “Add build step”,选择 “Execute shell”。
  4. 输入测试命令:在命令框中输入以下内容,这些命令可以验证龙芯环境的基本状态:
    echo “=== 系统架构信息 ===” uname -a echo “=== Java 版本 ===” java -version echo “=== Docker 信息 ===” docker --version echo “=== 当前目录 ===” pwd echo “=== 测试构建:创建一个文件 ===” echo “Hello from LoongArch Jenkins!” > hello_loongarch.txt cat hello_loongarch.txt
  5. 保存并立即构建:保存配置,回到项目页面,点击 “Build Now”。
  6. 查看控制台输出:点击构建历史中的构建编号(如 #1),再点击 “Console Output”。你应该能看到上述命令的执行结果,确认所有命令都成功执行,并且uname -a的输出包含loongarch64

7.3 安装必要插件

根据你的实际需求安装插件。对于龙芯环境,建议优先安装以下核心或常用插件,并注意观察安装是否成功:

  • Pipeline: 用于定义流水线。
  • Git: 用于从 Git 仓库拉取代码。
  • Docker Pipeline: 如果在 Pipeline 中使用 Docker。
  • SSH Agent: 用于远程执行命令。

安装路径:“Manage Jenkins” -> “Plugins” -> “Available plugins”。搜索并安装。

8. 配置 Docker 集成(Pipeline 中使用 Docker)

如果你需要在 Jenkins Pipeline 中构建或运行 Docker 镜像(例如,为你的龙芯应用构建容器镜像),需要确保 Jenkins 能够调用宿主机的 Docker。

  1. 验证 Docker 套接字挂载:在之前运行容器的命令中,我们已经添加了-v /var/run/docker.sock:/var/run/docker.sock。这步是关键。
  2. 在 Jenkins 中配置 Docker 工具(可选,对于声明式 Pipeline 的docker指令):
    • 进入 “Manage Jenkins” -> “Tools”。
    • 找到 “Docker Installations”,点击 “Add Docker”。
    • 命名(如Host Docker),Docker Hub URL可以留空或填写镜像加速器地址。
    • 重要:取消勾选 “Install automatically”。因为我们使用的是宿主机 Docker,无需 Jenkins 自动安装。
    • 在 “Tool Location” 中,填写 Docker 客户端在容器内的路径,通常是/usr/bin/docker(这取决于你的 Jenkins 镜像内是否安装了 Docker 客户端)。如果镜像内没有,你可能需要在构建自己的镜像时安装docker-cli
  3. 测试 Docker Pipeline
    • 新建一个 “Pipeline” 类型的任务。
    • 在 Pipeline 脚本中,尝试一个简单的 Docker 命令:
      pipeline { agent any stages { stage(‘Test Docker’) { steps { script { // 查看 Docker 版本 sh ‘docker --version’ // 列出镜像,验证连接 sh ‘docker images’ // 运行一个简单的 LoongArch 兼容的容器,例如 busybox sh ‘docker run --rm busybox:latest echo “Hello from inside a container on LoongArch!”‘ } } } } }
    • 运行该 Pipeline,观察控制台输出,确认 Docker 命令能成功执行。

9. 资源占用与性能观察

在龙芯 3B6000 上运行 Jenkins,需要关注其资源使用情况。

  1. 容器资源监控

    # 查看容器运行状态和资源占用概览 sudo docker stats my-jenkins # 查看容器内进程详情 sudo docker top my-jenkins

    重点关注CPU %MEM USAGE / LIMITMEM %这几列。Jenkins 主进程(Java)本身会消耗一定内存,内存占用会随着安装插件数量、并发构建任务数增加而上升。

  2. 宿主机资源观察

    # 查看宿主机整体资源使用 top # 或使用 htop (如果已安装) htop

    在 Jenkins 执行构建任务时,观察 CPU 和内存的使用率变化。

  3. Jenkins 系统监控

    • 在 Jenkins Web 界面的 “Manage Jenkins” -> “System Information” 页面底部,有 “Memory Usage” 图表,可以查看 JVM 堆内存使用情况。
    • 在 “Manage Jenkins” -> “Monitor” 可以查看线程、磁盘使用等更详细的信息。
  4. 性能调优建议

    • JVM 参数:如果 Jenkins 运行缓慢或频繁 Full GC,可以调整容器环境变量来设置 JVM 参数。例如,在docker run命令中添加-e JAVA_OPTS=“-Xmx2048m -Xms512m”来调整堆内存大小。
    • 构建执行器数量:在 “Manage Jenkins” -> “System” -> “# of executors” 中,根据龙芯 CPU 的核心数合理设置。不建议设置超过物理核心数,避免过度竞争。
    • 数据目录 I/O:确保 Jenkins 数据卷 (/home/jenkins_home) 挂载在 I/O 性能较好的磁盘上。

10. 常见问题与排查方法

在龙芯架构上部署 Jenkins 可能会遇到一些特有或常见的问题。

问题现象可能原因排查方式解决方案
docker pull失败,提示no matching manifestDocker 官方仓库没有 LoongArch 架构的镜像。docker pull命令的错误信息。1. 寻找第三方支持 LoongArch 的镜像仓库。
2. 自行构建镜像。
Jenkins 容器启动后立即退出1. 端口冲突。
2. 数据卷挂载目录权限错误。
3. 基础镜像或启动命令有问题。
sudo docker logs my-jenkins查看退出前的日志。1. 检查端口 8080、50000 是否被占用。
2. 确保数据卷目录存在且对 UID 1000 有读写权限 (chown -R 1000:1000 /home/jenkins_home)。
3. 检查 Dockerfile 或启动命令中的ENTRYPOINT/CMD
Web 界面无法访问1. 防火墙未开放端口。
2. 容器未成功启动。
3. 宿主机 IP 错误。
1.sudo docker ps确认容器状态。
2. `sudo netstat -tlnp
grep :8080` 查看端口监听。
3. 检查宿主机防火墙规则。
插件安装失败或极慢1. 网络问题,无法连接 Jenkins 更新中心。
2. 插件与 LoongArch 架构不兼容(较少见)。
1. 查看插件管理页面的错误信息。
2. 检查 Jenkins 日志 (/var/jenkins_home/logs或容器日志)。
1. 更换 Jenkins 更新中心镜像源(在插件高级设置中)。
2. 手动下载插件.hpi文件后离线安装。
3. 对于不兼容插件,寻找替代方案或等待更新。
Pipeline 中 Docker 命令执行失败1. 容器内未安装 Docker 客户端。
2./var/run/docker.sock挂载权限问题。
3. 用户组权限问题。
1. 在容器内执行docker version测试。
2. 检查宿主机docker.sock的权限 (ls -l /var/run/docker.sock)。
1. 确保 Jenkins 镜像包含docker-cli,或修改镜像安装它。
2. 将 Jenkins 容器内的用户(UID 1000)添加到宿主机的docker组(需在宿主机执行sudo usermod -aG docker <username>并重启)。更简单的做法是在运行容器时使用-u root(不推荐生产环境)。
3. 确保挂载的docker.sock可被容器内进程访问。
构建任务中的编译/测试失败构建工具链(如 gcc, maven, npm)在龙芯环境下存在兼容性问题或未安装。查看具体构建任务的“控制台输出”日志。1. 在 Jenkins 任务中,通过 shell 步骤预先安装龙芯平台所需的构建依赖。
2. 使用预先配置好环境的 Docker 镜像作为构建环境(需该镜像支持 LoongArch)。
3. 检查软件源码是否支持 LoongArch 架构的交叉编译或本地编译。

11. 最佳实践与使用建议

为了在龙芯 3B6000 上稳定、高效地使用 Docker 化 Jenkins,遵循以下实践会大有裨益。

  1. 镜像与数据持久化

    • 使用特定标签镜像:明确使用为loongarch64构建的 Jenkins 镜像标签,避免使用latest等浮动标签,以保证环境一致性。
    • 务必数据卷挂载:必须将/var/jenkins_home挂载到宿主机目录,这是 Jenkins 所有配置、任务、插件数据的生命线。定期备份此目录。
    • 分离数据与日志:可以考虑将 Jenkins 日志目录也挂载出来,方便排查问题:-v /home/jenkins_logs:/var/log/jenkins
  2. 安全与权限

    • 避免容器内 root 运行:Jenkins 官方镜像默认使用jenkins用户(UID 1000)。保持此设置,除非有特殊必要。
    • 谨慎挂载 Docker Socket-v /var/run/docker.sock:/var/run/docker.sock赋予了容器很高的权限。仅在确实需要在 Pipeline 中构建/运行 Docker 容器时才使用。在生产环境中,可以考虑使用更安全的替代方案,如 Jenkins Docker 插件配合独立的 Docker Agent。
    • 网络隔离:考虑为 Jenkins 容器创建自定义的 Docker 网络,而不是默认的bridge
  3. 性能与稳定性

    • 限制容器资源:使用docker run-m-cpus等参数限制容器可用的最大内存和 CPU,防止单个容器耗尽宿主机资源。
    • 配置 JVM 参数:通过环境变量JAVA_OPTS为 Jenkins 的 JVM 设置合适的堆内存大小(如-Xmx4g -Xms1g),根据物理内存调整。
    • 定期清理:在 Jenkins 系统设置中配置构建历史保留策略,并定期使用docker system prune清理无用的 Docker 镜像、容器和卷,释放磁盘空间。
  4. 备份与恢复

    • 制定定期备份/home/jenkins_home目录的策略。
    • 备份 Jenkins 的全局配置(config.xml)和任务配置(jobs/目录)。
    • 恢复时,只需将备份的数据目录覆盖到新的数据卷,然后启动一个使用相同镜像的 Jenkins 容器即可。

在龙芯平台上部署现代化工具链是对其生态建设的一次具体实践。通过 Docker 部署 Jenkins,我们成功地将一个广泛使用的 CI/CD 工具引入了 LoongArch 环境。整个过程的关键在于解决基础软件(Docker)的安装和镜像的架构适配问题。一旦 Jenkins 服务成功跑起来,其强大的插件体系和 Pipeline 能力,就能为龙芯平台的软件开发和运维工作提供与 x86 平台几乎一致的自动化体验。建议在投入生产前,充分测试你的具体构建流水线,确保所有依赖和工具在龙芯架构下都能正常工作。