What is CI/CD?

4 minute read

What is CI/CD?

Continuous integration and continuous delivery automate the build, test, and deployment processes, reducing manual errors and ensuring consistent output quality. Companies that ship ideas to customers quickly and learn in-market through software experimentation maintain competitive advantages. The most successful organizations treat software delivery as part of their product, with scale and adaptation determining their ability to execute.

Pipeline maturity stages

Organizations move through distinct maturity stages. The initial stage establishes the pipeline with manual interventions still required. At the managed stage, most processes are automated though opportunities exist for improvements in efficiency and scalability. The defined stage brings clear metrics, stable performance, and predictable outputs. Quantitatively managed pipelines use data-driven insights for continuous improvement, with pipeline observability becoming central. The optimizing stage represents the pinnacle—pipelines are stable and flexible, allowing teams to focus on strategic improvements rather than maintenance.

When to advance your practices

Pipelines that cannot scale with increasing complexity create bottlenecks. Teams building from large monorepos find build times increase due to data volume or test execution counts. Builds that suffer frequent failures indicate problems with standardization around security practices and governance. When teams spend more time troubleshooting than delivering features, visibility becomes the problem. Without ways to prioritize builds and offload different build types to different agent pools, systems can experience build storms where low-priority tests block high-priority hotfixes.

Performance strategies

Parallelization delivers the most significant time savings for teams migrating from legacy platforms. Test suites that take hours when run in series can be reduced to minutes by parallelizing across many individual agents. Teams building from monorepos benefit from selective building and testing based on changes rather than building entire projects each time. Dynamic pipeline capabilities prove powerful for implementing these selective builds, particularly when combined with plugins that simplify implementation.

Caching strategies speed up build times by reusing previously computed results. Creating multiple job queues with different specification hardware allows build jobs to be assigned to agents with appropriate resources. For teams that manage their own build agent infrastructure, seeding build machines with cached repository copies significantly reduces checkout time, reducing checkout times from fifteen-plus minutes to seconds.

Static versus dynamic pipelines

Statically configured pipelines have steps written beforehand. When a build triggers, those steps perform the build. Dynamically configured pipelines generate steps at runtime based on user-defined logic. For monorepos, dynamic pipelines can examine changes in the current commit and determine what steps are required without building and testing everything. Static pipelines are easier to set up but lack flexibility. Dynamic pipelines require preparing the logic to generate pipeline steps, but once established, they increase efficiency and reduce unnecessary runs. Organizations have replaced thousands of lines of YAML with programs that generate sophisticated capabilities without unwieldy configuration files.

Operational excellence

Comprehensive dashboards should reflect essential metrics including build status, deployment frequency, failure rate, mean time to recover, and lead time for changes. Combining service-level metrics with traces of individual build jobs provides deep visibility. Advanced CI/CD users employ these metrics to identify issues before they manifest.

Organizations using CI/CD at advanced levels rely on modular, hierarchical approaches to templating. High-level pipeline templates define everything every build should include: pre-flight checks like security scans and linting, build steps, tests, and where appropriate, deployment. Stage templates can be designed to allow individual project owners to define custom steps within stages, providing governance while giving teams flexibility.

Flaky tests pass or fail unpredictably without code changes. Regularly review and update tests to ensure reliability. Implement quarantine processes for flaky tests until they are fixed. Test Engine can instrument test runners and collect test data in real-time, detecting flaky tests during builds.

The hybrid architecture model

Build agents run on your infrastructure or on hosted compute, executing one build job at a time. You can run as many agents as needed, and the orchestration system coordinates work between them. Agents can be deployed securely across different networks and environments. The hybrid model means customers provide their own infrastructure for running agents and managing secrets while the control plane handles user authentication, build orchestration, and stores logs and metrics.

Working with monorepos

The monorepo plugin watches for changes in specific folders and runs custom pipelines depending on what changed. Configure pipelines to watch for file or folder changes and run necessary steps based on what changed. Dynamic pipelines allow teams to generate builds at runtime rather than having to define them before a build starts, enabling teams to dynamically generate necessary build jobs based on file changes in the current commit.

Frequently asked questions

Move to dynamic pipelines when you have a monorepo that builds everything on every commit, when your YAML configurations exceed 500 lines, or when different parts of your codebase require substantially different build steps. The investment pays off once pipeline complexity creates maintenance burden.

Start with build duration, queue wait time, and failure rate. These three metrics reveal the most common bottlenecks. Add test flakiness rate and deployment frequency once you have baseline visibility established.

Calculate based on average concurrent builds multiplied by average build duration, divided by desired maximum wait time. Add 20% buffer for spikes. Monitor agent utilization—if you see sustained periods above 80% utilization, scale up.

Implement automatic detection and quarantine for flaky tests. Allow teams to merge while quarantined tests are being fixed, but require fixing flaky tests before they can be removed from quarantine. Set a team policy that flaky tests must be fixed within one week.

Use hosted agents for standard builds with common dependencies. Use self-hosted agents when you need specific hardware, have security requirements around code location, need to access internal resources, or when compute costs for hosted agents exceed self-hosted infrastructure costs.

Get started with the fastest CI in the industry

Create an account to get started for free.

Buildkite Pipelines

Platform

  1. Pipelines
  2. Public pipelines
  3. Test Engine
  4. Package Registries
  5. Mobile Delivery Cloud
  6. Pricing

Hosting options

  1. Self-hosted agents
  2. Mac hosted agents
  3. Linux hosted agents

Resources

  1. Docs
  2. Blog
  3. Changelog
  4. Example pipelines
  5. Plugins
  6. Webinars
  7. Case studies
  8. Events
  9. Migration Services
  10. Comparisons
  11. CI/CD perspectives

Company

  1. About
  2. Careers
  3. Press
  4. Security
  5. Brand assets
  6. Contact

Solutions

  1. Replace Jenkins
  2. Workflows for MLOps
  3. Testing at scale
  4. Monorepo mojo
  5. Bazel orchestration

Legal

  1. Terms of Service
  2. Acceptable Use Policy
  3. Privacy Policy
  4. Subprocessors
  5. Service Level Agreement

Support

  1. System status
  2. Forum
© Buildkite Pty Ltd 2025