我正在尝试创建一个Jenkins映像,该映像从包含一些预配置作业的私有存储库中提取目录,并在仪表板上显示这些作业。我创建了一个Dockerfile,它将构建一个Jenkins映像,可以将目录从我的私有仓库中拉入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
当我拉出jobs目录时,我只能将它拉到 / var 中,但不能在 / var / jenkins_home / 或 / var / jenkins_home / jobs 目录。
我怀疑这个问题与在Jenkins图像中创建目录的方式有关,其中 / var / jenkins_home 目录在构建图像的某个时刻被覆盖。
我检查了相关帖子here,但我不想将任何本地文件夹与图像文件夹绑定。但这个想法密切相关。
谢谢你的时间。
答案 0 :(得分:0)
base Dockerfile通过以下指令将/ var / jenkins_home设置为卷:
VOLUME /var/jenkins_home
使得此目录的行为与图像中的普通目录不同,结果是您无法在Dockerfile中写入此目录,就像您在提取预配置作业时尝试的那样。
问题在a post called Docker In-depth: Volumes中有更详细的描述,但是TLDR;是这样的:
FROM debian:jessie
VOLUME /foo/bar
RUN touch /foo/bar/baz
# /foo/bar/baz doesn't exist