<?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: Emmanuel Madubuike</title>
    <description>The latest articles on DEV Community by Emmanuel Madubuike (@nuel-uzoma).</description>
    <link>https://dev.to/nuel-uzoma</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%2F1084505%2Fb692829c-a318-4537-9c98-825d4a9b7a2a.jpeg</url>
      <title>DEV Community: Emmanuel Madubuike</title>
      <link>https://dev.to/nuel-uzoma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nuel-uzoma"/>
    <language>en</language>
    <item>
      <title>Automated CI/CD Pipeline for Web Applications Using Jenkins and GitHub</title>
      <dc:creator>Emmanuel Madubuike</dc:creator>
      <pubDate>Thu, 15 Jun 2023 15:14:38 +0000</pubDate>
      <link>https://dev.to/nuel-uzoma/automated-cicd-pipeline-for-web-applications-using-jenkins-and-github-3n3g</link>
      <guid>https://dev.to/nuel-uzoma/automated-cicd-pipeline-for-web-applications-using-jenkins-and-github-3n3g</guid>
      <description>&lt;p&gt;This is my portfolio project for the foundations year at ALX Africa and Holberton School.&lt;br&gt;
It is an Automated CI/CD Pipeline built with Jenkins integrating with GitHub using web-hooks and integrating with Docker.&lt;br&gt;
The main purpose of the project is to build an automated seamless pipeline for web applications using Continuous Integration or Continuous Delivery for web applications. Code changes and updates can be made for scalable applications using the pipeline without in any sort running the application down and also be tested and deployed using Docker.&lt;/p&gt;

&lt;h3&gt;
  
  
  Team Members, Roles and Timeline:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Members&lt;/strong&gt;: This is a sole project built by Emmanuel Madubuike.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Roles&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project Manager: This project was supervised by me.&lt;/li&gt;
&lt;li&gt;Developer: This project was developed also by me. &lt;/li&gt;
&lt;li&gt;Tester: All tests(Integration) was done by me.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Timeline&lt;/strong&gt;: This project was built on a 3 weeks time-frame.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project was built for Software Engineers and DevOps Engineers to provide Continuous Integration or Continuous Delivery of scalable applications to users. Personal focus for this project was configuring the Jenkins pipeline, integrating with GitHub with web-hooks and also deploying on a Docker server.&lt;br&gt;
I have always been a candid lover of DevOps so i thought it will be a great idea to work on a project relating to the field. I had earlier decided that I will work on a CI/CD Pipeline for my portfolio project but I had no prior idea as at then. So I made a through research on projects I can work on with a short time-frame on the related field and I came up with this. Throughout the timeline for this project, I came across some technologies I haven't used or heard before and it helped me deepen my understanding on them. I would have never guessed that 9 months later since my first day at ALX Africa that I will work on a sort of a project as this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6oVpIAbp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fhlk8llvnvj8649q10fm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6oVpIAbp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fhlk8llvnvj8649q10fm.jpg" alt="Architecture" width="512" height="397"&gt;&lt;/a&gt;&lt;br&gt;
Attached above is the architecture of the project. Code updates for the application will be pushed to GitHub which will automatically trigger a build process on Jenkins using web-hooks. Upon successful build process, the Jenkins server is configured to test and deploy to Docker either using the web interface or writing a Jenkinsfile for build, test and deploy operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technologies
&lt;/h3&gt;

&lt;p&gt;The technologies used for this project are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Jenkins&lt;/strong&gt;: This is used to create the CI/CD Pipeline for the project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: This is the version control for the source code. Written code and code changes are pushed to it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Docker&lt;/strong&gt;: Deployment of the application in containers for test and deployment purposes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flask&lt;/strong&gt;: This was used to write a sample web application with a few endpoints to test the pipeline.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS web servers (EC2)&lt;/strong&gt;: Jenkins server and Docker server were installed on it to provide public internet access.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;p&gt;Some of the key features in this project includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Webhooks&lt;/strong&gt;: Webhooks serves as a trigger between Jenkins and GitHub, keeps track of code changes in the version control and aids in seamless Continuous Delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UU53qwxX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i3iyqarjsy0pmap6n4js.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UU53qwxX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i3iyqarjsy0pmap6n4js.png" alt="Webhooks" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker Integration&lt;/strong&gt;: Direct integration of Docker from Jenkins to test and deploy applications through containerization. On the image below, it shows the configuration method in which Docker can be set for use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dzEar1RT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s8w6vj6mfuc9lmp0eww5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dzEar1RT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s8w6vj6mfuc9lmp0eww5.png" alt="Docker" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Jenkins Configuration&lt;/strong&gt;: Jenkins can be configured for certain tasks and certain builds depending on the job given. It is a nice feature as it enables to build, test and deploy on the pipeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VyuSRJFw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yzg2oxi2dtu26mj16o3z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VyuSRJFw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yzg2oxi2dtu26mj16o3z.png" alt="Jenkins" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical Challenges
&lt;/h3&gt;

&lt;p&gt;On course of the project, I faced two major technical challenges of which I will list below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Webhooks&lt;/strong&gt;: This was the first major challenge I faced. At the beginning of the project, I had initially installed Jenkins server on my local machine which means the Jenkins server will be running on localhost. As it worked on localhost, I tried to configure webhooks for Jenkins but it wasn't working. I made a research and discovered &lt;strong&gt;Ngrok&lt;/strong&gt;, which allows localhost to be seen on the public internet but Ngrok came with a difficulty, the timeout session. Figuring out this won't work efficiently, i made more extensive research and found the solution by making use of web servers for installation of Jenkins and Docker. After configuration and removal of firewall for the port, it started to work out well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Docker Integration&lt;/strong&gt;: This was also a major challenge i faced. I had initially installed Docker on my local machine so I could integrate it with my Jenkins server. On course of integrating, each deployment process I tried to run kept failing. I had to install it on my second web server and made it possible so I can ssh into the web server from my first web server. With the above method, it began to work perfectly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;As an engineer, so far on this project, I became more familiar with the above-mentioned technologies, of which I had no idea about. From integration to configuration of the pipeline. This project deepened my understanding of DevOps, CI/CD, Docker containers and Pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  About the Author
&lt;/h3&gt;

&lt;p&gt;Emmanuel Madubuike is a Software Engineer specializing with BackEnd and DevOps Engineering. Currently a student of ALX Africa and Holberton School. You can connect with me via the following handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;: &lt;a href="https://www.linkedin.com/in/madubuike-emmanuel"&gt;https://www.linkedin.com/in/madubuike-emmanuel&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub Project Repository&lt;/strong&gt;: &lt;a href="https://www.github.com/NuelUzoma/Portfolio-Project"&gt;https://www.github.com/NuelUzoma/Portfolio-Project&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Project Landing Page&lt;/strong&gt;: &lt;a href="https://emcool17.wixsite.com/portfolio"&gt;https://emcool17.wixsite.com/portfolio&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Jenkins server web interface&lt;/strong&gt;: &lt;a href="http://107.23.96.11:8080/job/Portfolio-Project"&gt;http://107.23.96.11:8080/job/Portfolio-Project&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>cicd</category>
      <category>jenkins</category>
      <category>github</category>
    </item>
    <item>
      <title>Continuous Delivery vs Continuous Deployment.</title>
      <dc:creator>Emmanuel Madubuike</dc:creator>
      <pubDate>Wed, 17 May 2023 17:39:38 +0000</pubDate>
      <link>https://dev.to/nuel-uzoma/continuous-delivery-vs-continuous-deployment-1jjk</link>
      <guid>https://dev.to/nuel-uzoma/continuous-delivery-vs-continuous-deployment-1jjk</guid>
      <description>&lt;p&gt;Continuous Delivery and Continuous Deployment represent two distinct phases in DevOps. Both steps are used in the deployment of software changes into production, but both aren't the same. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Delivery (CD)&lt;/strong&gt;&lt;br&gt;
This stage majorly concerns the written code and any new changes made to the code. Continuous Delivery can be defined as the deployment of software(code) changes into production environments. Code changes made comprised of&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;New features&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bug fixes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refactoring&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance enhancements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configuration Changes etc. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CD allows for the seamless, frequent, and rapid deployment of code changes into production environments without running them down. It is an essential stage for any deployment process. The CD provides a flexible &lt;strong&gt;manual&lt;/strong&gt; way of releasing the changes deployed for end users. To enhance the CD process, a set of appropriate tools are implemented, and they are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Version Control Systems: This is an essential part because it manages source code and enables team members to collaborate and make changes to the source code. An example is Git.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continuous Integration (CI) tools: A notable example, Jenkins, helps in validating the code changes made to the version control and automates the build and testing process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;QA Testing tools: Another notable framework here is Selenium, which helps developers execute unit tests, integration tests, and performance tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configuration Management tools: Configuration Management tool like Puppet helps in facilitating consistent and flexible deployments across various production environments.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The aforementioned tools serve as a limited selection of the various tools utilized in Continuous Delivery. To ensure a complete process of CD, the right combination of toolsets must be used depending on the technology stack and project requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Deployment (CDep)&lt;/strong&gt;&lt;br&gt;
Continuous Deployment also can be referred to as the automation of code changes released to production environments. But take note of the keyword here, &lt;strong&gt;AUTOMATION&lt;/strong&gt;.&lt;br&gt;
It can be referred to as a step further to CD because it deals with the automated deployments of the software changes into production after all the necessary criteria have been met and all tests have been passed. Manual approval is eliminated in this process because CDep deals solely with automation.&lt;br&gt;
The main aim of CDep is to minimize the time the end users can be able to access the deployed software changes and updates. By automating the release process, software updates, new features, and improvements can be rapidly delivered to the end users, providing a seamless, and rapid software delivery pipeline.&lt;/p&gt;

&lt;p&gt;The toolsets utilized in CDep are similar to CD but the emphasis of the tools may vary to accommodate the automation needs of CDep.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Containerization tools: Notable technologies, such as Docker and Kubernetes, to run applications and their dependencies in portable containers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Monitoring and Alerting tools: Monitoring tools such as Datadog, are essential for monitoring software applications and infrastructure. These tools provide real-time visibility into availability, performance, and various metrics, enabling rapid issue detection and swift response.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
The primary distinction between Continuous Delivery (CD) and Continuous Deployment (CDep) lies in how the release decisions are made. In CD, teams manually decide when to release the software changes whereas CDep automates the release process, once required tests are successfully passed, the changes are promptly deployed to the production environment.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cicd</category>
    </item>
  </channel>
</rss>
