Jenkins 管道异常 - 找不到 Docker



我已经创建了 GKE 集群并在该集群上安装了 Jenkins。现在我正在运行管道,我创建了用于构建 DockerImage 的 Jenkinsfile ,但是当我运行管道时,它会抛出 Docker 未找到的异常

1) 创建 GKE 集群 2) 已安装的詹金斯 3) 添加了 Docker 中心凭据 4) 添加了 gitlab 的访问密钥

詹金斯文件:

stage('Build Docker Image') { 当 { 分支"主" } 步骤 { 脚本 { echo 'Before docker run' sh'docker --version' app = docker.build("sarab321/test-pipeline") 回显"码头工人运行成功" } } }

请参阅下面的例外情况

api版本:"v1" 种类:"豆荚" 元数据: 注释:{} 标签: 詹金斯:"奴隶" Jenkins/CD-Jenkins-slave: "true" 名称:"默认-d7qdb" 规范: 器皿: - 参数: - "59c323186a77b4be015362977ec64e4838001b6d77c0f372bec7cda7cf93f9b2" - "默认-d7qdb" 环境: - 名称:"JENKINS_SECRET" 值:"59c323186a77b4be015362977ec64e4838001b6d77c0f372bec7cda7cf93f9b2" - 名称:"JENKINS_TUNNEL" 值:"cd-jenkins-agent:50000" - 名称:"JENKINS_AGENT_NAME" 值:"默认-d7qdb" - 名称:"JENKINS_NAME" 值:"默认-d7qdb" - 名称:"JENKINS_URL" 值:"http://cd-jenkins.default.svc.cluster.local:8080" 图片:"Jenkins/JNLP-slave:3.27-1" imagePullPolicy: "IfNotPresent" 名称:"JNLP" 资源: 限制: 内存:"512Mi" 中央处理器:"1" 请求: 内存:"256英里" 中央处理器:"500M" 安全上下文: 特权:假 TTY:假 卷装载: - mountPath: "/var/run/docker.sock" 名称:"卷-0" 只读:假 - mountPath: "/home/jenkins" 名称:"工作区卷" 只读:假 workingDir: "/home/jenkins" nodeSelector: {} 重新启动策略:"从不" 服务帐户:"默认" 卷: - 主机路径: path: "/var/run/docker.sock" 名称:"卷-0" - 空目录: 中:" 名称:"工作区卷">

  • 码头工人版本/home/jenkins/workspace/TestPipeline_master@tmp/durable-5dd73d2b/script.sh: 1:/home/jenkins/workspace/TestPipeline_master@tmp/durable-5dd73d2b/script.sh: docker: 未找到

看起来docker没有安装在您的构建代理上,而是使用"jenkins/jnlp-slave:3.27-1"映像在容器内。我有如何在 jenkins LTS 映像中安装 docker CLI 的示例:https://github.com/sudo-bmitch/jenkins-docker

该映像包括使 docker 集成可移植的以下步骤:

  • 安装 Docker CLI
  • 安装 gosu(需要,因为入口点将以 root 身份启动)
  • 将 Jenkins 用户配置为 Docker 组的成员
  • 包括一个入口点,该入口点可调整为 docker GID 以匹配/var/run/docker.sock GID 的入口点

实际的 docker CLI 安装按以下行执行:

RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - 
&& add-apt-repository 
"deb [arch=amd64] https://download.docker.com/linux/debian 
$(lsb_release -cs) 
stable" 
&& apt-get update 
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends 
docker-ce-cli${DOCKER_CLI_VERSION}

您可以获取 entrypoint.sh 和 Dockerfile,修改 Dockerfile 的基本映像 (FROM) 以及 entrypoint.sh 中的原始入口点脚本,以指向 jnlp-slave 等效项。

最新更新