0 votes
1 view
in Devops and Agile by (28.1k points)

This is our environment:

1. I have a Kubernetes cluster running on Amazon.

2. Jenkins CI/CD running on Amazon that connects to a private GitLab and builds our services as Docker images.

3. Amazon ECR that stores our Docker images.

My questions:

1. How can I auto deploy images from ECR to Kubernetes (as pods) once the Jenkins pipeline pushes newly built images to ECR?

2. Can I do that within the Jenkins pipeline? I've read lots of material but I couldn't find how should it be done.

There is also a 3rd party tool like Keel but it doesn't support Amazon ECR (Webhook problem with ECR).

Any help would be appreciated.

1 Answer

0 votes
by (48k points)

Deploying docker container from amazon Ecr to kubernetes using Jenkins it has a lot to go with 

Let’s go with an example 

Let’s say 

I have my Continuous Integration work-flow 

Build my code and install dependencies

Create a container with a unique tag ( commit-id ) > my-center:12

Push to ECR

Curl Rancher API for my-pod > set(image:my-center:12)

Kubernates updates the pod and pulls the container with tag 12 from ECR

Now let’s go with the script

 - composer install --no-interaction

      - docker build -t cms .

      - docker tag myrepo:latest 123456789.dkr.ecr.my-region.amazonaws.com/myrepo:$BITBUCKET_BUILD_NUMBER

      - aws ecr get-login --no-include-email --region my-region >> login.sh

      - sh login.sh

      - docker push 123456799.dkr.ecr.my-region.amazonaws.com/myrepo:$BITBUCKET_BUILD_NUMBER

      - sh .docker/workload-update.sh // my curl script calling rancher API

Here I have used the rancher API to update pods and its configuration
Now for the ECR credentials part for Kubernetes, you have to create a secret ( a Kubernetes only entity) which is created by using amazon ecr details.
This secret is used in your pod.yaml as image-pull-secret which will tell k8 to use the secret and pull image from ECR.
For that, I will show the script that helps you how to use it in pod.yaml
apiVersion: v1
kind: Pod                                            
metadata:
  name: my-app   
  labels:
    app: my-app                              
spec:                                                
  containers:
    - image: 123456789.dkr.ecr.my-region.amazonaws.com/my-repo
      name: -center                            
      ports:
        - containerPort: 8080    
  imagePullSecrets:
  - name: my-secret-name ( this will be same as the name of secret we created earlier)
Thus you can build the required your desired thing from the above example.
Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...