【问题标题】:How to deploy custom Docker containers as Jenkins slaves from a remote Kubernetes installation?如何从远程 Kubernetes 安装将自定义 Docker 容器部署为 Jenkins 从属?
【发布时间】:2018-08-17 15:40:47
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 现在,当我运行我的作业时,我看到从服务器尝试部署,但我看到了以下消息:“(待定——标签为‘combined’的所有节点都处于脱机状态)”

标签: docker jenkins flask kubernetes jenkins-slave


【解决方案1】:

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

在设置工作目录时也要小心。我有这个指向我的应用程序的 python 文件在哪里并且它们被覆盖了。我假设这是 Jenkins 工作区目录,并且会覆盖已经存在的所有内容。

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

以下是工作容器配置:

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多