是否有通过 Jenkins 容器化服务运行 Docker 命令的正确方法?
我看到 Jenkins 生态系统中有许多插件来支持 Docker 命令,尽管它们都会引发错误,因为 Docker 未安装在 Jenkins 容器中。
我有一个 Dockerfile,它提供了一个 Jenkins 镜像和一个可运行的 Docker 安装,但为了工作,我必须挂载主机的 Docker 套接字:
FROM jenkins/jenkins:lts
USER root
RUN apt-get -y update && \
apt-get -y install sudo \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
RUN add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
RUN apt-get -y update && \
apt-get -y install --allow-unauthenticated \
docker-ce \
docker-ce-cli \
containerd.io
RUN echo "jenkins:jenkins" | chpasswd && adduser jenkins sudo
RUN echo jenkins ALL= NOPASSWD: ALL >> /etc/sudoers
USER jenkins
它可以像这样运行:
docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock
这样就可以在 Jenkins 容器内运行 Docker 命令。虽然,我担心安全性:即这样 Jenkins 容器可以访问主机中运行的所有容器,而且 Jenkins 是 root 用户,我不喜欢生产。
我试图在 Kubernetes 集群中运行一个 Jenkins 实例以支持该集群中的 CI 和 CD 管道,因此我猜 Jenkins 必须被容器化。
我错过了什么吗?