<?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: Benjamin Godfrey</title>
    <description>The latest articles on DEV Community by Benjamin Godfrey (@sudobendg).</description>
    <link>https://dev.to/sudobendg</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%2F3743926%2F73146394-9596-4b6d-8072-9e81381ae2c9.jpeg</url>
      <title>DEV Community: Benjamin Godfrey</title>
      <link>https://dev.to/sudobendg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sudobendg"/>
    <language>en</language>
    <item>
      <title>Homemade CI/CD Pipeline - Part 1: Git</title>
      <dc:creator>Benjamin Godfrey</dc:creator>
      <pubDate>Thu, 12 Feb 2026 16:27:09 +0000</pubDate>
      <link>https://dev.to/sudobendg/homemade-cicd-pipeline-part-1-git-44ib</link>
      <guid>https://dev.to/sudobendg/homemade-cicd-pipeline-part-1-git-44ib</guid>
      <description>&lt;h1&gt;
  
  
  Week 1: Demystifying the Remote
&lt;/h1&gt;

&lt;p&gt;This past week marked the official start of my DIY CI/CD pipeline project. My first goal was to come up with a way to manage git repos.&lt;/p&gt;

&lt;p&gt;I wanted to host my code without relying on GitHub or GitLab. When I clone a repo at work, the address usually looks something like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone git@github.com:path/to.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Looking at that through the lens of a Linux terminal, it’s clearly just pointing to a path on a machine via SSH. I had a hunch that setting up my own remote server couldn't be as simple as just pointing to a folder on a spare machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It turns out, it really is that easy.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Aha!" Moment
&lt;/h3&gt;

&lt;p&gt;Realising that Git is essentially just a series of file transfers over SSH was a massive confidence boost. It’s easy to look at a project like "building a CI/CD pipeline" and feel overwhelmed by the scale, but this early win reminded me that I already understand the core technologies at play. I’m just putting them together in a new way.&lt;/p&gt;

&lt;p&gt;To manage this, I’ve put together a few Bash scripts to handle my Git settings and repository initialisation. &lt;/p&gt;

&lt;p&gt;You can find the current scripts in the &lt;code&gt;src/scripts&lt;/code&gt; directory of my project repo here: &lt;a href="https://github.com/sudo-bendg/CI-CD-BG#" rel="noopener noreferrer"&gt;CI-CD-BG on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Road Ahead: From SSH to HTTP?
&lt;/h3&gt;

&lt;p&gt;Now that the "Store" part of the pipeline is working, I’m venturing into the unknown. &lt;/p&gt;

&lt;p&gt;Currently, I have to manually SSH into the server to run my management scripts. For the next phase, I’m considering setting up a &lt;strong&gt;lightweight HTTP server.&lt;/strong&gt; The goal is to be able to trigger my build and test scripts via webhooks or simple HTTP requests rather than maintaining a manual SSH session.&lt;/p&gt;

&lt;p&gt;This moves the project from "running scripts on a box" to "building a service," and I’m excited (and slightly terrified) to see how it holds up.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>sideprojects</category>
      <category>learning</category>
      <category>bash</category>
    </item>
    <item>
      <title>Homemade CI/CD Pipeline - Part 1: Git</title>
      <dc:creator>Benjamin Godfrey</dc:creator>
      <pubDate>Thu, 12 Feb 2026 16:27:09 +0000</pubDate>
      <link>https://dev.to/sudobendg/homemade-cicd-pipeline-part-1-git-2on1</link>
      <guid>https://dev.to/sudobendg/homemade-cicd-pipeline-part-1-git-2on1</guid>
      <description>&lt;h1&gt;
  
  
  Week 1: Demystifying the Remote
&lt;/h1&gt;

&lt;p&gt;This past week marked the official start of my DIY CI/CD pipeline project. My first goal was to come up with a way to manage git repos.&lt;/p&gt;

&lt;p&gt;I wanted to host my code without relying on GitHub or GitLab. When I clone a repo at work, the address usually looks something like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone git@github.com:path/to.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Looking at that through the lens of a Linux terminal, it’s clearly just pointing to a path on a machine via SSH. I had a hunch that setting up my own remote server couldn't be as simple as just pointing to a folder on a spare machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It turns out, it really is that easy.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Aha!" Moment
&lt;/h3&gt;

&lt;p&gt;Realising that Git is essentially just a series of file transfers over SSH was a massive confidence boost. It’s easy to look at a project like "building a CI/CD pipeline" and feel overwhelmed by the scale, but this early win reminded me that I already understand the core technologies at play. I’m just putting them together in a new way.&lt;/p&gt;

&lt;p&gt;To manage this, I’ve put together a few Bash scripts to handle my Git settings and repository initialisation. &lt;/p&gt;

&lt;p&gt;You can find the current scripts in the &lt;code&gt;src/scripts&lt;/code&gt; directory of my project repo here: &lt;a href="https://github.com/sudo-bendg/CI-CD-BG#" rel="noopener noreferrer"&gt;CI-CD-BG on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Road Ahead: From SSH to HTTP?
&lt;/h3&gt;

&lt;p&gt;Now that the "Store" part of the pipeline is working, I’m venturing into the unknown. &lt;/p&gt;

&lt;p&gt;Currently, I have to manually SSH into the server to run my management scripts. For the next phase, I’m considering setting up a &lt;strong&gt;lightweight HTTP server.&lt;/strong&gt; The goal is to be able to trigger my build and test scripts via webhooks or simple HTTP requests rather than maintaining a manual SSH session.&lt;/p&gt;

&lt;p&gt;This moves the project from "running scripts on a box" to "building a service," and I’m excited (and slightly terrified) to see how it holds up.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>sideprojects</category>
      <category>learning</category>
      <category>bash</category>
    </item>
    <item>
      <title>Overengineering: A Series</title>
      <dc:creator>Benjamin Godfrey</dc:creator>
      <pubDate>Sat, 31 Jan 2026 20:55:32 +0000</pubDate>
      <link>https://dev.to/sudobendg/overengineering-a-series-2794</link>
      <guid>https://dev.to/sudobendg/overengineering-a-series-2794</guid>
      <description>&lt;p&gt;I want to make a CI/CD pipeline. Going in to this project I understand that whatever solution I could make would not be nearly as usable, reliable, or feature rich as existing options. Despite this, I want to give it a go.&lt;/p&gt;

&lt;p&gt;There are a few reasons for this. Firstly, from my (possibly incorrect) viewpoint as a junior dev, I think that what is most important for me is to understand the fundamentals and the tools that I use. I know how to go through the process of commiting, pushing, making a PR and merging, but given a blank terminal I would struggle to remake that process. Add to this the exposure to networking, scripting, and automated tests, and I think the picture becomes very clear.&lt;/p&gt;

&lt;p&gt;Secondly, I think that self hosting where possible is a good thing. Sure, my GitHub profile probably won't be deleted and take with it all of my previous projects, but you never know. If I can host my repos on some device that I own then I won't need to rely on any third party, and I won't need to send packets halfway around the world to access my own projects.&lt;/p&gt;

&lt;p&gt;Thirdly, I think it would make an interesting series of blog posts. My plan is to take on this project in weekly sprints, and to review progress at the end of each of these sprints. With this in mind, we could call this first post my sprint planning.&lt;/p&gt;

&lt;p&gt;The first step of any project: figure out what I actually want to achieve. When I say that I want a CI/CD pipeline, what do I mean? Well,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I need a place for my repos to live. GitHub and Gitlab exist, but as stated, I would prefer to keep this on my own network. Functionality here can be minimal, especially at the start. A directory on a machine somewhere on my LAN will do.&lt;/li&gt;
&lt;li&gt;I want some series of events to happen when I push to main.&lt;/li&gt;
&lt;li&gt;A build should be created. This will most likely be in a docker container, or at least it will be to start with.&lt;/li&gt;
&lt;li&gt;After a build is created, it should be tested. This should be everything from unit tests to end to end automated testing. Maybe even some SecOps stuff, just to spice it up.&lt;/li&gt;
&lt;li&gt;If anything fails (in the build or test stages), the whole pipeline should rollback. This probably means I need to keep builds somewhere in storage.&lt;/li&gt;
&lt;li&gt;If everything is ok, we are sorted. Deploy the build to some container.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even in writing this list I have found a few areas that will require research. I guess this is kind of the point. I will spend the next week filling in any gaps in knowledge that would block initial progress, and also trying to figure out how much time I can actually afford to put into this project.&lt;/p&gt;

&lt;p&gt;Thus far, no blockers.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>sideprojects</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
