在 Jenkins 管道中运行 Docker 命令

时间:2021-01-19 20:53:12

标签: docker jenkins kubernetes dockerfile jenkins-pipeline

是否有通过 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 必须被容器化。

我错过了什么吗?

0 个答案:

没有答案