Blog Engineering How DevOps and GitLab CI/CD enhance a frontend workflow
August 9, 2018
8 min read

How DevOps and GitLab CI/CD enhance a frontend workflow

The GitLab frontend team uses DevOps and CI/CD to ensure code consistency, fast delivery, and simple automation.

frontendworkflow.jpg

It might seem like a lot of what we do on frontend is to make our lives easier,
but what I’ve learned in the past two years as a GitLab team-member and a community contributor
is that if we make our lives easier, we can make a lot of customers happier, too.
Over the years, I’ve experienced many changes at GitLab, from a change in processes
to an increase in team members. From an early stage, the frontend team has been
committed to continuous improvements, but working in a rapidly growing team
required an investment in the way we work.

When I joined GitLab we still used some of the default conventions that the Rails
framework
recommended for the frontend, and it helped us for quite a while, but
the more code we touched, the more code we needed to test and build for
performance, making it more challenging for us to maintain. The frontend team
realized that we needed a way to facilitate code consistency, fast delivery, and
simple automation, so we decided to incorporate DevOps and
CI/CD into our workflow.

Frontend DevOps and CI/CD workflow

We used CI in a few scenarios, including using linters to help write a consistent
style of code throughout GitLab, but in the case of our JavaScript code, we
realized that building for performance and maintainability was becoming
increasingly difficult. So, we moved away from the
asset pipeline and utilized webpack,
which has given us a series of benefits. For example, when we develop locally,
debugging code is now a breeze, and the jobs that are frontend related run on
production-bundled code, ensuring a testing environment that closely resembles
that of a user.

After CI, we publish code using DevOps by hosting it with
GitLab Pages). We’ve seen several projects benefit from
adopting a DevOps model, including
GitLab SVG libraries and
Trello Power-Up.

When we created GitLab SVG libraries, we wanted to use them for ourselves and
make them available to the general public, so whenever we publish a new version,
we use GitLab Pages so that it’s fully automated every time.

With the Trello Power-Up plugin, we use DevOps to address compatibility
issues when a new version of Trello is released. GitLab Pages makes it easy to
deploy a new version, in a fast and diligent manner, so that it’s accessible in
the Trello Marketplace as quickly as possible.

Frontend DevOps and Data-driven efforts

Incorporating frontend DevOps and CI/CD into the workflow has had a significant
impact on efficiency and results. We have greater insight into our operations
and have metrics to help us detect major areas of improvement. We set up
Sitespeed using Kubernetes to analyze sets of pages
and provide reports on anything that could hamper our users’ perceived
performance, from CSS and JavaScript bundle sizes to accessibility issues and
the render time differences between various points in time. The information we gathered using
Sitespeed has helped us improve the merge requests page and identify pages that
render slowly. Having more data has changed the way we approach problems at
GitLab, because we are able to focus our efforts on specific areas.

The unexpected discovery of problems

One of the unexpected benefits of our workflow is the discovery of problems that
we may not have identified.

A lack of automation

We realized, for example, that we lack some automation in our tools. For
instance, every time we didn’t format code in a specific way, our linter
notified us, but analyzing and fixing the code slowed down developer velocity,
so we decided to add Prettier to format our code in our
merge requests for us. We also realized that, sometimes, we need a little bit of
automation when we publish code. As an all-remote company, many of us work on
public WiFi, and we found that unreliable connections could have detrimental
effects while deploying code. The combination of CI and DevOps made deployments
easier. If we triggered a pipeline and a coffee shop WiFi goes vamoose, it
doesn't matter. We already automated a significant part of our development
process, but we’re always striving for more.

A lack of speed

In the case of CI, we noticed that our own tools can be a source of problems. We
found that we didn’t make the necessary considerations to keep our test suite fast.
As developers, we want to go back to developing as fast as possible. A few of my
teammates discovered that our test runs were becoming slower and slower with each
release. Even though these are not customer-facing changes, it has made both
product managers and team managers consider investing in those issues, because
the easier the development cycle is for the developers involved, the better it
is for our customers, since we can deliver even more features. Furthermore, we
can prevent regressions from happening by having solid foundations, such as
testing, code style, and code formatting.

Every time we discover problems that affect us or our work, we realize that we
can also jeopardize the features and experiences we want to deliver to our
customers. It has changed the culture inside the team, because we view
performance issues as developers rather than as GitLab team-members.

Advice to frontend teams

Using DevOps and CI/CD in a frontend workflow is compatible with teams of any
size, including small teams that may want to ensure that their code styling is
the same.

Put a linter in place

With CI, the smallest and perhaps one of the most significant steps is
to put a linter in place, and if the pipeline doesn't pass, you can’t merge the
code. That's such a simple, effective way to improve your code and to keep it
tidy and clean in the long run. Just setting up some simple steps using CI will
improve your team’s code and your developers’ quality of life so that they don't
have to worry about combing through past code. Even though small teams might not
find the value in the short term, when they scale, they certainly will.

Create consistent scenarios

The bigger the project, the more you realize that some of your tooling ends up
running locally, and it's beneficial to run it on CI. If something doesn't work
on a generic type of machine that has enough dependencies installed to run your
CI setup, that means there’s something wrong and that you should probably fix it
before merging your code. As long as you can create a consistent scenario in which
you can do things like testing and linting, you should be in a good position to
deliver a great product.

Select CI-compatible tools

For teams of all sizes, it’s important that the tools you select as part of your
workflow are compatible with CI in some way, so that even if you had a big part
of your workflow running locally, you can easily move to CI by creating a pipeline
that resembles that of your daily workflow. Regardless of the tool that you choose,
creating a job for it will return a lot of value in the long run. If it makes
sense, I encourage you to add it, because there’s very little incentive not to.
CI-compatible tools include tests runners, linters, Prettier, or any custom-made
tools that help you in some way. One decision you might want to avoid is creating
on servers that live on CI runners. Since they only run for a limited amount of
time, these servers will stop existing. You could also add deployments to your
CI workflow, helping you with DevOps and preventing you from worrying about
complicated local setups for new developers. The possibilities are huge.

Add performance testing

To add to the pool of possibilities, why not add performance testing to your
merge requests with a tool such as
Lighthouse, which can
help you understand potential performance bottlenecks in your website. Or, maybe
your team can add the ability to generate code documentation and publish it via
GitLab Pages. CI/CD can be a really good tool, because it will return something
immediately. It's just a matter of how you want to use it, depending on your needs.

The more the frontend team uses CI and DevOps, the more we discover ways to use
it, so it’s worth it to us to invest in this tool.

Sometimes, we just want to
get stuff out there without too much consideration for tooling and CI and CD,
but because of the benefits we’ve experienced, we now include CI/CD in all of
our projects. With GitLab, everything is integrated, so why skip it? Instead of
fighting against automation, I encourage teams to embrace the idea that CI is
there to help you.

Cover image by
Zhipeng Ya, licensed
under CC X.

We want to hear from you

Enjoyed reading this blog post or have questions or feedback? Share your thoughts by creating a new topic in the GitLab community forum. Share your feedback

Ready to get started?

See what your team could do with a unified DevSecOps Platform.

Get free trial

New to GitLab and not sure where to start?

Get started guide

Learn about what GitLab can do for your team

Talk to an expert