【发布时间】:2019-02-06 03:14:16
【问题描述】:
我创建了一个 Dockerfile(用于节点 JNLP 从站,可与 Kubernetes 的 Jenkins 插件 一起使用)。我是从官方图片jenkinsci/jnlp-slave延伸而来的
FROM jenkinsci/jnlp-slave
USER root
MAINTAINER Aryak Sengupta <aryak.sengupta@hyland.com>
LABEL Description="Image for NodeJS slave"
COPY cert.crt /usr/local/share/ca-certificates
RUN update-ca-certificates
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash \
&& apt-get install -y nodejs
ENTRYPOINT ["jenkins-slave"]
我将这张图片保存在我的 Pod 模板中(在 K8s 插件配置中)。现在,当我尝试在这个 slave 上运行构建时,我发现 Pod 内部生成了两个容器(截图证明了这一点。)。
我的 Pod 模板如下所示:
现在如果我做一个简单的docker ps,我发现有两个容器启动了(为什么?):
现在,在 Jenkins 的 Jenkins Job 配置中,无论我在构建步骤中添加什么,这些步骤都会在第一个容器中执行。
即使我在我的PodTemplate 中使用官方的Node 容器,结果仍然是一样的:
我尝试在我的 Jenkins Job 中打印 Node 版本,输出为 "Node not found" 。另外,为了验证我的臀部,我在我的第二个容器中做了一个docker exec 并尝试打印Node 版本。在这种情况下,它工作得非常好。
这是我的构建步骤的样子:
所以,归结为,我有两个主要问题:
- 为什么当我启动 Jenkins 作业时会启动两个(一个用于 JNLP,一个用于所有自定义更改)容器?
- 为什么我的作业在第一个未安装 Node 的容器上运行?如何使用此配置实现使用
Node构建项目的预期行为?
我错过了什么?
附: - 如果问题在某些部分不清楚,请告诉我。
编辑:我知道这可以使用 Pipeline Jenkins 插件来完成,我可以在其中明确提及 container 名称,但我需要从 Jenkins UI 执行此操作。有什么方法可以指定容器名称以及我已经这样做的从属名称:
【问题讨论】:
-
你的 podTemplate 是什么?
-
@DanielWatrous 我已经用 Pod 模板更新了这个问题。谢谢
-
我还用 Jenkins Job 输出更新了这个问题。想,我应该让你知道。
标签: docker jenkins kubernetes jenkins-plugins