Understand How to Test Build and Push Your Artifacts
Tags: aws, tutorial, node, cicd
Published: 2023-01-12 06:11:58

Docker made a revolution with containerization. It truly helped to bridge the gap between Dev and Ops teams. Similarly, the cloud providers introduced their own container registries to provide more security and governance. For example, Amazon has Elastic Container Registry (ECR), Microsoft has Azure Container Registry (ACR), and Google has a Google Container Registry (GCR). Container registries have become an integral part of any CI/CD pipeline to store images, metadata, and other important artifacts. In addition, they provide a secure way to store and share container images across a distributed system to help development teams build their software efficiently. In this article, we will explore the Amazon ECR container registry and see how to use it to push container images.

## Understanding container registries
As the name suggests, container registries are used to store some valuable data related to a pipeline. In particular, for storing and sharing container images securely and reliably in a central repository, which multiple users and systems can access. This makes managing and deploying container images easy across a distributed system. Container registries also provide the ability to store multiple versions of a single container image, which allows for version control and rollback if needed. In addition, container registries can store and share sensitive data, such as credentials and secrets, across the team.

## Overview of Amazon ECR
Amazon ECR is a fully managed service from Amazon Web Services (AWS). It is used to store and manage Docker images securely and reliably. In addition, Amazon ECR provides a simple web-based interface for creating, managing, and sharing Docker images and integrating them with other AWS services.

The following graphic shows how to push your container image to ECR from Harness CI:
![amazon ecr](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rzyv2m486y5gwfmqxl6e.png)

## Prerequisites
Before you can push your container image to ECR from Harness, there are a few prerequisites:

1. You must have an [AWS account](https://aws.amazon.com/resources/create-account/) and have created a repository in ECR.
2. You must have a Docker image of your application ready to push to ECR - We have a [sample application](https://github.com/pavanbelagatti/harness-ci-example) with a Dockerfile. You can clone it and use it in this tutorial.
3. You must have access to the AWS CLI or the AWS Management Console.
4. To use [Harness CI](https://app.harness.io/auth/#/signup/?module=ci&?utm_source=website&utm_medium=pavan-ecr-article&utm_campaign=ci-plg&utm_content=get-started), you must have an account on Harness (it is Free). Harness offers hosted virtual machines (VMs) to run your builds. With Harness Cloud, you can build your code worry-free on the infrastructure that Harness provides. You don't have to spend time and effort to maintain build infrastructure; you can focus on developing great software instead.

## Push your container image to ECR using Harness
We have a [sample application](https://github.com/pavanbelagatti/harness-ci-example) you can fork and use. This sample code repo has a Dockerfile with instructions to build our image. We need to create an ECR repository on AWS to push our image. Then, we will use the Harness CI module to test, build, and push the image to our ECR repo.

This tutorial assumes you have the ECR repo created on AWS.
Log in to your Harness CI module and create a project.
![Harness CI](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mecjqa9epeofifep2ciy.png)

Create your pipeline and add run step and ECR step to it. 
![configure run step](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ugyq005omwvgrurjnh4m.png)

Similarly, add the ECR step
![ECR step](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bsjyanjx73zjw2hv3on5.png)

Finally, your pipeline should look like this.
![ci pipeline new](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8moptprmh6a6qawry0rj.png)

Basically, we are testing the application with a simple ‘npm test’ command as configured in the ‘Run’ step and pushing the built image to Amazon ECR (configured in the last step).

Save and run the pipeline.
![console output result](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/821zhtj3zi6po9lv3chi.png)

In this tutorial, we explored Amazon ECR and saw how to use it to push our container images using Harness CI. Now that you have a better understanding of ECR and Harness CI, why not give it a try? Push your container images to ECR using Harness and speed up your build process.