<?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>Forem: Gita Cliff</title>
    <description>The latest articles on Forem by Gita Cliff (@gita_cliff).</description>
    <link>https://forem.com/gita_cliff</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%2F3756636%2F8e74c40a-d6cc-45c0-b229-5b8e026a800f.jpeg</url>
      <title>Forem: Gita Cliff</title>
      <link>https://forem.com/gita_cliff</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gita_cliff"/>
    <language>en</language>
    <item>
      <title>How to Store and Manage Build Artifacts Using Nexus Repository Manager</title>
      <dc:creator>Gita Cliff</dc:creator>
      <pubDate>Mon, 16 Feb 2026 17:52:34 +0000</pubDate>
      <link>https://forem.com/gita_cliff/how-to-store-and-manage-build-artifacts-using-nexus-repository-manager-388g</link>
      <guid>https://forem.com/gita_cliff/how-to-store-and-manage-build-artifacts-using-nexus-repository-manager-388g</guid>
      <description>&lt;p&gt;In modern software development, building an application is only part of the journey — managing and storing the build artifacts is just as important. As teams adopt CI/CD practices, they need a reliable way to store, version, and distribute packages such as JAR files, Docker images, or npm modules. This is where Nexus Repository Manager comes in. In this step-by-step guide, we will explore how to publish build artifacts to Nexus, understand why artifact repositories are critical in DevOps workflows, and see how they improve reliability, security, and efficiency in a CI/CD pipeline.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install a run Nexus on a cloud server&lt;/strong&gt;: In &lt;a href="https://docs.digitalocean.com/products/droplets/getting-started/recommended-droplet-setup/#:~:text=From%20the%20control%20panel%2C%20click,Network%2C%20choose%20the%20default%20VPC." rel="noopener noreferrer"&gt;this walk through guide&lt;/a&gt; we are going to create a droplet on digitalocean, create and upload your public SSH key, configure the droplet firewall 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3bf7dlx4ja6vfk6ktn7.png" alt=" " width="800" height="435"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After creating the cloud server we &lt;code&gt;ssh&lt;/code&gt; into the cloud server as a root user with ssh &lt;code&gt;root@&amp;lt;server public ip&amp;gt;&lt;/code&gt; which connects you securely&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Since we are going to use maven2 built artifacts, we install java 17 on the cloud server with &lt;code&gt;sudo apt update&lt;/code&gt; and s&lt;code&gt;udo apt install openjdk-17-jre-headless&lt;/code&gt;, then confirm java has been succesfully installed with java -version as seen below &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Download and Install Nexus&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Navigate to /opt: ensures you download and extract files in the right system directory for software  &lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd /opt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Download Nexus archive:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wget https://download.sonatype.com/nexus/3/nexus-unix-x86-64-3.79.0-09.tar.gz&lt;/code&gt; which Downloads the Nexus Repository Manager tarball from Sonatype's official URL to the current directory  &lt;/p&gt;

&lt;p&gt;List and extract:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ls -lh&lt;br&gt;
tar -xvzf nexus-unix-x86-64-3.79.0-09.tar.gz&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Create a nexus user with sudo privileges (if not already 
present) for security best practices with sudo adduser nexus &lt;/li&gt;
&lt;li&gt;Change ownership of Nexus directory with &lt;code&gt;chown -R nexus:nexus 
nexus-3.79.0-09/&lt;/code&gt; which ensures the Nexus app can access and 
modify its installation files when running as "nexus"

&lt;ul&gt;
&lt;li&gt;Change ownership of Nexus data directory with &lt;code&gt;chown -R 
nexus:nexus sonatype-work/&lt;/code&gt; which ensures the Nexus app can 
access and 
modify its installation files when running as "nexus" &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

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

&lt;p&gt;Create a hosted maven snapshots repository in the nexus UI, with the respective user having a role with the necessary privileges to publish artifacts to the repository&lt;/p&gt;

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

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

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

&lt;p&gt;Once this is done then we configure our maven project to publish build artifacts to the nexus hosted repo we created above with the right credentials;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add the &lt;code&gt;maven-deploy-plugin&lt;/code&gt; configuration the &lt;code&gt;pom.xml&lt;/code&gt; file of the java maven project &lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;p&gt;Configure Credentials in &lt;code&gt;settings.xml&lt;/code&gt; file with &lt;code&gt;vim ~/.m2/settings.xml&lt;/code&gt; to ensures Maven can authenticate to the Nexus repository during deploy phase and &lt;code&gt;&amp;lt;id&amp;gt;&lt;/code&gt; must match the one specified in the POM’s distributionManagement&lt;/p&gt;

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

&lt;p&gt;Now its time to build and deploy the jar file to our nexus repository by simple doing mvn package and then mvn deploy to publish the packaged jar file to nexus repository &lt;/p&gt;

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

&lt;p&gt;You can then check in the nexus UI under the Browser section &lt;/p&gt;

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

&lt;p&gt;Lastly we can make use of the nexus rest api to interact with repository and download artifacts from our remote server ie &lt;/p&gt;

&lt;p&gt;Execute &lt;code&gt;curl -u {user}:{password} -X GET 'http://{nexus-ip}:8081/service/rest/v1/components?repository={repo-name}&amp;amp;sort=version'&lt;/code&gt; on the DigitalOcean droplet.&lt;/p&gt;

&lt;p&gt;Execute wget followed by the result of the previous command , followed by &lt;code&gt;java -jar java-app-1.0.jar &amp;amp;&lt;/code&gt; to start the application the background &lt;/p&gt;

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

</description>
      <category>cicd</category>
      <category>devops</category>
      <category>tooling</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Deploy and run application on a cloud server</title>
      <dc:creator>Gita Cliff</dc:creator>
      <pubDate>Fri, 06 Feb 2026 13:03:47 +0000</pubDate>
      <link>https://forem.com/gita_cliff/deploy-and-run-application-on-a-cloud-server-9jc</link>
      <guid>https://forem.com/gita_cliff/deploy-and-run-application-on-a-cloud-server-9jc</guid>
      <description>&lt;ul&gt;
&lt;li&gt;So for this one am going to be using DigitalOcean cloud provider , create a droplet with the basic  storage capacity. &lt;/li&gt;
&lt;li&gt;Add you public ssh key to digitalOcean to authenticate yourself with the server when you connect to it for root user &lt;/li&gt;
&lt;li&gt;For the steps to create a server on digitalocean you read about them &lt;a href="https://github.com/gitcliff/Cloud-and-infrastructure-as-a-service-with-Digital-Ocean/blob/main/Server%20setup%20on%20DigitalOcean/1-Create%20a%20droplet/step1.txt" rel="noopener noreferrer"&gt;here&lt;/a&gt; and then Configure the firewall to open ssh port 22 (because by default the ssh service listens on port 22) for your ip to ensure ssh secure connection, why: We ideally don't want anyone an authorized to ssh into our server for security best practice &lt;/li&gt;
&lt;li&gt;After creating your droplet on digitalocean, head off to your local terminal and ensure you do have your public ssh key in your at &lt;code&gt;/home/youruser/.ssh/id_rsa.pub&lt;/code&gt; 
,if you don't have it there then you can create one with &lt;code&gt;ssh-keygen -t rsa&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Then ssh into the remote server as a root user for now ie &lt;code&gt;ssh root@&amp;lt;remote-server-ip&amp;gt;&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once in the linux terminal install java 17 ie &lt;code&gt;sudo apt update &amp;amp;&amp;amp;&lt;br&gt;
sudo apt install openjdk-17-jdk -y&lt;/code&gt;&lt;br&gt;
using the linux &lt;code&gt;apt&lt;/code&gt; package manager and then create a linux user ie with the &lt;code&gt;adduser&lt;/code&gt; command to avoid running java application as a root user for security best practices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can also grand that user privileges to perform administrative tasks with &lt;code&gt;usermod -aG sudo cliff&lt;/code&gt; and also create an &lt;code&gt;.ssh&lt;/code&gt;&lt;br&gt;
folder with the &lt;code&gt;authorized_keys&lt;/code&gt; file in the user's home directory of your linux user. Add in the users ssh public to authenticate them with the remote server &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we copy the built, compiled jar file from our build tool ie maven or gradle on our local machine with &lt;code&gt;scp build/libs/java-react-example.jar root@&amp;lt;remote-ip&amp;gt;:/root&lt;/code&gt; to the remote server on the cloud. &lt;br&gt;
Then switch to user we created using &lt;code&gt;su - cliff&lt;/code&gt; and run &lt;code&gt;java -jar java-react-example.jar&lt;/code&gt; , this starts the Java application contained in the jar file which will be listening at a particular port when you run &lt;code&gt;ps aux | grep java&lt;/code&gt; to inspect the process . This port needs to be opened in the firewall configuration rule to all sources &lt;/p&gt;

</description>
      <category>cloud</category>
      <category>devops</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
