-
Notifications
You must be signed in to change notification settings - Fork 409
Speedup your CI
Sergey Bronnikov edited this page Feb 1, 2023
·
12 revisions
There is an article in Russian about speeding up building and testing in CI. This page contains a list of tools that helps with speedup.
CI/CD Pipelines are the fundamental building blocks for CI/CD. Making pipelines more efficient helps you save developer time, which:
- Speeds up your DevOps processes
- Reduces costs
- Shortens the development feedback loop
It’s common that new teams or projects start with slow and inefficient pipelines, and improve their configuration over time through trial and error. A better process is to use pipeline features that improve efficiency right away, and get a faster software development lifecycle earlier.
- Use
--depth N
in Git. - Enable parallel mode in Git:
git config fetch.parallel 0
git config submodule.fetchJobs 0
- Profile your CI to eliminate bottlenecks:
- github-actions-profile - is a profiler for GitHub Actions workflow.
- Analyze the performance of your pipeline to find ways to improve efficiency.
- Spendesk/github-actions-exporter - github-actions-exporter for Prometheus.
- mvisonneau/gitlab-ci-pipelines-exporter - Prometheus / OpenMetrics exporter for GitLab CI pipelines insights.
- cpanato/github_actions_exporter - Prometheus exporter exposing GitHub Actions metrics.
- Gitlab CI helps with pipeline efficiency.
- Ignoring paths with non-relevant files
- Github CI:
paths-ignore
(Documentation) - Gitlab CI:
rules:changes
(Documentation)
- Github CI:
- Use caching dependencies
- Github Actions (Documentation)
- Disable unnecessary triggers in packages (
Processing triggers for man-db (2.9.4-2) ...
).- Debian - https://wiki.debian.org/DpkgTriggers
- Profile build system to eliminate bottlenecks:
-
ninjatracing - converts
.ninja_log
files to chrome'sabout:tracing
format. - buildbloat converts ninja build logs to webtreemap JSON files.
- Debugging Build Performance
-
ninjatracing - converts
- Use parallel mode.
- Make - option
-j
- Ninja - option
-j
- CMake - https://www.kitware.com//cmake-building-with-all-your-cores/
- Make - option
- Use fast build system. In some projects, Ninja could be faster than Make. CMake supports both build systems, so you could compare build time for both and choose a fastest.
- Replace default linker with Mold. Faster in 17 times in comparison with GNU gold and 3-5 times in comparison with LLVM lld.
-
Include what you use - is a tool for use with clang to analyze
#includes
in C and C++ source files. - Use cache
- ccache - is cache is a compiler cache. ccache could speed up your build in 30 (!) times. See performance results.
- sccache - is ccache with cloud storage. Supported C, C++ and Rust.
- Use distributed compilation (boost 2-4 times)
- Goma (C/C++) - is a distributed compiler service for open-source project such as Chromium and Android. It's some kind of replacement of distcc+ccache. Used by Google.
- nocc (C/C++) - is distributed C++ compiler. Used by VK.
- distcc is a fast, free distributed C/C++ compiler.
- icecream - is a distributed compiler with a central scheduler to share build load. Created by SUSE.
- Use distributed running
- gg - the Stanford Builder. Uses lambdas for running self-contained binaries, see a paper From Laptop to Lambda: Outsourcing Everyday Jobs to Thousands of Transient Functional Containers.
- llama - is a tool for running UNIX commands inside of AWS Lambda. Its goal is to make it easy to outsource compute-heavy tasks to Lambda, with its enormous available parallelism, from your shell.
- Test frameworks:
- Speeding up pytest: https://github.com/zupo/awesome-pytest-speedup
- Javascript: Speeding up Javascript Test Time 1000x
- Profile your tests to eliminate bottlenecks:
- Fail fast
- Parallel execution
- Test prioritization (TODO)
- Test minimization (TODO)
- Test impact analysis (TODO)
Copyright © 2014-2025 Sergey Bronnikov. Follow me on Mastodon @[email protected] and Telegram.
Learning
- Glossary
- Books:
- Courses
- Learning Tools
- Bugs And Learned Lessons
- Cheatsheets
Tools / Services / Tests
- Code complexity
- Quality Assurance Tools
- Test Runners
- Testing-As-A-Service
- Conformance Test Suites
- Test Infrastructure
- Fault injection
- TTCN-3
- Continuous Integration
- Speedup your CI
- Performance
- Formal Specification
- Toy Projects
- Test Impact Analysis
- Formats
Functional testing
- Automated testing
- By type:
WIP sections
Community
Links