使用预配置的作业创建Jenkins Docker Image

时间:2017-04-29 03:41:34

标签: docker jenkins pipeline

我创建了一堆本地部署管道作业,这些作业执行的操作包括删除现有容器,在本地构建服务,构建docker镜像,运行容器等等。这些不是CI / CD作业,只是很小在开发期间本地部署的管道。

我现在要做的就是让所有开发者都可以使用它,这样他们就可以简单地启动已经包含作业的jenkins的本地实例。

我的码头文件相当直接......

FROM jenkins:latest

USER root

RUN apt-get update
RUN apt-get install -y sudo

RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers

# Docker
RUN apt-get update
RUN apt-get dist-upgrade -y
RUN apt-get install apt-transport-https ca-certificates -y
RUN sh -c "echo deb https://apt.dockerproject.org/repo debian-jessie main > /etc/apt/sources.list.d/docker.list"
RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
RUN apt-get update
RUN apt-cache policy docker-engine
RUN apt-get install docker-engine -y

# .NET Core CLI dependencies
RUN echo "deb [arch=amd64] http://llvm.org/apt/jessie/ llvm-toolchain-jessie-3.6 main" > /etc/apt/sources.list.d/llvm.list \
    && wget -q -O - http://llvm.org/apt/llvm-snapshot.gpg.key|apt-key add - \
    && apt-get update \
    && apt-get install -y --no-install-recommends \
        clang-3.5 \
        libc6 \
        libcurl3 \
        libgcc1 \
        libicu52 \
        liblldb-3.6 \
        liblttng-ust0 \
        libssl1.0.0 \
        libstdc++6 \
        libtinfo5 \
        libunwind8 \
        libuuid1 \
        zlib1g \
    && rm -rf /var/lib/apt/lists/*

#DotNetCore
RUN curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=847105
RUN mkdir -p /opt/dotnet && tar zxf dotnet.tar.gz -C /opt/dotnet
RUN ln -s /opt/dotnet/dotnet /usr/local/bin

# Minimal Jenkins Plugins
RUN /usr/local/bin/install-plugins.sh git matrix-auth workflow-aggregator docker-workflow blueocean credentials-binding

# Skip initial setup
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false

COPY LocallyDeployIdentityConfig.xml /var/jenkins_home/jobs/identity/config.xml

USER jenkins

我认为我能做的只是将作业配置文件复制到/ jobs / jobname文件夹中,然后会出现作业,但这不仅会出现,而且现在我也无法手动创建作业。我现在得到一个java.io.IOException“没有这样的文件或目录” - 注意当我执行到正在运行的容器时,作业和作业名目录存在,我的配置文件就在那里。

有什么想法吗?

3 个答案:

答案 0 :(得分:8)

对于任何有兴趣的人 - 我找到了更好的解决方案。我只是将jobs文件夹映射到主机上的文件夹,这样我就可以将创建的作业放入源代码控制中进行编辑,然后添加它们而无需构建新的docker镜像。

排序。

答案 1 :(得分:2)

Jenkins启动时需要重新启动的作业可以复制到 / usr / share / jenkins / ref / jobs / 文件夹中。

但是请记住,如果作业(或任何作业)已经存在于Jenkins主文件夹中,那么从 / usr / share / jenkins / ref / jobs / 文件夹进行的更新将不起作用,除非您以 *。override 名称结尾文件。 https://github.com/jenkinsci/docker/blob/master/jenkins-support#L110

Dockerfile

# First time building of jenkins with the preconfigured job
COPY job_name/config.xml /usr/share/jenkins/ref/jobs/job_name/config.xml

# But if jobs need to be updated, suffix the file names with '.override'.
COPY job_name/config.xml.override /usr/share/jenkins/ref/jobs/job_name/config.xml.override

答案 2 :(得分:0)

我将作业与configs等一起保存在bootstrap文件夹中。

要添加作业(即seedjob),我需要将以下内容添加到Dockerfile

# copy seedjob
COPY bootstrap/seedjob.xml /usr/share/jenkins/ref/jobs/seedjob/config.xml