<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Batel Zohar</title>
    <description>The latest articles on DEV Community by Batel Zohar (@batelzohar).</description>
    <link>https://dev.to/batelzohar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F278696%2F240893b2-3129-4e2d-b7eb-6f5ae07124ff.jpg</url>
      <title>DEV Community: Batel Zohar</title>
      <link>https://dev.to/batelzohar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/batelzohar"/>
    <language>en</language>
    <item>
      <title>Get Unlimited Container Pulls from Docker Hub with JFrog Cloud
</title>
      <dc:creator>Batel Zohar</dc:creator>
      <pubDate>Tue, 26 Jan 2021 14:26:42 +0000</pubDate>
      <link>https://dev.to/batelzohar/get-unlimited-container-pulls-from-docker-hub-with-jfrog-cloud-3gcj</link>
      <guid>https://dev.to/batelzohar/get-unlimited-container-pulls-from-docker-hub-with-jfrog-cloud-3gcj</guid>
      <description>&lt;p&gt;My &lt;a href="https://dev.to/jfrog/docker-new-download-rate-limits-4jl7"&gt;previous blog&lt;/a&gt; described Docker’s new &lt;a href="https://docs.docker.com/docker-hub/download-rate-limit/"&gt;download rate limit policy&lt;/a&gt; that introduced new pull request limitations starting November 1st, 2020. These limitations restrict us to 100 pulls for anonymous users and 200 pulls for authorized users every 6 hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Today, I’m excited to share the latest news about the JFrog and Docker partnership that will provide us with an &lt;a href="https://youtu.be/gkVQxtnvkSE"&gt;unlimited number of pulls from Docker hub.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As you already know, millions of users all over the world are using &lt;a href="https://jfrog.com/knowledge-base/docker-hub-and-docker-registries-a-beginners-guide/"&gt;Docker and Docker Hub&lt;/a&gt; to manage their applications, as part of their development cycle. Thanks to an amazing partnership between JFrog and Docker, now we don’t need to beg for a budget anymore. These limitations will not apply to &lt;strong&gt;JFrog Cloud Platform users&lt;/strong&gt;, including free tier subscriptions.&lt;/p&gt;

&lt;p&gt;JFrog will support unlimited pulls from Docker hub out of the box without any additional configurations. JFrog customers will automatically be excluded from Docker hub’s image rate limit and enjoy endless access to &lt;a href="https://hub.docker.com/"&gt; Docker Hub.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we are using Artifactory we’ll continue to get high-performance, automatic updates with new features, and now most importantly the freedom and flexibility to test, try and not worry about the number of downloads. &lt;/p&gt;

&lt;p&gt;If you haven’t tried Artifactory yet and are looking for a solution to the Docker Hub limits sign up for our &lt;a href="https://jfrog.com/platform/free-trial/"&gt;free subscription&lt;/a&gt; - we’ve got you covered.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Time to make some order with GoCenter </title>
      <dc:creator>Batel Zohar</dc:creator>
      <pubDate>Wed, 16 Dec 2020 12:42:46 +0000</pubDate>
      <link>https://dev.to/jfrog/time-to-make-some-order-with-gocenter-5c31</link>
      <guid>https://dev.to/jfrog/time-to-make-some-order-with-gocenter-5c31</guid>
      <description>&lt;p&gt;Go is becoming one of the world’s fastest-growing software languages. To keep increasing my skill set as a developer I started learning  Go a few months ago. Here is a snapshot of my journey and some insights I learned along the way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dependency Management
&lt;/h3&gt;

&lt;p&gt;Learning a new language can be overwhelming so I decided to start with the basics - dependency management. So let’s start from the beginning the management of the dependencies, from version 1.11 Go &lt;a href="https://jfrog.com/blog/go-big-with-pseudo-versions-and-gocenter/"&gt;supports modules&lt;/a&gt;, this feature makes dependency version information explicit and easier to maintain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Go module
&lt;/h3&gt;

&lt;p&gt;A module is a collection of &lt;a href="https://golang.org/ref/spec#Packages"&gt;Go packages&lt;/a&gt; stored in a file with a go.mod file at its root. The go.mod file defines the module’s module path, which is also the import path used for the root directory, and its dependency requirements, which are the other modules needed for a successful build. Each dependency requirement is written as a module path and a specific &lt;a href="http://semver.org/"&gt;semantic version&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s start with a &lt;a href="https://github.com/jfrog/project-examples/tree/master/golang-example"&gt;simple example:&lt;/a&gt; &lt;a href="https://github.com/rsc/hello"&gt;hello world&lt;/a&gt;. In this  example the go.mod file will look like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module "rsc.io/hello"

require "rsc.io/quote" v1.5.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After completing a simple go run and go build we now have a hello world example which is basic,  but let’s try to make it a bit more complicated by adding yaml support. To do this we will use the following commands (I found  that version 2.2.7 is recommended) so let’s give it a go:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gopkg.in/yaml.v2 v2.2.7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I figured that I used a vulnerable package and I found &lt;a href="http://search.gocenter.io/"&gt;GoCenter&lt;/a&gt;that provided me an amazing way to better understand Go packages. &lt;a href="http://gocenter.io/"&gt;GoCenter&lt;/a&gt; has the following features:&lt;/p&gt;

&lt;h3&gt;
  
  
  Proxy my dependencies
&lt;/h3&gt;

&lt;p&gt;First we can use GoCenter as a &lt;a href="https://search.gocenter.io"&gt;GOPROXY&lt;/a&gt; and we will redirect all module download requests to GoCenter which can be faster than directly from the VCS.&lt;/p&gt;

&lt;p&gt;To change the GoProxy path just use the following commands:&lt;/p&gt;

&lt;p&gt;For mac and linux:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export GOPROXY=https://gocenter.io&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;For Windows:&lt;/p&gt;

&lt;p&gt;'''set GOPROXY=&lt;a href="https://gocenter.io''"&gt;https://gocenter.io''&lt;/a&gt;'&lt;/p&gt;

&lt;p&gt;For powershell: &lt;/p&gt;

&lt;p&gt;'''$env:GOPROXY=&lt;a href="https://gocenter.io''"&gt;https://gocenter.io''&lt;/a&gt;'&lt;/p&gt;

&lt;h3&gt;
  
  
  Protect your binaries
&lt;/h3&gt;

&lt;p&gt;I’ve tried to learn a bit more about the yaml packages and this is how it looks on GoCenter:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yTlrSTxa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r1okzv622wrcehyp4l6e.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yTlrSTxa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r1okzv622wrcehyp4l6e.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First I found out that my version is vulnerable and contains &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2019-11254"&gt;CVE-2019-11254&lt;/a&gt; like the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f_36BfHY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9infe9g63km7ezkiq4c3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f_36BfHY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9infe9g63km7ezkiq4c3.png" alt="CVE-2019-11254 of yaml.v2 go module"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also I noticed the feature that scans the dependencies in a go.mod file held by GoCenter and identifies every vulnerability. Under the dependencies tab we will get the detailed information about vulnerable components at every level of the dependency tree, once we will click on the orange triangle we will forward to the package and we can check the vulnerability page like the following example of &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yFnwk1m---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://search.gocenter.io/github.com/hashicorp/vault%3Fversion%3Dv0.11.0%26tab%3Ddependencies" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yFnwk1m---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://search.gocenter.io/github.com/hashicorp/vault%3Fversion%3Dv0.11.0%26tab%3Ddependencies" alt="hashicorp/vault:"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kOYOTz9E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dpbinjxo9i4m08fntbm5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kOYOTz9E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dpbinjxo9i4m08fntbm5.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn more about your packages
&lt;/h3&gt;

&lt;p&gt;So I clicked on the versions tab and saw that version 2.2.8 contains a fix and I upgraded to the latest version 2.4.0 now seems like they added some documentation and examples:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1Rd38ylp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hk5qc7trtc7j567h1oio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1Rd38ylp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hk5qc7trtc7j567h1oio.png" alt="As you can see the package yaml and an overview "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I love metrics. GoCenter’s metrics are colorful and provide a lot of information in a great visual way so  I can easily see that there are a lot of downloads of the packages and 37 Contributors:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s_gQxvYO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4zhj42z48euy6d5bdkmn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s_gQxvYO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4zhj42z48euy6d5bdkmn.png" alt="The number of open issues forks contributors and much more"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced mode private GOPROXY
&lt;/h3&gt;

&lt;p&gt;Another advantage for developers is the ability to improve our resolution tie by integrating our &lt;a href="https://www.jfrog.com/confluence/display/JFROG/JFrog+Artifactory"&gt;JFrog Artifactory server&lt;/a&gt; and create our &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Go+Registry"&gt;Go private repository.&lt;/a&gt; We want to create a private Go repository to make sure that we are pulling directly from a &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Virtual+Repositories"&gt;virtual repository&lt;/a&gt; that contains a remote repository that points to GoCenter and our local repository with our project. A benefit of this method is that we don’t need to manage Artifactory we can just use the &lt;a href="https://jfrog.com/platform/free-trial/"&gt;SaaS version&lt;/a&gt; which is free and limited. &lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;To sum it all up, as I learn to write in Go I will continue to use GoCenter as a proxy for my dependencies, vulnerability scanning of my binaries, version control of my packages, beautiful metrics to give me a great visualization of the data &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Docker new Download Rate Limits</title>
      <dc:creator>Batel Zohar</dc:creator>
      <pubDate>Fri, 23 Oct 2020 10:31:44 +0000</pubDate>
      <link>https://dev.to/jfrog/docker-new-download-rate-limits-4jl7</link>
      <guid>https://dev.to/jfrog/docker-new-download-rate-limits-4jl7</guid>
      <description>&lt;p&gt;The new &lt;a href="https://docs.docker.com/docker-hub/download-rate-limit/" rel="noopener noreferrer"&gt;Docker announcement&lt;/a&gt; could be a bit confusing, but in this blog post, I’ll try to summarize it and make it simpler to understand. On November 1st, Docker is planning to add a new &lt;a href="https://www.docker.com/pricing" rel="noopener noreferrer"&gt;subscription level&lt;/a&gt;, and here’s how this may affect us.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;There are two main issues Docker users will now be facing: new pull request limitations, and the image retention policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pull request limitations
&lt;/h2&gt;

&lt;p&gt;This new limitation means that we can create 100 pulls for anonymous users and 200 pulls for authorized users every 6 hours.&lt;/p&gt;

&lt;p&gt;To better understand why rate limits were introduced, &lt;a href="https://www.docker.com/blog/scaling-docker-to-serve-millions-more-developers-network-egress/" rel="noopener noreferrer"&gt;Docker found that most Docker users pulled images at a rate you would expect for normal workflows.&lt;/a&gt; However, there is an outsized impact from a small number of anonymous users. For example, roughly 30% of all downloads on Hub come from only 1% of our anonymous users.&lt;/p&gt;

&lt;p&gt;The challenge is when pulling an existing image. Even if you don’t download the layers, this pull request will still be counted. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmn9vluq2v204pia3nmyf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmn9vluq2v204pia3nmyf.png" alt="From Scaling Docker to Serve Millions More Developers: Network Egress"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From Scaling Docker to Serve Millions More Developers: Network Egress&lt;/p&gt;

&lt;h2&gt;
  
  
  Image retention policy
&lt;/h2&gt;

&lt;p&gt;Images stored in free Docker Hub repositories that have not had their manifest pushed or pulled in the last 6 months, will be removed &lt;a href="https://www.docker.com/blog/docker-hub-image-retention-policy-delayed-and-subscription-updates/" rel="noopener noreferrer"&gt;at the mid of 2021.&lt;/a&gt; This policy does not apply to images stored by paid Docker Hub subscription accounts, Docker verified publishers or &lt;a href="https://docs.docker.com/docker-hub/official_images/" rel="noopener noreferrer"&gt;official Docker Images.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's take the following example of a free subscription user who pushed a tagged image called  "&lt;strong&gt;batelt/froggy:v1&lt;/strong&gt;" to Docker Hub on Oct 21, 2019. If this tagged image was never pulled since it was pushed, it will be considered inactive by mid 2021 when the new policy takes effect. The image and any tag pointing to it will be subject to deletion.&lt;/p&gt;

&lt;p&gt;According to their wiki, Docker will also be providing tooling, in the form of a UI and APIs, that will allow users to easily manage their images.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;My favorite solution is to use &lt;a href="https://www.jfrog.com/confluence/display/jfrog/Installing+Artifactory" rel="noopener noreferrer"&gt;JFrog Artifactory&lt;/a&gt; which is an artifact repository manager. This will allow us to store and protect our Docker images within a &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Docker+Registry" rel="noopener noreferrer"&gt;private Docker registry,&lt;/a&gt; keeping them in our cache using a &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Repository+Management#RepositoryManagement-RemoteRepositories" rel="noopener noreferrer"&gt;remote repository,&lt;/a&gt;, reducing our requests to Docker hub and using our local images kept in cache as shown in the following diagram.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqaqhjxnb80mew7k23d60.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqaqhjxnb80mew7k23d60.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why should we use Artifactory and how it works
&lt;/h2&gt;

&lt;p&gt;JFrog provides us with the ability to host our own secure private Docker registries and proxy external Docker registries. It even provides us with a smart &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Checksum-Based+Storage" rel="noopener noreferrer"&gt;checksum-based storage.&lt;br&gt;
&lt;/a&gt; storage, which utilizes storage to maximum potential.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose Artifactory version (&lt;a href="https://jfrog.com/platform/free-trial/" rel="noopener noreferrer"&gt;Cloud&lt;/a&gt; or &lt;a href="https://jfrog.com/platform/free-trial/#hosted" rel="noopener noreferrer"&gt;On-prem&lt;/a&gt;) &lt;/li&gt;
&lt;li&gt;Create Docker repositories (&lt;a href="https://www.jfrog.com/confluence/display/JFROG/Docker+Registry#DockerRegistry-LocalDockerRepositories" rel="noopener noreferrer"&gt;local&lt;/a&gt; &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Docker+Registry#DockerRegistry-RemoteDockerRepositories" rel="noopener noreferrer"&gt;remote&lt;/a&gt; and &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Docker+Registry#DockerRegistry-VirtualDockerRepositories" rel="noopener noreferrer"&gt;virtual&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Configure repository advanced configuration&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Artifactory version
&lt;/h2&gt;

&lt;p&gt;If you don’t want to manage Artifactory you can just use the SaaS version which is free and limited. Or you can use the JFrog container registry that supports Docker and Helm repositories&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a Docker repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnlicv834hnjqq7bzucyv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnlicv834hnjqq7bzucyv.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure repository advanced configuration
&lt;/h2&gt;

&lt;p&gt;Now we can easily &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Advanced+Settings" rel="noopener noreferrer"&gt;Configure repository advanced&lt;/a&gt; options like deciding how long before Artifactory checks for a newer version of a requested artifact in a remote repository and use our local caching so we will save our docker requests:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9807zntc4qshzbtye3g5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9807zntc4qshzbtye3g5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.jfrog.com/confluence/display/JFROG/JFrog+Artifactory" rel="noopener noreferrer"&gt;Learn more about Artifactory Pro&lt;/a&gt; that contains 27 different package types like Maven NPM and much more.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How to use Helm to Support Cloud-Native Development</title>
      <dc:creator>Batel Zohar</dc:creator>
      <pubDate>Mon, 21 Sep 2020 14:55:42 +0000</pubDate>
      <link>https://dev.to/jfrog/how-to-use-helm-to-support-cloud-native-development-h6g</link>
      <guid>https://dev.to/jfrog/how-to-use-helm-to-support-cloud-native-development-h6g</guid>
      <description>&lt;p&gt;One day my boss informed me that we are moving towards developing our software on the cloud. As a developer, this is one of my pet peeves as I hate spending time setting up complicated environments and prefer to focus on writing code and quickly releasing their software. And then I immediately got my first assignment to create a new software product using the CI/CD pipeline on the cloud. The questions that immediately arose were: When? How? And Why do we need it? &lt;/p&gt;

&lt;p&gt;Since then I have learned many lessons and would like to share them with you on how to prepare and configure your environment to achieve &lt;a href="https://jfrog.com/artifactory/cloud-automation/"&gt;DevOps automation in the cloud&lt;/a&gt; for your containerized secured applications using a CI/CD pipeline in Kubernetes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why go to the cloud?
&lt;/h3&gt;

&lt;p&gt;Let’s first look at the main reasons for going to the cloud:&lt;/p&gt;

&lt;h4&gt;
  
  
  Achieve unlimited scalability:
&lt;/h4&gt;

&lt;p&gt;Setting up your &lt;a href="https://jfrog.com/blog/accelerating-software-delivery-in-the-cloud/"&gt;environment on the cloud&lt;/a&gt; provides unlimited scalability allowing you to grow according to your needs and is easily achieved by using cloud storage providers (Amazon S3, Google GCS or Microsoft Azure) in your environment.&lt;/p&gt;

&lt;h4&gt;
  
  
  Hardware costs are no longer an issue:
&lt;/h4&gt;

&lt;p&gt;A huge advantage of going to cloud computing is the decrease in hardware costs whereby you pay only for exactly what you use. Instead of purchasing in-house equipment, hardware needs are now left to the cloud vendor. Adding new hardware every release or every quarter to meet your increasing needs can be very expensive and inconvenient, on the other hand, cloud computing alleviates these issues because resources can be acquired quickly and easily. &lt;/p&gt;

&lt;h4&gt;
  
  
  Gain redundancy:
&lt;/h4&gt;

&lt;p&gt;And the most important thing you gain is redundancy. A number of cloud storage providers can ensure your data is stored on multiple machines and complies with any regulations that need to be applied (like keeping two copies of all the data in two different regions).&lt;/p&gt;

&lt;p&gt;This blog post shows you how to prepare and configure a cloud-based environment to achieve an automated CI/CD pipeline for your containerized secured applications using Kubernetes.&lt;/p&gt;

&lt;p&gt;So let’s get started.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring a cloud-based automated CI/CD pipeline
&lt;/h3&gt;

&lt;p&gt;Before you start, prepare the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A version control system (such as Git)&lt;/li&gt;
&lt;li&gt;Kubernetes to deploy and manage your containerized applications&lt;/li&gt;
&lt;li&gt;A CI/CD pipeline tool like Jenkins, TeamCity, Bamboo etc.&lt;/li&gt;
&lt;li&gt;A Binary repository manager&lt;/li&gt;
&lt;li&gt;A Compliance auditor&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 1: Setting up your cloud environment
&lt;/h3&gt;

&lt;p&gt;Let's start by creating a Kubernetes cluster. You can easily choose one of the available &lt;a href="https://dzone.com/articles/5-hosted-kubernetes-platforms"&gt;Kubernetes platforms&lt;/a&gt; in the cloud. Then isolate your environment by creating separate environments for development, staging, and production as displayed in the following diagram: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_0fsiASP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j3f7uutmhp17090ga3dg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_0fsiASP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j3f7uutmhp17090ga3dg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We recommend applying the &lt;a href="https://dzone.com/articles/the-shift-left-principle-and-devops-1"&gt;"shift left”&lt;/a&gt;  principle, whereby you move back tasks typically performed at later stages to earlier stages in the pipeline. For example, when running security testing or selecting the &lt;a href="https://www.gnu.org/philosophy/free-sw.html"&gt;FOSS license.&lt;/a&gt; As mentioned earlier, the aim is to move faster to reduce delivery time while improving the quality of each release. At the same time, you are also faced with increasing pressure to reduce testing, so it means that the developer’s team needs to be integrated with the testing cycle earlier. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Configuring the VCS server
&lt;/h3&gt;

&lt;p&gt;When you finish developing the app, proceed to configure the &lt;a href="https://www.tutorialspoint.com/jenkins/jenkins_git_setup.htm"&gt;VCS server&lt;/a&gt;  VCS server in order to trigger the build after a successful pull request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Running the build
&lt;/h3&gt;

&lt;p&gt;Run the build on your CI server (for example Jenkins), to create the application’s Docker image and proceed to run the unit test against the Docker container.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Testing the build
&lt;/h3&gt;

&lt;p&gt;After the builds tested, create a Docker image that will be uploaded to your private &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Docker+Registry"&gt;Docker registry&lt;/a&gt; and private &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Helm+Chart+Repositories"&gt;helm repository,&lt;/a&gt; then run a number of tests against the running Docker container including integration tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Scanning the build
&lt;/h3&gt;

&lt;p&gt;Approximately three decades ago, Richard Stallman changed the developer’s world forever, by introducing the &lt;a href="https://www.gnu.org/gnu/thegnuproject.en.html"&gt;GNU Project,&lt;/a&gt; the first open-source coding project that included requirements for scanning external code. In that case, I recommend using the &lt;a href="https://chartcenter.io"&gt;ChartCenter&lt;/a&gt; as our new source for our helm chart, when checking the chart view, in that case let’s talk about &lt;a href="https://chartcenter.io/bitnami/redis"&gt;our DB&lt;/a&gt; we can easily get the chart information for the dependencies like the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UNm-1lyP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4p3qx3i60gmhmmms306x.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UNm-1lyP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4p3qx3i60gmhmmms306x.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Afterward, I can check the security report very easily and calculate the risk on this specific version&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YZD3Dy0W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l1v246o0miawzp62p8w3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YZD3Dy0W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l1v246o0miawzp62p8w3.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 6: Deploying to development
&lt;/h3&gt;

&lt;p&gt;Now we can proceed to deploy your app to the staging environment and perform additional tests against this cluster.&lt;/p&gt;

&lt;p&gt;Add the Chartcenter Helm repository&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm repo add center https://repo.chartcenter.io
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 7: Deploying to staging
&lt;/h3&gt;

&lt;p&gt;After running a full test cycle in the development environment, deploy the application to the isolated Kubernetes staging cluster, run the staging tests, and proceed to the next step.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 8: Deploying to production
&lt;/h3&gt;

&lt;p&gt;Run a set of sanity tests and deploy them to the isolated production cluster. Be ready to perform a fast rollback, if necessary.  &lt;/p&gt;

&lt;h3&gt;
  
  
  It’s time to have some fun!
&lt;/h3&gt;

&lt;p&gt;So you see it ain’t that scary and the steps are out there, so go ahead and develop your next app in the cloud. To make it even easier, follow our &lt;a href="https://github.com/eldada/jenkins-pipeline-kubernetes"&gt;6-step CI/CD pipeline for a simple static website application based on of official nginx Docker image.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>googlecloud</category>
      <category>azure</category>
      <category>aws</category>
    </item>
    <item>
      <title>Securing your software releases with the JFrog Platform</title>
      <dc:creator>Batel Zohar</dc:creator>
      <pubDate>Fri, 01 May 2020 07:23:36 +0000</pubDate>
      <link>https://dev.to/batelzohar/securing-your-software-releases-with-the-jfrog-platform-57n6</link>
      <guid>https://dev.to/batelzohar/securing-your-software-releases-with-the-jfrog-platform-57n6</guid>
      <description>&lt;p&gt;Continuing from my previous blog post about &lt;a href="https://dev.to/batelzohar/distributing-software-with-the-jfrog-platform-5e6k"&gt;distributing software releases,&lt;/a&gt; there is an additional (just as important) security consideration that you need to take into account.&lt;/p&gt;

&lt;p&gt;As you may already know, the Xray service represents our &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Xray+Security+and+Compliance"&gt;security and compliance&lt;/a&gt; service which easily integrates with Artifactory and our CI/CD service for license &amp;amp; security compliance. &lt;/p&gt;

&lt;p&gt;Let’s start with licenses. One of the most important responsibilities of an open-source program is to ensure that your organization meets its legal obligations when integrating open source code with proprietary and third-party source code in your products. But we also want to make sure that we don’t have any security vulnerabilities in our code, so we can also create security policies like in the following screenshot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mYc47rGg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://s6.gifyu.com/images/usX22M39ZK.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mYc47rGg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://s6.gifyu.com/images/usX22M39ZK.gif" alt="policy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s explain a bit more about security and license policies. Security policies have two rules for scanning:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimal severity&lt;/strong&gt; - Which is defined on the JFrog vulnerabilities database, in case that an artifact or build contains a vulnerability with the selected severity or higher. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CVSS score&lt;/strong&gt; - The CVSS score ranges between 1 to 10 to apply to the policy. &lt;/p&gt;

&lt;p&gt;Now on license policy, it will define a bit different by the following rules:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Allowed Licenses&lt;/strong&gt; - To create a whitelist of OSS licenses that may be attached to a component. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Banned Licenses&lt;/strong&gt; - Create a blacklist of OSS licenses that may not be attached to a component. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optional Disallow Unknown License&lt;/strong&gt; - Specifies the wanted behavior for components whose license cannot be determined. When enabling this feature a violation will be triggered if a component with an unknown license is found.&lt;/p&gt;

&lt;p&gt;Now after we created a policy let’s add our release bundle to the indexed resources like the following screenshot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JdrtEzX7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://s6.gifyu.com/images/PGfifAwzWR.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JdrtEzX7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://s6.gifyu.com/images/PGfifAwzWR.gif" alt="indexed resources"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it we are good to go. We can add our release bundle as part of the &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Creating+Xray+Policies+and+Rules"&gt;policy&lt;/a&gt; and keep our binaries :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Distributing software with the JFrog Platform</title>
      <dc:creator>Batel Zohar</dc:creator>
      <pubDate>Mon, 09 Mar 2020 20:27:05 +0000</pubDate>
      <link>https://dev.to/batelzohar/distributing-software-with-the-jfrog-platform-5e6k</link>
      <guid>https://dev.to/batelzohar/distributing-software-with-the-jfrog-platform-5e6k</guid>
      <description>&lt;p&gt;Hey! In case you haven’t heard yet, JFrog just released the JFrog Platform. If your world is all about DevOps, this platform gives you an end-to-end solution that combines all JFrog products in one simple place. So, the platform includes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.jfrog.com/confluence/display/JFROG/Package+Management"&gt;Universal package management&lt;/a&gt; with all major packaging formats, build tools, and CI servers.&lt;br&gt;
&lt;a href="https://www.jfrog.com/confluence/display/JFROG/Xray+Security+and+Compliance"&gt;Security and Compliance&lt;/a&gt; that's fully integrated into the JFrog Platform, providing full trust of your pipeline from code to production.&lt;br&gt;
&lt;a href="https://www.jfrog.com/confluence/display/JFROG/Administration+Module"&gt;Radically simplified administration&lt;/a&gt;with all configurations in one place.&lt;br&gt;
&lt;a href="https://www.jfrog.com/confluence/display/JFROG/Pipelines+Developer+Guide"&gt;Complete trust in your pipeline&lt;/a&gt;&lt;br&gt;
all the way from code to production.&lt;br&gt;
&lt;a href="https://www.jfrog.com/confluence/display/JFROG/Application+Module"&gt;Seamless DevOps experience&lt;/a&gt; for on-prem, cloud, hybrid or multi-cloud of your choice. &lt;/p&gt;

&lt;p&gt;Let’s take a closer look at how we can safely distribute our software using JFrog Distribution. &lt;/p&gt;

&lt;p&gt;JFrog Distribution is a service that lets you provision software releases using immutable &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Distributing+Release+Bundles"&gt;release bundles&lt;/a&gt;to many target destinations (&lt;a href="https://www.jfrog.com/confluence/display/JFROG/JFrog+Artifactory+Edge"&gt;edge nodes&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distribution in 3 Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.Create a release bundle using &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Distribution+REST+API#DistributionRESTAPI-RELEASEBUNDLES"&gt;REST API&lt;/a&gt;or the &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Distributing+Release+Bundles#DistributingReleaseBundles-AddingaQuery"&gt;Query Builder&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--biSwWkEc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://s5.gifyu.com/images/EEvuGvVICk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--biSwWkEc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://s5.gifyu.com/images/EEvuGvVICk.gif" alt="Create a release bundle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Secure your release bundle by signing it using a GPG key, ensuring that its contents cannot be edited. This will also ensure consistency of distribution among target instances.&lt;br&gt;
Note: The same GPG key is used by the Artifactory Edge to validate the Release Bundle before it is accepted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1SBPxu7c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://s5.gifyu.com/images/iKrSpXdR7q.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1SBPxu7c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://s5.gifyu.com/images/iKrSpXdR7q.gif" alt="Secure your release bundle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Distribute your release bundle. Distribution is responsible for triggering the replication process that happens from the source Artifactory to the edge nodes. First, it replicates the Release Bundle info to each edge node and then initiates the replication process in the source Artifactory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e2Ds8Ory--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://s5.gifyu.com/images/CY4MEH0OPk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e2Ds8Ory--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://s5.gifyu.com/images/CY4MEH0OPk.gif" alt="Distribute your release bundle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out more information on our &lt;a href="https://jfrog.com/distribution/"&gt;website&lt;/a&gt; and &lt;a href="https://www.jfrog.com/confluence/display/JFROG/JFrog+Distribution"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>CircleCI integration with container registries</title>
      <dc:creator>Batel Zohar</dc:creator>
      <pubDate>Wed, 11 Dec 2019 12:41:38 +0000</pubDate>
      <link>https://dev.to/jfrog/circleci-integration-with-container-registries-218p</link>
      <guid>https://dev.to/jfrog/circleci-integration-with-container-registries-218p</guid>
      <description>&lt;p&gt;&lt;a href="https://circleci.com/"&gt;CircleCI&lt;/a&gt;  is a cloud-based continuous integration and delivery platform, It’s free for open-source repositories and supports most languages. From version 2.1, CircleCI supports &lt;a href="https://circleci.com/docs/2.0/orb-intro/"&gt;orbs&lt;/a&gt;, that are shareable packages of configuration elements, including jobs, commands, and executors. Therefore we don’t need to reinvent the wheel as we can easily use the &lt;a href="https://circleci.com/orbs/registry/orb/jfrog/artifactory-orb"&gt;artifactory-orb&lt;/a&gt; which contains the &lt;a href="https://www.jfrog.com/confluence/display/CLI/JFrog+CLI"&gt;JFrog CLI&lt;/a&gt; to store our build artifacts for future distribution in our Docker Container Registry. In this blog, I will show you how to use CircleCI by using a private JFrog Container Registry to store your builds, artifacts, and build information.&lt;/p&gt;

&lt;p&gt;Let’s take a closer look at how this actually works. The following example describes how to easily configure CircleCI to push Docker builds as artifacts to JFrog container registry using orbs.&lt;br&gt;
Step 1: Clone the sample repository&lt;br&gt;
Create a repository in GitHub and clone this &lt;a href="https://github.com/BatelT/circleci-docker-example"&gt;sample GitHub project&lt;/a&gt; into your git repository.&lt;br&gt;
Step 2: Create the CircleCI configuration files&lt;br&gt;
In this example, we use the artifactory-orbs to download the JFrog CLI to perform thee following under the hood:&lt;/p&gt;


&lt;div class="runkit-element"&gt;
  &lt;code&gt;
    
  &lt;/code&gt;
  &lt;code&gt;
    Description: Install the JFrog CLI
Steps:


run:
  command: |
    echo "Checking for existence of CLI"
    set +e
    jfrog -v
    if [ $? -gt 0 ]; then
      echo "Not found, installing latest"
      curl -fL https://getcli.jfrog.io | sh
      chmod a+x jfrog &amp;amp;&amp;amp; sudo mv jfrog /usr/local/bin
    else
      echo "CLI exists, skipping install"
    fi
  name: Install JFrog CLI



  &lt;/code&gt;
&lt;/div&gt;


&lt;p&gt;This is the full config file.:&lt;/p&gt;


&lt;div class="runkit-element"&gt;
  &lt;code&gt;
    
  &lt;/code&gt;
  &lt;code&gt;
    
orbs:
  artifactory: circleci/artifactory@1.0.0
version: 2.1
workflows:
  simple-docker-example:
    jobs:
      - artifactory/docker-publish:
          docker-registry: batelt-docker.jfrog.io
          docker-tag: 'batelt-docker.jfrog.io/hello-world:1.0-${CIRCLE_BUILD_NUM}'
          name: Docker Publish Simple
          repository: docker-local

  &lt;/code&gt;
&lt;/div&gt;


&lt;p&gt;Here also in the background, we are using the &lt;a href="https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory#CLIforJFrogArtifactory-BuildingDockerImages"&gt; Building Docker Images&lt;/a&gt;commands via the JFrog CLI.&lt;br&gt;
Step 3: Enable Pipelines&lt;br&gt;
To orbs, we have to enable Pipelines via the UI under  Project Settings -&amp;gt; Advanced Settings as follows.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EojCSWcM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/fMymzBt/Project-settings-Batel-T-circleci-docker-example-Circle-CI.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EojCSWcM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/fMymzBt/Project-settings-Batel-T-circleci-docker-example-Circle-CI.jpg" alt="Enable Pipelines"&gt;&lt;/a&gt;&lt;br&gt;
Step 4: Configure the environment variables&lt;br&gt;
Enable your project build in CircleCI by adding the following variables to your build settings:&lt;br&gt;
ARTIFACTORY_URL &lt;br&gt;
ARTIFACTORY_USERNAME&lt;br&gt;
ARTIFACTORY_API_KEY&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Paye3Egf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/L83Pf8Y/Project-settings-Batel-T-circleci-docker-example-Circle-CI.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Paye3Egf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/L83Pf8Y/Project-settings-Batel-T-circleci-docker-example-Circle-CI.jpg" alt="Configure the environment variables"&gt;&lt;/a&gt;&lt;br&gt;
Step 5: View your build in the JFrog Container Registry &lt;br&gt;
You can now view build in details in the JFrog Container Registry&lt;a&gt;Build Browser.&lt;/a&gt; Click any build to drill down and view all the build info that the JFrog Container Registry captures.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WYi18SaJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.ibb.co/nLyqdMR/TOdt-U3-A5-Wy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WYi18SaJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.ibb.co/nLyqdMR/TOdt-U3-A5-Wy.gif" alt="View your build"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great! That’s it. You have successfully completed integrating the JFrog Container Registry in CircelCI done.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
