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

How to deploy custom Docker containers as Jenkins slaves from a remote Kubernetes installation?

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

我通读过的大多数示例都描述了在同一个 environment/machine 中通过 Kubernetes 安装部署 Jenkins master。但是出于测试目的,我在单独的 VM 上有一个 minikube 环境 运行ning(即不在同一台机器上,Jenkins master 是 运行ning)。在进行了一些端口转发后,我成功连接到虚拟机,按照 blog 中所述设置证书并配置 Kubernetes 云。此外,如果我尝试部署默认的 JNLP 容器,该从站将被部署,我的工作将 运行 在其中成功。

所以现在我想在单个 pod 中部署 2 个自定义容器,每个容器 运行 它们自己的应用程序(使用 Flask 的基本 Web 服务),将发送一个 HTTP post 从前端容器的 5001 端口到后端容器的 5002 端口。我主要只是尝试在 Jenkins 全局配置中的 Web UI 中为此进行设置,我还没有尝试在 Jenkinsfile 中设置 pod 模板。

一点背景是我希望能够在每次触发新作业时部署一个单独且隔离的测试环境。我想让 Kubernetes 部署一个单独的 Pod,其中包含前端和后端容器,然后 运行s 测试它们如何交互。我希望将这些 pods 部署为 Jenkins slaves 会为每个构建提供正确的隔离环境来实现这一点。

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

我发现Jenkins默认部署了一个JNLP slave来驱动​​Pod中的JNLP连接,所以我的pod中会有3个容器:JNLP Slave,frontend,backend。可以在此处找到有关该 JNLP 图像的信息:https://github.com/jenkinsci/docker-jnlp-slave。这个从容器的默认配置并不完全符合我的要求,但它确实处理了与 Jenkins 主容器的连接。因此,我可能会修改它或使用文档中提到的新容器覆盖它,以将我的测试分发到前端和后端容器。

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

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

以下是工作容器配置: