我在Docker容器中运行Jenkins实例,并且它连接到Bitbucket存储库。当在线存储库中的某些内容发生变化时,Jenkins会下载新的源代码。基于新的源代码,我想创建一个新的Docker镜像,但这需要在主机上进行,因为它是我安装Docker的地方。
我还没弄清楚如何在主机上运行某些东西,但同时我也知道Docker用于隔离进程,所以这是设计的。有没有办法实现这个目标?
答案 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/