One weird trick to reduce build time! CI services hate him!
This is a fairly simple way to reduce your build time if you spend a lot of time bundling dependencies prior to performing tests or deployments in CI.
The trick is to bundle any build dependencies into a Docker image so that you don’t have to install them each time you run a job.
Let’s take a look at my
.gitlab-ci.yml file that I used in “GitLab Review Apps with Zeit’s Now.sh service”:
As you can see above, I’m installing build dependencies for
npm install -g now --silent in both the
stop_review pipeline stages. This is unnecessary and is done every single time a job runs (not DRY). If you run enough builds, that’s a significant amount of time wasted.
only need to build 40 times to be up!— andreas (@limbera) December 17, 2017
Let’s build a simple Docker image that includes the
With a simple
.gitlab-ci.yml file to push the image to the GitLab container registry:
Now, instead of pulling from
image: node in our initial
.gitlab-ci.yml, we can use
image: my.registry/hugo/now-image:latest and remove the section of our
.gitlab-ci.yml where we install our build dependencies, because they’re already bundled!
Now we’ve shaved a bit of time off our builds 👌
If you liked this post, have questions or queries, or can help me make it better, please tweet me!