龙芯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,主要服务于特定的开发与运维场景。
它非常适合:
- 龙芯原生应用开发团队:需要为 LoongArch 架构的软件项目搭建自动化构建、测试流水线。
- 软件适配与迁移团队:在将软件从 x86/ARM 向龙芯平台迁移的过程中,利用 Jenkins 自动化完成编译、打包和基础测试。
- 教育或研究机构:在龙芯实验环境中,为学生或研究人员提供一套标准的 CI/CD 实践平台。
- 内部工具链建设:为内部使用的、部署在龙芯服务器上的工具或服务,建立自动化发布流程。
需要注意的边界:
- 插件兼容性:并非所有 Jenkins 插件都经过 LoongArch 架构的充分测试,部分插件可能因依赖原生库而无法工作。建议优先使用核心插件和经过广泛验证的常用插件。
- 构建代理(Agent):如果构建任务非常复杂或需要特殊环境,可能需要配置基于龙芯架构的 Jenkins Agent 节点。这同样涉及 Agent 软件在龙芯上的兼容性问题。
- 性能考量:相比于主流 x86 服务器,在龙芯平台上进行大规模、高并发构建时,需要合理评估任务调度和资源分配,避免单个节点负载过重。
- 镜像来源:直接使用
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+)。以下是一种通用安装思路:
添加 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/或类似地址。安装 Docker Engine:
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin验证安装:
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 适配镜像时,建议配置国内镜像加速器。
- 编辑 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 - 重启 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。
- 拉取镜像:
sudo docker pull registry.example.com/jenkins:lts-loongarch64 - 运行 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。
- 创建 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”] - 构建镜像:
sudo docker build -t my-jenkins-loongarch:latest . - 使用自定义镜像运行容器:命令同方案一,将镜像名替换为
my-jenkins-loongarch:latest。
6. 初始化与访问 Jenkins
无论采用哪种镜像方案,容器启动后,都可以通过以下步骤完成 Jenkins 的初始化。
- 检查容器状态:
sudo docker ps | grep my-jenkins # 应看到容器状态为 Up sudo docker logs my-jenkins # 查看日志,等待出现 “Jenkins is fully up and running” 或类似信息 - 访问 Web 界面: 在浏览器中访问
http://<你的龙芯服务器IP>:8080。 - 解锁 Jenkins: 首次访问会要求输入初始管理员密码。该密码在容器日志或挂载的数据卷中。
# 从容器日志中获取(推荐) sudo docker logs my-jenkins 2>&1 | grep -A 2 “Please use the following password” # 或从挂载的数据卷中获取 cat /home/jenkins_home/secrets/initialAdminPassword - 安装推荐插件: 在初始化向导中,选择“安装推荐的插件”。由于架构特殊,插件下载过程可能会比在 x86 上慢,甚至个别插件安装失败。如果失败,可以稍后在 Jenkins 管理界面中重试或手动安装。
- 创建管理员账户: 按照提示创建第一个管理员用户。
- 配置实例 URL: 保持默认或根据你的网络环境设置。
7. 基础功能验证与配置
成功进入 Jenkins 主界面后,需要进行一些基础验证和配置,确保其能在龙芯平台上正常工作。
7.1 验证系统信息
- 点击 Jenkins 首页的 “Manage Jenkins” -> “System Information”。
- 查看 “System Properties” 中的
os.arch和os.name属性。os.arch应该显示为loongarch64,这确认了 Jenkins 运行在正确的架构上。
7.2 测试自由风格项目构建
这是验证 Jenkins 核心构建功能是否正常的最简单方法。
- 新建任务:点击 “New Item”,输入任务名称(如
test-loongarch-build),选择 “Freestyle project”,点击 OK。 - 配置构建步骤:在任务配置页面,向下滚动到 “Build Steps” 部分。
- 添加构建步骤:点击 “Add build step”,选择 “Execute shell”。
- 输入测试命令:在命令框中输入以下内容,这些命令可以验证龙芯环境的基本状态:
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 - 保存并立即构建:保存配置,回到项目页面,点击 “Build Now”。
- 查看控制台输出:点击构建历史中的构建编号(如 #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。
- 验证 Docker 套接字挂载:在之前运行容器的命令中,我们已经添加了
-v /var/run/docker.sock:/var/run/docker.sock。这步是关键。 - 在 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。
- 测试 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,需要关注其资源使用情况。
容器资源监控:
# 查看容器运行状态和资源占用概览 sudo docker stats my-jenkins # 查看容器内进程详情 sudo docker top my-jenkins重点关注
CPU %、MEM USAGE / LIMIT、MEM %这几列。Jenkins 主进程(Java)本身会消耗一定内存,内存占用会随着安装插件数量、并发构建任务数增加而上升。宿主机资源观察:
# 查看宿主机整体资源使用 top # 或使用 htop (如果已安装) htop在 Jenkins 执行构建任务时,观察 CPU 和内存的使用率变化。
Jenkins 系统监控:
- 在 Jenkins Web 界面的 “Manage Jenkins” -> “System Information” 页面底部,有 “Memory Usage” 图表,可以查看 JVM 堆内存使用情况。
- 在 “Manage Jenkins” -> “Monitor” 可以查看线程、磁盘使用等更详细的信息。
性能调优建议:
- 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 性能较好的磁盘上。
- JVM 参数:如果 Jenkins 运行缓慢或频繁 Full GC,可以调整容器环境变量来设置 JVM 参数。例如,在
10. 常见问题与排查方法
在龙芯架构上部署 Jenkins 可能会遇到一些特有或常见的问题。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
docker pull失败,提示no matching manifest | Docker 官方仓库没有 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,遵循以下实践会大有裨益。
镜像与数据持久化:
- 使用特定标签镜像:明确使用为
loongarch64构建的 Jenkins 镜像标签,避免使用latest等浮动标签,以保证环境一致性。 - 务必数据卷挂载:必须将
/var/jenkins_home挂载到宿主机目录,这是 Jenkins 所有配置、任务、插件数据的生命线。定期备份此目录。 - 分离数据与日志:可以考虑将 Jenkins 日志目录也挂载出来,方便排查问题:
-v /home/jenkins_logs:/var/log/jenkins。
- 使用特定标签镜像:明确使用为
安全与权限:
- 避免容器内 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。
- 避免容器内 root 运行:Jenkins 官方镜像默认使用
性能与稳定性:
- 限制容器资源:使用
docker run的-m、-cpus等参数限制容器可用的最大内存和 CPU,防止单个容器耗尽宿主机资源。 - 配置 JVM 参数:通过环境变量
JAVA_OPTS为 Jenkins 的 JVM 设置合适的堆内存大小(如-Xmx4g -Xms1g),根据物理内存调整。 - 定期清理:在 Jenkins 系统设置中配置构建历史保留策略,并定期使用
docker system prune清理无用的 Docker 镜像、容器和卷,释放磁盘空间。
- 限制容器资源:使用
备份与恢复:
- 制定定期备份
/home/jenkins_home目录的策略。 - 备份 Jenkins 的全局配置(
config.xml)和任务配置(jobs/目录)。 - 恢复时,只需将备份的数据目录覆盖到新的数据卷,然后启动一个使用相同镜像的 Jenkins 容器即可。
- 制定定期备份
在龙芯平台上部署现代化工具链是对其生态建设的一次具体实践。通过 Docker 部署 Jenkins,我们成功地将一个广泛使用的 CI/CD 工具引入了 LoongArch 环境。整个过程的关键在于解决基础软件(Docker)的安装和镜像的架构适配问题。一旦 Jenkins 服务成功跑起来,其强大的插件体系和 Pipeline 能力,就能为龙芯平台的软件开发和运维工作提供与 x86 平台几乎一致的自动化体验。建议在投入生产前,充分测试你的具体构建流水线,确保所有依赖和工具在龙芯架构下都能正常工作。