当前位置:首页>python>Jenkins 容器中没有 Python?构建自定义 Jenkins 镜像才是正确姿势

Jenkins 容器中没有 Python?构建自定义 Jenkins 镜像才是正确姿势

  • 2026-09-17 22:25:37
Jenkins 容器中没有 Python?构建自定义 Jenkins 镜像才是正确姿势

在上一篇的实战过程中,你可能会遇到这样一个问题:

Jenkins 已经跑起来了,但执行自动化测试时却发现:容器里根本没有 Python。

也就是说需要提前构建自定义 Jenkins 镜像。

一、为什么 Jenkins 官方镜像默认没有 Python?

Jenkins 官方提供的 Docker 镜像,设计目标是:

  • 尽量 精简、通用
  • 只包含 Jenkins 运行所必需的组件
  • 不预装语言运行环境(如 Python / Node / Java SDK 等)

因此:

Jenkins 官方镜像 ≠ 自动化测试运行环境

如果你直接在容器里执行:

python --version

会出现类似:

command not found

二、为什么不推荐「进容器手动安装 Python」?

大多数人第一反应是没有就自己在容器内部创建,例如:

docker exec -it jenkins bash
apt-get install python3

⚠️ 这种做法在 CI 场景中非常不推荐,原因包括:

  • 容器重建后环境全部丢失
  • 无法版本化、不可复现
  • 不符合 Docker 的使用理念
  • 不利于团队协作与维护

但上一篇为了简单实现案例,还是采取了如上的方法进行搭建。但需要注意的是在容器内部使用apt,可能会触发如下错误:

E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission)

所以提升权限进行操作是必须的,执行:

docker exec -u 0 -it jenkins /bin/bash  # 0 表示root
apt-get update
apt-get install xxx

另外,如果下载比较缓慢,需要更换容器内部的apt镜像源:

sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources

👉 推荐的做法:构建自定义 Jenkins 镜像


三、推荐方案:基于官方 Jenkins 镜像构建 Python 版 Jenkins

我们以上一篇实战中用到的jenkins镜像为基础,在其中安装 Python 运行环境。

1️⃣ 编写 Dockerfile

FROM jenkins/jenkins:jdk17 

USER root

# 安装 Python3、pip、venv
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    python3 \
    python3-pip \
    python3-venv && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*


# 让 python 命令指向 python3(可选)
RUN ln -sf /usr/bin/python3 /usr/bin/python

USER jenkins

2️⃣ 构建自定义 Jenkins 镜像

docker build -t jenkins-python:jdk17 .

3️⃣ 使用新镜像启动 Jenkins

docker run -d \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /opt/jenkins_home:/var/jenkins_home \
  jenkins-python:jdk17

⚠️ Jenkins 数据不会丢失 因为核心数据目录已经通过 volume 挂载到了宿主机


四、验证 Python 是否可用

启动后可以快速验证:

docker exec -it jenkins python --version
docker exec -it jenkins pip --version

如果能正常输出版本号,说明环境已经准备完成 ✅


五、CI 场景下的 Python 最佳实践

在 Jenkins 构建脚本中,推荐使用虚拟环境:

python -m venv venv
. venv/bin/activate

pip install -r requirements.txt
pytest -v

这样可以做到:

  • 不污染系统环境
  • 每次构建环境一致
  • 更适合长期运行的 CI 平台

六、小结

Jenkins 负责“调度和执行”, 运行环境应该通过 Docker 镜像提前固化。

在自动化测试场景下,构建一个带 Python 的 Jenkins 自定义镜像,是比较推荐的做法。

在下一步中,我们就可以基于这个镜像,进一步引入 Pipeline、测试报告、通知机制啦~敬请期待知识库的更新吧!

最新文章

随机文章