【发布时间】:2017-05-13 05:03:48
【问题描述】:
我正在尝试创建一个 Jenkins 映像,该映像从包含一些预配置作业的私有存储库中提取一个目录,并将这些作业显示在仪表板上。我制作了一个 Dockerfile,它将构建一个 Jenkins 镜像,该镜像可以将一个目录从我的私有 repo 拉到 Jenkins 容器中。
但是,这些拉取的作业不会出现在 /var/jenkins_home/jobs 中,因此 Jenkins 不会在仪表板上显示作业。
这是 Dockerfile 的大致内容:
FROM jenkins:latest
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
USER root
RUN mkdir -p /var/jenkins_home/jobs/
WORKDIR /var/jenkins_home/jobs/
RUN "pull jobs directory from here" \
ls -lah;
WORKDIR /
USER jenkins
当我拉出作业目录时,我只能将其拉入 /var,但不能拉入 /var/jenkins_home/ 或 >/var/jenkins_home/jobs 目录。
我怀疑问题与在 Jenkins 映像中创建目录的方式有关,其中 /var/jenkins_home 目录在构建映像的某个时刻被覆盖。
我查看了相关帖子here,但我不想将任何本地文件夹与图像文件夹绑定。但这个想法是密切相关的。
感谢您的宝贵时间。
【问题讨论】:
-
不是
JENKINS_HOMEenv var 通常设置为/var/lib/jenkins吗? -
当前的 Jenkins Dockerfile 使用这一行
ENV JENKINS_HOME /var/jenkins_home设置了该变量。这是我得到 Dockerfile from 的地方 -
基础 Dockerfile 将 /var/jenkins_home 设置为卷。我不确定我是否尝试将内容塞入一个目录,该目录是 Dockerfile 中的一个卷。感觉有点不对劲,可能无法按预期工作。
-
@burnettk 我已经对音量的行为进行了一些研究,看起来你是对的。当
var/jenkins_home被声明为一个卷时,目录变得不可变并且应用的任何更改都不会影响映像文件系统。这个link有更多信息 -
不错!添加了事后总结答案。