如何在Docker容器中运行Jenkins时在主机上构建

时间:2016-05-17 08:33:25

标签: jenkins docker

我在Docker容器中运行Jenkins实例,并且它连接到Bitbucket存储库。当在线存储库中的某些内容发生变化时,Jenkins会下载新的源代码。基于新的源代码,我想创建一个新的Docker镜像,但这需要在主机上进行,因为它是我安装Docker的地方。

我还没弄清楚如何在主机上运行某些东西,但同时我也知道Docker用于隔离进程,所以这是设计的。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:3)

我会创建一个单独的Jenkins slave,它映射到运行Jenkins的主机或安装了Docker的单独主机。然后运行你的工作来在slave上而不是master上创建Docker镜像。

official Jenkins Docker image的文档详细介绍了如何连接奴隶。

答案 1 :(得分:1)

可以在Jenkins容器内的主机中使用Docker。您需要在容器上安装Docker,然后映射主机的Docker套接字描述符。

实现此目的的示例Dockerfile可能如下所示:

FROM jenkins/jenkins:2.102

USER root

RUN apt-get update && \
    apt-get install -y \
    apt-transport-https \
    software-properties-common

# Docker
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" && \
    apt-get update && apt-get install -y docker-ce && \
    usermod -aG docker,staff jenkins

# Set SUID to run docker as root
RUN chmod g+s /usr/bin/docker

USER jenkins

要在Docker工作的情况下运行基于此图像的容器,您需要映射docker.sock文件描述符:

docker run -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock my-image

如果您不想构建新图片,可以使用我预先构建的图片:https://hub.docker.com/r/mdobak/docker-jenkins/