在Kubernetes Pod中预装Python、MongoDB以运行Jenkins测试
解决方案
1. 不要放弃Helm,用它配置自定义Agent是最优解
Helm可以帮你统一管理Jenkins的所有配置,包括Agent Pod模板,完全不需要硬编码安装命令到Jenkinsfile。
2. 构建预装依赖的Jenkins Agent镜像
默认的Jenkins Agent镜像没有Python和MongoDB相关工具,你需要自己构建一个包含这些依赖的镜像:
Dockerfile示例
FROM jenkins/inbound-agent:latest USER root # 安装Python3.9、pip、pytest及MongoDB客户端 RUN apt-get update && apt-get install -y --no-install-recommends \ python3.9 python3-pip mongodb-clients \ && rm -rf /var/lib/apt/lists/* # 把python3.9设为默认python RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 RUN update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1 # 安装Python测试依赖 RUN pip install --no-cache-dir pytest pymongo USER jenkins
构建并推送镜像到你的私有镜像仓库:
docker build -t your-registry/my-jenkins-python-agent:v1 . docker push your-registry/my-jenkins-python-agent:v1
3. 修改Helm values.yaml配置自定义Pod模板
打开你使用的Helm values.yaml,找到agent配置段,添加自定义Pod模板:
关键配置片段
agent: enabled: true # 配置自定义Pod模板 podTemplates: - name: "python-mongo-agent" label: "python-mongo-agent" containers: - name: "jnlp" image: "your-registry/my-jenkins-python-agent:v1" # 替换为你的镜像地址 imagePullPolicy: "IfNotPresent" # 可选:添加MongoDB服务端作为sidecar容器(如果测试需要本地MongoDB) # - name: "mongodb" # image: "mongo:6.0" # env: # - name: MONGO_INITDB_ROOT_USERNAME # value: "admin" # - name: MONGO_INITDB_ROOT_PASSWORD # value: "password" # ports: # - containerPort: 27017
4. 调整Jenkinsfile使用自定义Agent
在Jenkinsfile中指定使用你配置的Agent标签,直接使用预装的依赖:
Jenkinsfile示例
pipeline { agent { label 'python-mongo-agent' } stages { stage('Run Tests') { steps { sh 'python --version' sh 'pytest --version' # 如果用了sidecar MongoDB,测试代码连接地址为 mongodb://admin:password@localhost:27017 sh 'mongosh --version' } } } }
5. 重新部署Jenkins
用修改后的values.yaml执行Helm升级:
helm upgrade jenkins jenkinsci/jenkins -f your-custom-values.yaml
关于MongoDB服务端的额外说明
- 如果测试需要独立的MongoDB服务,推荐在K8s集群中单独部署MongoDB(用Helm安装官方MongoDB chart),然后在测试代码中通过K8s Service名称连接(比如
mongodb://mongodb-service:27017),比sidecar更稳定。
内容的提问来源于stack exchange,提问作者Vaibhav
相关产品推荐
相关产品推荐

