我在Kubernetes集群中有几个flask应用程序。现在的想法是在这些图像进入生产之前对其进行测试。最后我爱上了詹金斯。
我部署了一个Jenkins的docker映像,设置了它并能够附加到我的存储库。发生的第一个问题是依赖关系。由于每个存储库都带着自己的依赖项运行,因此简单的Jenkins映像似乎无法下载所需的需求。这里是我使用的Jenkins图像:
FROM jenkins/jenkins:lts-alpine
USER root
RUN apk add python3 &&
python3 -m ensurepip &&
pip3 install --upgrade pip setuptools &&
if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi &&
if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi &&
rm -r /root/.cache
RUN pip install alpine
RUN apk add pkgconf
RUN apk add build-base
RUN apk add python3-dev
RUN apk -U upgrade
RUN apk add --no-cache libffi-dev openssl-dev
RUN apk add gcc musl-dev python3-dev libffi-dev openssl-dev cargo
RUN apk update
USER jenkins
例如,此映像无法下载scipy
库,也无法下载blis
库。然后我尝试通过安装Jenkins来安装ubuntu镜像,但是我没有成功部署它。
通过阅读更多的在线,我已经找到了解决方案,使用Jenkins来拉其他docker映像并相应地测试它们。但是我总是读到在docker中运行docker并不是一个真正的最佳实践。
简而言之,在Kubernetes环境中使用Jenkins测试docker映像的最佳实践是什么?是否有可能在jenkins内部运行ubuntu映像,以便在丢失库的情况下,我可以始终执行到pod和sudo apt-get install X
的丢失包?最后,如果在docker中运行docker最终不是一个反模式,那么您将如何设置测试?
注意:每个flask存储库都有自己的测试套件,生成XML报告供junit解析。
如果您想在Jenkins中自定义执行环境,那么我建议使用jenkins/agent
(或jenkins/inbound-agent
)作为基础映像构建您自己的Jenkins代理。
如果在Kubernetes中运行Jenkins,你可以使用Jenkins Helm Chart(或Jenkins Operator)并将代理映像修改为你自定义的Jenkins代理映像。