7 min read

Gitlab Explained

Gitlab Explained

Gitlab is one my favorite tools and I didn't realize why until I started using other competitors.

If you are a software engineer then you probably worked with

  • Github
  • Gitlab
  • Bitbucket

All three of these products can be consider Source Code Repository. Meaning this is where developers are saving their code.

Even though Github is the most popular. Gitlab would be my pick if I was starting from scratch.

The One DevOps Platform | GitLab
From planning to production, bring teams together in one application. Ship secure code faster, deploy to any cloud, and drive business results.
GitLab is the most popular open source software for managing your DevOps workflows and getting visibility of all your projects.

The Sales Pitch

Most engineers join an organization and use whatever DevOps suite is available.

For example, my current role we use a mix of (Github + Argo + Jenkins + Jira + Monday + Jfrog) to handle our DevOps cycle.

Let's assume you need to create the foundation for your organization, starting from scratch.

A sales rep is going to tell you to buy Atlassian's (Bitbucket + Jira + Confluence) with everything else because it all works together.

Personally, I am not a fan of Atlassian 🤢🤮 I just found it's never used to its full capabilities and turns into "bloatware".

Let's take a deep dive into everything you can do with GitLab from setting up new projects, monitoring them in real time, collaborating on code with your team members - even deploying straight from the platform itself.

Rewind: What is DevOps?

Understanding GitLab means understanding DevOps. For some reason the internet has made DevOps a confusing term.

DevOps == Developers + Operations

Much of the tedious process of building software is actually what happens after you write working code. This is why developers hate being on call.

Testing that code to make sure it’s going to work for your users, and then actually getting it out there into the wild, and monitoring it to make sure it’s performing well is all part of the process.

When referring to DevOps there are three pieces we need to understand

  • Continuous Integration(CI) – testing your code frequently
  • Continuous Deployment(CD) – deploying your code frequently
  • Application Performance Monitoring – keeping an eye on your app’s performance

Imagine you’re an engineer building a new feature for your company. You get the code working on your laptop and acting as it’s supposed to.

Now what?

Merge Code

First, you need to merge that code into the rest of the codebase, including testing it heavily across a few dimensions to make sure it doesn’t break anything.

Push latest updates to users

You need to push that updated codebase to your application’s users. Hopefully they don't catch anything.

Finally, once it’s in the wild, you want to make sure it performs well and doesn’t break, for eternity.

This is basically what DevOps is, the operations of shipping software. And it’s really a cycle, since this process happens all the time:


Common "Gotcha"

When you hear the word “DevOps” – it could be referring to any number of permutations on the above idea. One thing people like to do in tech is make things more complicated.

DevOps can be interpreted as a philosophy, a series of tools, a process, you name it.

The Philosophy: One Stop for EVERYTHING

GitLab provide tools for every step of the DevOps process, from issue tracking to monitoring. Think of it like a one stop shop.

The norm – Most companies will use multiple tools to design, develop and deliver their products/services. A normal stack might look something like this:

  • Source Control - this is where your code lives, with features around branching and merging tools like GitHub, Bitbucket
  • Issue Tracking - a project manager favorite tools where we keep track of bugs and new features. Tools like Jira, Monday, Asana.
  • CI/CD - deploying your code or some call it release when ready. Too many tools to name but here are a few CircleCI, Jenkins, TravisCI, Harness, JFrog.
  • Monitoring  - App’s performance and scalability some examples are Grafana, New Relic.
That is 5+ tools to deliver a software solution

A Series of Tools [Gitlab's Approach]

Multiple tools can becoming annoying quickly.

Imagine being a new hire and having to ask for access to 5+ tools then figuring out where to go to do certain things.

New Tools Required Dedicated Resources

When I worked at an establish bank/insurance company each tool had a dedicated team.

Those teams jobs were responsible for making everything work for the entire organization.

I've also worked at small companies were it was one person maintaining the entire tool.

Integrating a tools requires changes to your application code, providing onboarding, documentation, training sessions, rollout plans, the list gets long real quick. That’s not considering setup costs are usually up front, they can be non-negligible.

GitLab’s take is that you should be doing all of this in one, single tool to consolidate your stack. If you look at their home page, they are trying to sell enterprises.

Philosophy: How I've seen it used

I've only worked at one organization that used Gitlab for everything. That was new startup growing rapidly.

Most organization are afraid of vendor lock in. It will be rare to find an org that does everything in Gitlab.

Depending on leadership they might swap GitLab for other tools because it matches their philosophy.

Issue tracking

You can use GitLab to project manage software engineering, like you’d use Jira, but I haven't seen someone make it their primary Issue Tracker.

Usually the winner here is Jira/Monday/Asana/Trello
https://cdn.substack.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0765ec0-2e7e-47b3-9273-06e5f98c4b64_715x513.png

Like other tools, GitLab also gives you analytics on top of your issues.

  • How fast things are getting built
  • Who is contributing the most
  • Team velocity/cycle time

Source / version control

Gitlab is my go to for source/version control tool. You can use GitLab to manage your code repositories and handle merging in changes from your team, like you’d use GitHub.

The actual application code is hosted on a GitLab server, and developers pull local copies to their laptops to develop new features or fix bugs.Gitlab offers better organizational tools to help structure an entire company into the tool where GitHub still falls short.

Personally find it easier to do code reviews, leave feedback and review ci/cd pipeline all in Gitlab is something I love as a developer.

Once they’re ready to merge that new code in, you use what GitLab calls their Merge Request feature, loosely comparable to a GitHub pull request. If you are new to developer MRs and PRs are the same thing but from different companies.

Winner - Gitlab for larger organizations
https://cdn.substack.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F191244fb-6d77-4c9b-b151-41a8e8463a23_950x692.png

Package / container registry

GitLab provides a utility for packaging and storing any dependencies that your application relies on. In my experience companies lean towards JFrog or Nexus as a registry.

Most teams use a package manager like npm, but for more mission critical applications with larger packages, teams will use something like GitLab to store and host those packages.

Winner - Usually JFrog, Nexus, Cloud Options
https://cdn.substack.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6e67d7c8-d60c-4dbb-bed6-1ff7b2421f16_950x692.png

CI/CD

You can use GitLab to run your CI/CD pipelines. For CI, you might use GitLab to run unit tests that make sure your code operates as intended when you create a merge request.

Winner - Gitlab CI/CD is by the far the best tool and being close the code make it even better
https://cdn.substack.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b53df9e-adb6-4cab-a751-3cb9042c9df8_950x692.png

Monitoring

Once you’ve gotten your application out to your users, you can use GitLab to monitor its performance, like you might use New Relic.

Teams commonly look at metrics related to speed, i.e. how quickly APIs respond to requests, as well as reliability, i.e. how often requests return successful responses and if any errors are unusually frequent

https://cdn.substack.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6f9cdab3-b470-464a-b047-f9913dfccb76_950x692.png

🔴 Hold Up! I'm confused 🔴

I've had a few people reach out to asking about hosting Gitlab.

My response is, if you are small team or organization you are probably fine using the SaaS solution Gitlab offers where all your code lives on their servers and you just need a login.

Your code is still safe 😄

If you are holding on sensitive information things like PCI, PII, HIPPA, etc. then setting up Gitlab on your own dedicated server might be the better move.

Final Thoughts

Gitlab is one my favorite tools because it can do everything.

I like the UI that GitLab offers. Working with their CI/CD tools is easy and customizable if you need it.

I'll be honest I've only used it for source code repository and CI/CD, but want to use it as a registry for my next project.

If you are not worried about vendor lock in, GitLab can be your one tool for anything DevOps related.

Thanks for reading, make sure to follow on Twitter @KingCaleb3