【问题标题】:Pull jobs directory from a repository into Jenkins from a Dockerfile从 Dockerfile 将作业目录从存储库拉到 Jenkins
【发布时间】: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_HOME env var 通常设置为/var/lib/jenkins吗?
  • 当前的 Jenkins Dockerfile 使用这一行 ENV JENKINS_HOME /var/jenkins_home 设置了该变量。这是我得到 Dockerfile from 的地方
  • 基础 Dockerfile 将 /var/jenkins_home 设置为卷。我不确定我是否尝试将内容塞入一个目录,该目录是 Dockerfile 中的一个卷。感觉有点不对劲,可能无法按预期工作。
  • @burnettk 我已经对音量的行为进行了一些研究,看起来你是对的。当var/jenkins_home 被声明为一个卷时,目录变得不可变并且应用的任何更改都不会影响映像文件系统。这个link有更多信息
  • 不错!添加了事后总结答案。

标签: git docker jenkins


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2019-11-21
    • 1970-01-01
    • 2018-09-13
    • 2018-05-10
    相关资源
    最近更新 更多