用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/coreos/ai-helpers --skill pipeline-failures命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
OCP release queries - latest versions, RHCOS images, and RPM package lists
Investigate initramfs issues - extraction, module analysis, and comparing working vs failing builds
Deduplication logic for CI pipeline failures - check Jira for existing tracking with semantic analysis
基于 SOC 职业分类
正在显示 SKILL.md
| name | pipeline-failures |
| description | Investigate Jenkins CI pipeline failures - failure patterns, root cause analysis, and debugging workflows |
Knowledge for investigating Jenkins CI pipeline failures in the CoreOS build system.
Related:
rhcos-build-pipeline(Jenkins jobs),rhcos-artifacts(artifacts, diffs, cosa comparison),pipeline-jira(creating failure issues)
Understanding the job hierarchy is critical to avoid analyzing the wrong logs:
| Job | Has downstream? | Analysis approach |
|---|---|---|
build | Yes → triggers build-arch per-arch | Check console for which arch failed, then analyze that build-arch job |
build-arch | No (leaf job) | Analyze directly - kola tests run here |
build-node-image | No (independent pipeline) | Analyze directly - does NOT trigger build-arch |
Critical: build-node-image is a separate pipeline from build/build-arch. When investigating build-node-image:
build-arch jobs - there are nonebuild-arch job running at the same time is coincidental, not relatedStream validation: Always verify the stream matches. A build-node-image failure for stream 4.21-9.6 cannot be caused by a build-arch for stream rhel-10.2 - they are completely unrelated builds.
# List recent failures
coreos-tools jenkins builds list <job-name> --status FAILURE -n 5
# Check if failure is in build-arch (for build job failures)
coreos-tools jenkins builds list build-arch --status FAILURE -n 5
# Get build info (parameters, trigger cause, duration)
coreos-tools jenkins builds info <job-name> <build-number>
# Download console log for analysis
coreos-tools jenkins builds log <job-name> <build-number> | jq -r '.console_log[]' > /tmp/build.log
# Get kola test failure summary
coreos-tools jenkins builds kola-failures <job-name> <build-number>
# Filter for actual failures (tests that failed on rerun)
coreos-tools jenkins builds kola-failures <job-name> <build-number> | jq '[.failures[] | select(.rerun_failed == true)]'
Download and examine kola artifacts when rerun_failed: true.
See "Analyzing Kola Test Artifacts" section below.
# Find last successful build for same stream (filter out "no new build" entries)
coreos-tools jenkins builds list <job-name> --status SUCCESS --stream <stream> -n 20 | \
jq '[.[] | select(.description | test("no new build") | not)] | first'
# Compare packages between good and bad builds
coreos-tools jenkins builds diff <job> <good-build> <bad-build>
# Compare cosa versions - see "coreos-assembler Regression Detection" section
Based on what changed:
The kola-failures output includes a rerun_failed field:
| Field Value | Meaning | Action |
|---|---|---|
"rerun_failed": true | Test consistently fails | This is likely the root cause - investigate package changes |
"rerun_failed": false | Test passed on rerun (flaky) | NOT the root cause - look for other errors in logs |
Decision Tree:
rerun_failed: true → Find last known good build, compare packages to identify regressionrerun_failed: false only → Flaky tests, NOT root cause. Check logs for compose/infrastructure errorsWhen tests fail with rerun_failed: true, download and analyze the kola artifacts:
# List artifacts (look for kola-*.tar.xz files)
coreos-tools jenkins builds artifacts <job-name> <build-number>
# Download kola artifacts
coreos-tools jenkins builds artifacts <job-name> <build-number> --download kola-<hash>.tar.xz -o /tmp/kola.tar.xz
# Extract
mkdir -p /tmp/kola && tar -xf /tmp/kola.tar.xz -C /tmp/kola
kola/
├── reports/report.json # Overall test results
├── <test-name>/
│ └── <uuid>/
│ ├── journal.txt # systemd journal (primary log)
│ ├── console.txt # VM console output
│ └── ignition.json # Ignition config used
└── rerun/ # Rerun attempts (same structure)
└── <test-name>/
# Find test directories
find /tmp/kola -type d -name "*<test-pattern>*"
# Search for errors in journal
grep -E "Error:|Failed|error:" /tmp/kola/kola/<test-name>/*/journal.txt
# Check Ignition config for missing files
cat /tmp/kola/kola/<test-name>/*/ignition.json | jq '.storage'
# Compare initial run vs rerun
diff /tmp/kola/kola/<test>/*/journal.txt /tmp/kola/kola/rerun/<test>/*/journal.txt
storage section when files should be injected# General errors
grep -E "^error:|FATAL:|failed to|cannot |Error:" /tmp/build.log | tail -20
# Infrastructure issues
grep -E "timeout|timed out|Connection refused|503|500|temporarily unavailable" /tmp/build.log
# Stage failures
grep -E "FAILED|UNSTABLE" /tmp/build.log
| Pattern | Category | Typical Action |
|---|---|---|
ERROR: or FATAL: | Build/compose error | Investigate package or cosa change |
| Timeout errors | Infrastructure | Retry, check resources |
| Network/connectivity | Transient | Retry |
Permission denied | SELinux/config | Investigate policy changes |
No space left on device | Disk exhaustion | Clean up or expand storage |
# Check if a build is already running first
coreos-tools jenkins builds list <job-name> -n 5
# Trigger retry
coreos-tools jenkins jobs build <job-name> -p STREAM=<stream> -p FORCE=true
When package updates are suspected as root cause:
# Get build details from Brew
brew buildinfo <package-nvr>
# Example
brew buildinfo kernel-6.12.0-211.3.1.el10_2
# Download src.rpm and get changelog
brew download-build --rpm <package-nvr>.src.rpm --noprogress
rpm -qp --changelog <package-nvr>.src.rpm | head -100
# Compare two versions
rpm -qp --changelog <new-version>.src.rpm > /tmp/new.log
rpm -qp --changelog <old-version>.src.rpm > /tmp/old.log
diff /tmp/old.log /tmp/new.log
# For RHEL packages in GitLab
glab api "projects/rpms%2F<package>/repository/compare?from=<old-tag>&to=<new-tag>" | \
jq -r '.commits[] | "\(.short_id) \(.title)"'
| Package | Impact Area |
|---|---|
| kernel/kernel-rt | Boot, drivers, secex, performance |
| ignition | Firstboot, provisioning |
| coreos-installer | Installation, zipl (s390x) |
| ostree/rpm-ostree | Upgrades, deployments |
| systemd | Services, boot ordering |
When cosa versions differ between good and bad builds:
# Download cosa version info
coreos-tools jenkins builds artifacts <job> <bad-build> --download coreos-assembler-git.json -o /tmp/bad-cosa.json
coreos-tools jenkins builds artifacts <job> <good-build> --download coreos-assembler-git.json -o /tmp/good-cosa.json
# Extract commit SHAs
cat /tmp/good-cosa.json | jq -r '.git.commit'
cat /tmp/bad-cosa.json | jq -r '.git.commit'
# List commits between versions
gh api repos/coreos/coreos-assembler/compare/<old-sha>...<new-sha> \
--jq '.commits[] | {sha: .sha[0:7], date: .commit.author.date, message: .commit.message | split("\n")[0]}'
# Check which files changed
gh api repos/coreos/coreos-assembler/compare/<old-sha>...<new-sha> \
--jq '.files[] | {filename: .filename, status: .status, changes: .changes}'
# Get full diff for a specific file
gh api repos/coreos/coreos-assembler/compare/<old-sha>...<new-sha> \
--jq '.files[] | select(.filename == "<file>") | .patch'
For deeper root cause analysis, search upstream CoreOS repositories:
# Search across CoreOS repos
gh search code "<pattern>" --repo coreos/coreos-assembler --repo coreos/ignition \
--repo coreos/coreos-installer --repo coreos/afterburn \
--json repository,path,textMatches
# Search OpenShift repos
gh search code "<pattern>" --repo openshift/os --json repository,path
# Get commits for a specific file
gh api "repos/<org>/<repo>/commits?path=<file>&per_page=10" | \
jq '.[] | {sha: .sha[0:7], date: .commit.author.date, message: .commit.message | split("\n")[0]}'
# Get file contents
gh api repos/<org>/<repo>/contents/<path> --jq '.content' | base64 -d
| Repository | Contains |
|---|---|
coreos/coreos-assembler | Build tools, kola tests, qemu harness |
coreos/ignition | Provisioning, firstboot |
coreos/coreos-installer | Installation, s390x zipl, secex |
coreos/afterburn | Cloud metadata, firstboot completion |
coreos/fedora-coreos-config | systemd units, overlays |
openshift/os | RHCOS-specific configs and tests |