Skip to content

Continuous Integration

Bryan Call edited this page Mar 19, 2026 · 2 revisions

Continuous Integration

Apache Traffic Server runs a comprehensive set of CI checks on every pull request and on each supported branch as changes are merged. CI is implemented using Jenkins, with hosts generously contributed by GoDaddy.

Overview

CI runs in two stages for PRs:

  1. Stage 1 (fast sanity checks): OS builds, clang-analyzer, AuTests
  2. Stage 2 (runs only if stage 1 passes): Docs, RAT, clang-format

Jenkins is the CI system. The Pipeline configurations are checked into the trafficserver-ci repository.

Required CI Checks

All of the following checks must pass before a PR can be merged (configured in .asf.yaml):

Check What It Validates
AuTest 0of4 End-to-end integration tests (shard 1 of 4)
AuTest 1of4 End-to-end integration tests (shard 2 of 4)
AuTest 2of4 End-to-end integration tests (shard 3 of 4)
AuTest 3of4 End-to-end integration tests (shard 4 of 4)
Rocky Build on Rocky Linux (ASAN + QUIC/Quiche)
CentOS Build on CentOS (Release build)
Clang-Analyzer Static analysis via clang-analyzer
Format clang-format compliance check
Debian Build on Debian (with hardening flags)
Docs Sphinx documentation build (only runs if docs changed)
Fedora Build on Fedora
RAT Apache Release Audit Tool (license header check)
Ubuntu Build on Ubuntu (clang, with hardening flags)
OSX Build on macOS
FreeBSD Build on FreeBSD

How CI Runs

PR Checks

When a PR is submitted, a GitHub webhook sends a POST to the Jenkins controller, which kicks off the Pipeline for that PR. Build status is reported back to GitHub as checks run and complete.

Branch Checks

When changes are merged into a supported branch (master, 9.2.x, etc.), CI runs a full suite of builds and tests against that branch, including test coverage analysis.

Reading CI Failures

  1. From your PR page on GitHub, find the failing check
  2. Click the Details link next to the failed check
  3. This takes you to the Jenkins Pipeline build page
  4. Click on the specific failed build to see its details
  5. Click Console Output to see the full build/test log

For running builds that haven't completed yet, click Console Output on the Pipeline page and scroll to find links to in-progress builds.

Accessing Build Artifacts

AuTest Sandbox

When an AuTest fails, the sandbox contains all the information needed to debug:

  1. Navigate to the failed AuTest build from your PR
  2. Click Build Artifacts
  3. Browse the sandbox directory for:
    • ATS configuration files as generated for the test
    • Log files (error.log, diags.log, squid.log)
    • Process stdout/stderr output

Rendered Documentation

If your PR modifies documentation and the Docs build succeeds, you can preview the rendered HTML:

  1. Navigate to the Docs build for your PR
  2. Click Build Artifacts
  3. Follow the html/ directory
  4. Click index.html to view the rendered docs in your browser

clang-analyzer Reports

If the clang-analyzer build fails, it generates an interactive HTML report:

  1. Navigate to the failed clang-analyzer build
  2. Click Build Artifacts
  3. Click index.html to view the analysis report

Reproducing CI Locally

Using CI Docker Images

The Docker images used in CI are publicly available, so you can reproduce CI environments locally:

# Pull a CI image
docker pull controller.trafficserver.org/ats/centos:8

# Run a container matching CI
docker run -it -u 1200:1200 --init --cap-add=SYS_PTRACE \
  --network=host controller.trafficserver.org/ats/centos:8 /bin/bash

# Inside the container
cd ~
git clone https://github.com/apache/trafficserver.git
cd trafficserver
cmake --preset default
cmake --build build-default

Reproducing Specific CI Configurations

The project's CMakePresets.json includes presets that mirror CI configurations:

Preset Matches CI Job
ci Base CI defaults
ci-centos CentOS build
ci-rocky Rocky Linux (ASAN + Quiche)
ci-fedora Fedora build
ci-debian Debian (hardened)
ci-ubuntu Ubuntu (clang, hardened)
ci-clang-analyzer Clang-Analyzer
# Example: reproduce the Fedora CI build locally
cmake --preset ci-fedora
cmake --build build-ci

Test Coverage Reports

CI generates lcov test coverage reports for each supported branch:

  1. Go to Jenkins
  2. Select the branch tab (e.g., master)
  3. Open the coverage project
  4. Click Last Successful Artifacts
  5. Follow output/index.html to view the report

Reporting CI Issues

If CI is down, unresponsive, or a test is failing for reasons unrelated to your PR:

See Also

Clone this wiki locally