How to build docker images in kubernetes using img

Monday, Sep 16, 2019| Tags: kubernetes, CICD, jenkins, docker, img, devops

Note: I will be using an Amazon EKS cluster on AWS and using Amazon ECR for storing images. There will be minor differences for handling other repositories.

In the earlier post we learnt on how to to build a docker image using kubernete plugin in Jenkins on Kuberenetes using kaniko. In this post we will look at how to build a docker image using Img. We will follow the same steps as the earlier post but will have a different pipeline script.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
pipeline {
  agent {
    kubernetes {
      //cloud 'kubernetes'
      yaml """
kind: Pod
metadata:
  name: img
spec:
  containers:
  - name: img
    image: jessfraz/img
    imagePullPolicy: Always
    command:
    - cat
    tty: true
    volumeMounts:
      - name: docker-config
        mountPath: /home/user/.docker
  volumes:
    - name: docker-config
      configMap:
        name: docker-config
"""
    }
  }
  stages {
    stage('Build with Img') {
      environment {
        PATH = "/home/user/bin:$PATH"
      }
      steps {
        git 'https://github.com/prabhatsharma/sample-microservice'
        container(name: 'img') {
            sh 'wget https://amazon-ecr-credential-helper-releases.s3.us-east-2.amazonaws.com/0.3.1/linux-amd64/docker-credential-ecr-login'
            sh 'chmod +x docker-credential-ecr-login'
            sh 'mkdir ~/bin'
            sh 'mv docker-credential-ecr-login ~/bin/docker-credential-ecr-login'
            sh '''
            img build . -t 12345694928.dkr.ecr.us-west-2.amazonaws.com/sample-microservice:latest -t 12345694928.dkr.ecr.us-west-2.amazonaws.com/sample-microservice:vImg$BUILD_NUMBER
            '''
            sh ' img push 12345694928.dkr.ecr.us-west-2.amazonaws.com/sample-microservice:latest'
            sh ' img push 12345694928.dkr.ecr.us-west-2.amazonaws.com/sample-microservice:vImg$BUILD_NUMBER'
        }
      }
    }
  }
}


Pay close attention from line 35 to 38 where we are downloading Amazon ECR credential helper and placing it in the container. We did not have to do this with kaniko, as its docker image comes bundled with ecr (and gcr) credential helpers.

You would want to use img as jenkins kubernetes plugin is compatible with latest version of img. The best part of img is that it does not require you to run the container using root.

Happy building images!!!



Comments