如何从远程Kubernetes安装中将自定义Docker容器部署为Jenkins从属容器?

时间:2018-08-17 15:40:47

标签: docker jenkins flask kubernetes jenkins-slave

使用Kubernetes插件:https://wiki.jenkins.io/display/JENKINS/Kubernetes+Plugin

我阅读的大多数示例都描述了通过Kubernetes安装在同一环境/机器上部署Jenkins主服务器。但是出于测试目的,我有一个minikube环境在单独的VM上运行(即不在Jenkins master运行的同一台计算机上)。在完成一些端口转发,按照此blog中所述设置证书并配置Kubernetes云之后,我已成功连接到VM。另外,如果我尝试部署默认的JNLP容器,则将部署该从属容器,并且我的作业将在其中成功运行。

因此,现在我想在单个Pod中部署2个自定义容器,每个容器运行各自的应用程序(使用Flask的基本Web服务),这些容器将从前端容器上的端口5001发送HTTP消息到端口5002后端容器。我主要只是尝试在Jenkins全局配置中的Web UI中对此进行设置,而我尚未尝试在Jenkinsfile中设置pod模板。

有点背景是,我希望每次触发新作业时都能部署一个单独的隔离测试环境。我想让Kubernetes部署一个包含前端和后端容器的单独的Pod,然后对其交互进行测试。我希望将这些Pod部署为Jenkins的奴隶,以便为每个构建版本提供正确的隔离环境。

下面是我尝试过的初始Kubernetes插件配置的屏幕截图。我是否需要公开端口50000并在每个容器中运行JNLP进程才能连接到主服务器?

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

我发现Jenkins默认情况下会部署JNLP从站来驱动Pod中的JNLP连接,因此我的pod中将有3个容器:JNLP Slave,前端和后端。可以在以下位置找到有关该JNLP映像的信息:https://github.com/jenkinsci/docker-jnlp-slave。这个从属容器的默认配置不能完全满足我的要求,但是可以处理与Jenkins主服务器的连接。因此,如文档中所述,我可能会对其进行修改或用新容器覆盖它,以推动将测试分发到前端和后端容器。

设置工作目录时也要小心。我指的是我的应用程序的python文件所在的位置,它们正在被覆盖。我假设这是Jenkins工作区目录,并且将覆盖那里的所有内容。

我还删除了该容器的命令,因为我的Docker镜像已经定义了一些初始命令,因此前端和后端容器不需要任何其他操作。

以下是工作容器配置:

frontend container config frontend container ports

Backend (interceptor) container config Backend (interceptor) ports