3

我正在使用 Build Toolkit 为每个微服务构建 docker 映像。

./build.sh

export DOCKER_BUILDKIT=1
# ....
docker build -t ....
# ... 

这适用于我的带有 docker (18.09.2) 的机器。

但是,它不适用于 Jenkins,我设置如下:

  • EKS 配备了 Terraform 模块

    module "eks" {
      source   = "terraform-aws-modules/eks/aws"
      version  = "5.0.0"
      # ....
    }
    
  • Jenkins通过这个Helm Chart部署在 EKS( v1.12.10-eks-ffbd9, ) 上。docker://18.6.1

  • helm release 中定义的 Jenkins 插件:

    • Kubernetes:1.18.1
    • 工作流作业:2.33
    • 工作流聚合器:2.6
    • 凭据绑定:1.19
    • 混帐:3.11.0
    • 蓝海:1.19.0
    • bitbucket-oauth:0.9
  • Jenkins Pipeline 是声明式的,它使用容器镜像所在的 Pod 模板,docker:18-dind容器名称为dind.

  • 这是我的詹金斯文件

    pipeline {
      agent {
        kubernetes {
          defaultContainer 'jnlp'
          yamlFile 'jenkins-pod.yaml'
        }
      }
      stages {
        stage('Build Backends') {
          steps {
            container('dind') {
              sh 'chmod +x *sh'
              sh './build.sh -t=dev'
            }
            containerLog 'dind'
          }
        }
      }
    

    }

当 Jenkins 执行这个管道时,它会显示这个错误:

buildkit not supported by daemon

我不确定我应该升级哪些软件才能使 docker-buildkit 工作?和哪个版本?

  • 现在是 5.0.0 的 Terraform eks 模块?

或者

  • docker:18-dind 图像,其行为类似于临时 Jenkins 奴隶的环境?

或者

  • 詹金斯插件kubernetes:1.18.1
4

2 回答 2

4

根据docker-ce启动buildkit会话的来源,成功检查有两个要求isSessionSupported

  • dockerCli.ServerInfo().HasExperimental
  • versions.GreaterThanOrEqualTo(dockerCli.Client().ClientVersion(), "1.31"

所以:

  • 检查docker-cli库的版本
  • 并且HasExperimental选项已启用。

要检查它是否具有实验支持,您可以从 shell 运行:

docker version -f '{{.Server.Experimental}}'

于 2019-09-09T07:18:48.330 回答
2

Docker buildkit 支持在 18.09 中是实验性的,因此您可能需要在 EKS 中升级 docker:

EKS (v1.12.10-eks-ffbd9, docker://18.6.1

或者也许你有一个旧的 dind 图像(18-dind应该足够新,但这个标签的旧版本指向 18.06 或 18.03 不会)。如果构建实际上是在 dind 内部进行的,您可以尝试哪个都可以18.09-dind工作。19-dind

于 2019-09-09T09:59:08.070 回答