..

使用 kaniko 在 k8s 集群中构建镜像

在 k8s 集群中构建镜像并不是一个负责的问题,主要是要将构建好的镜像推送到 private docker register 会有点麻烦,因为权限认证的问题,在 docker pull 的时候,我们使用 imagePullSecrets 设置来解决这个问题。

谷歌开发一个 kaniko 工具,用于解决在 k8s 中构建镜像相关的问题,这个工具允许你给他配置 docker auth 信息,命令如下:

  1. 基于已有的 credentials 创建 k8s secret
kubectl create secret generic regcred \
    --from-file=.dockerconfigjson=$HOME/.docker/config.json \
    --type=kubernetes.io/dockerconfigjson
  1. 配置中使用这个 secret
pipeline {
  agent {
    kubernetes {
      //cloud 'kubernetes'
      yaml """
kind: Pod
metadata:
  name: kaniko
spec:
  containers:
  - name: kaniko
    image: gcr.io/kaniko-project/executor:debug-539ddefcae3fd6b411a95982a830d987f4214251
    imagePullPolicy: Always
    command:
    - /busybox/cat
    tty: true
    volumeMounts:
      - name: jenkins-docker-cfg
        mountPath: /root
  volumes:
  - name: jenkins-docker-cfg
    projected:
      sources:
      - secret:
          name: regcred
          items:
            - key: .dockerconfigjson
              path: .docker/config.json
"""
    }
  }
  stages {
    stage('Build with Kaniko') {
      environment {
        PATH = "/busybox:/kaniko:$PATH"
      }
      steps {
        git 'https://github.com/jenkinsci/docker-jnlp-slave.git'
        container(name: 'kaniko', shell: '/busybox/sh') {
            sh '''#!/busybox/sh
            /kaniko/executor -f `pwd`/Dockerfile -c `pwd` --insecure --skip-tls-verify --cache=true --destination=mydockerregistry:5000/myorg/myimage
            '''
        }
      }
    }
  }
}

参考链接: