1. Vì sao đưa k6 vào CI và observability
Một bài test tải chạy tay một lần trước khi phát hành có giá trị hạn chế: nó cho bạn ảnh chụp một thời điểm, rồi bị lãng quên. Trong một nhà mạng viễn thông với hàng triệu thuê bao và bản phát hành liên tục, giá trị thật đến từ việc chạy k6 tự động trong pipeline ở mỗi thay đổi lớn, và stream metric tới một hệ thống quan sát để nhìn xu hướng theo thời gian. Chỉ khi ấy bạn mới phát hiện được hồi quy hiệu năng — khi một bản build làm p95 chậm đi 20% so với tuần trước.
Bài viết này tập trung vào ba việc: chạy k6 như một cổng trong pipeline CI (dựa vào exit code từ thresholds), stream metric tới Prometheus/Grafana/InfluxDB để quan sát, và đối chiếu metric phía k6 với metric phía server để tìm nguyên nhân gốc. Cuối cùng ta bàn về soak test và phát hiện hồi quy theo thời gian.
2. Exit code: cách k6 nói với pipeline rằng nó trượt
Nền tảng để k6 làm cổng CI là hành vi exit code. Khi mọi threshold pass, k6 kết thúc với exit code 0. Khi có bất kỳ threshold nào trượt, k6 kết thúc với exit code 99. Hệ thống CI (GitHub Actions, GitLab CI, Jenkins...) coi exit code khác 0 là bước thất bại và tự động dừng pipeline. Nhờ vậy, một bản build làm hiệu năng tệ đi sẽ bị chặn tự động, không cần con người ngồi đọc số.
# Chạy k6, và exit code sẽ dừng pipeline nếu threshold trượt
k6 run smoke.js
echo "exit code = $?" # 0 nếu pass, 99 nếu có threshold trượt
# Xuất kết quả ra JSON để lưu artifact và so sánh về sau
k6 run --out json=result.json load.js
# Tóm tắt ra file để pipeline đính kèm làm bằng chứng
k6 run --summary-export=summary.json load.jsMột mẹo quan trọng: trong pipeline nên phân biệt bài smoke (nhanh, chạy mọi PR) với bài load/soak (nặng, chạy theo lịch hoặc trước phát hành). Bài smoke với tải nhỏ và threshold cơ bản đảm bảo không có gì gãy rõ ràng; bài nặng chạy ít thường xuyên hơn để không làm chậm mọi commit.
3. Chạy k6 trong GitHub Actions
Cách phổ biến nhất là dùng action chính thức của Grafana để cài k6, rồi chạy script. Bước k6 sẽ tự làm pipeline đỏ nếu threshold trượt, vì action tôn trọng exit code. Bạn có thể upload kết quả JSON làm artifact để lưu vết và so sánh giữa các lần chạy.
# .github/workflows/perf.yml
name: perf-gate
on: [pull_request]
jobs:
k6-smoke:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run k6 smoke test
uses: grafana/setup-k6-action@v1
- name: Execute
uses: grafana/run-k6-action@v1
with:
path: ./tests/smoke.js
# exit code 99 nếu threshold trượt -> step FAIL -> pipeline đỏ
- name: Upload result
if: always()
uses: actions/upload-artifact@v4
with:
name: k6-result
path: summary.jsonTrong bối cảnh viễn thông, một pipeline điển hình chạy smoke test trên mỗi pull request để bắt hồi quy nghiêm trọng sớm, rồi một job load test theo lịch hằng đêm trên môi trường staging giống production. Kết quả hằng đêm được stream vào Grafana để đội nhìn xu hướng qua các ngày, thay vì chỉ pass/fail của một lần.
💬 Bình luận (0)
Chưa có bình luận nào. Hãy là người đầu tiên!