You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在K8s环境的Jenkins流水线中使用Kaniko构建的镜像?

在Kubernetes Jenkins流水线中用Kaniko替代Docker完成构建-测试-推送流程

核心思路

Kaniko构建后生成镜像tar包,在Kubernetes环境下要避免DinD,需通过共享卷传递tar包,再用容器运行时工具(如ctr)将tar包导入本地存储,最后基于导入的镜像执行测试。

完整流水线示例

pipeline {
  agent {
    kubernetes {
      volumes {
        // 定义共享卷,存储Kaniko生成的镜像tar包
        emptyDirVolume(mountPath: '/kaniko-output', name: 'kaniko-output')
      }
    }
  }
  stages {
    stage('Build Image with Kaniko') {
      steps {
        container('kaniko') {
          script {
            sh '''
              /kaniko/executor \
                --tar-path=/kaniko-output/myimage.tar \
                --context . \
                --no-push \
                --destination myregistry:tag
            '''
          }
        }
      }
    }

    stage('Run Tests in Built Image') {
      steps {
        // 使用带containerd客户端工具的镜像
        container('containerd-cli') {
          script {
            sh '''
              // 导入tar包到本地containerd存储
              ctr images import /kaniko-output/myimage.tar
              // 启动容器执行测试,--rm确保测试后自动清理容器
              ctr run --rm myregistry:tag test-container pipenv run test
            '''
          }
        }
      }
    }

    stage('Push Image with Crane') {
      steps {
        container('crane') {
          script {
            sh '''
              crane push /kaniko-output/myimage.tar myregistry:tag
            '''
          }
        }
      }
    }
  }
}

关键细节说明

  • 共享卷配置:通过emptyDirVolume让Kaniko与后续测试、推送容器共享镜像tar包,避免跨容器文件传递的复杂操作
  • 测试容器选择:需使用包含ctr(containerd客户端)的镜像,可自行构建基础镜像安装containerd.io包,或直接使用官方containerd:latest镜像(注意调整命令路径)
  • 镜像导入与测试运行:
    • ctr images import将tar包导入本地镜像存储
    • ctr run --rm启动容器执行测试命令,测试完成后自动销毁容器
  • 镜像推送:crane push直接读取共享卷中的tar包推送到目标仓库,无需额外转换

替代方案(用skopeo)

若偏好skopeo工具,可将tar包导入临时OCI存储后运行测试:

stage('Run Tests with Skopeo') {
  steps {
    container('skopeo') {
      script {
        sh '''
          // 创建临时OCI存储目录
          mkdir -p /tmp/oci-store
          // 导入tar包到OCI存储
          skopeo copy docker-archive:/kaniko-output/myimage.tar oci:/tmp/oci-store/myimage
          // 用podman运行镜像执行测试
          podman run --rm oci:/tmp/oci-store/myimage pipenv run test
        '''
      }
    }
  }
}

内容的提问来源于stack exchange,提问作者Rapolas K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:05:47