-
Notifications
You must be signed in to change notification settings - Fork 855
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.
CI runs in two stages for PRs:
- Stage 1 (fast sanity checks): OS builds, clang-analyzer, AuTests
- 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.
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 |
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.
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.
- From your PR page on GitHub, find the failing check
- Click the Details link next to the failed check
- This takes you to the Jenkins Pipeline build page
- Click on the specific failed build to see its details
- 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.
When an AuTest fails, the sandbox contains all the information needed to debug:
- Navigate to the failed AuTest build from your PR
- Click Build Artifacts
- 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
If your PR modifies documentation and the Docs build succeeds, you can preview the rendered HTML:
- Navigate to the Docs build for your PR
- Click Build Artifacts
- Follow the
html/directory - Click
index.htmlto view the rendered docs in your browser
If the clang-analyzer build fails, it generates an interactive HTML report:
- Navigate to the failed clang-analyzer build
- Click Build Artifacts
- Click
index.htmlto view the analysis report
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-defaultThe 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-ciCI generates lcov test coverage reports for each supported branch:
- Go to Jenkins
- Select the branch tab (e.g.,
master) - Open the
coverageproject - Click Last Successful Artifacts
- Follow
output/→index.htmlto view the report
If CI is down, unresponsive, or a test is failing for reasons unrelated to your PR:
-
Slack: Post in the
#traffic-serverchannel on ASF Slack - GitHub: File an issue describing the problem
- Testing — How to write and run tests locally
- Code Review — CI must pass before merge
- trafficserver-ci repo — CI Pipeline scripts
Copyright 2025, dev@trafficserver.apache.org. Apache License, Version 2.0