Mục tiêu của agentic engineering không phải viết code nhanh hơn. Mà là ship phần mềm đáng tin cậy với ít sự can thiệp của con người hơn mỗi lần deploy.
Đây là bài cuối của series. Chúng ta đã nói về plan, code, QA review, và công cụ debug. Bây giờ: làm sao tất cả điều này thực sự đến production?
Đây là pipeline deploy đầy đủ cho hai dự án thực tế — site portfolio này (luonghongthuan.com) và CubLearn — với cấu hình chính xác, các lỗi đã gặp, và giám sát bắt cái gì QA agent bỏ sót.
Pipeline Đầy Đủ
SPEC
|
v
Plan Mode (agent đọc codebase, tạo plan)
|
v
QA Review Pass 1 (kiểm tra plan -- reject hoặc approve)
|
v
Sinh Code (coding agent thực thi plan)
|
v
QA Review Pass 2-4 (wiring + test + convention)
|
v
Human Review (quét diff 5 phút)
|
v
git push -> GitHub
|
v
GitHub CI (TypeScript compile + unit test + build)
|
+-- FAIL: thông báo + chặn deploy
|
v (pass)
Cloudflare Pages Build (Astro build + Wrangler deploy)
|
+-- FAIL: thông báo + không chuyển traffic
|
v (pass)
Smoke Tests (kiểm tra endpoint tự động)
|
+-- FAIL: tự động rollback về deployment trước
|
v (pass)
Chuyển Traffic (deployment mới nhận 100% traffic)
|
v
Giám Sát Log (Wrangler + Docker + cảnh báo khi lỗi tăng đột ngột)
Mỗi bước đều tự động ngoài human review. Human review mất 5 phút. Phần còn lại chạy mà không cần tôi.
GitHub CI: Cổng Kiểm Tra Đầu Tiên
Trước khi bất cứ thứ gì deploy, GitHub CI xác thực code.
Cấu hình cho luonghongthuan.com (.github/workflows/ci.yml):
name: CI
on:
push:
branches: [main]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: TypeScript check
run: npx tsc --noEmit
- name: Lint
run: npm run lint
- name: Build validation
run: npm run build
- name: Unit tests
run: npm test
Mỗi bước bắt được gì:
- TypeScript check: Lỗi kiểu agent tạo ra (kiểu trả về sai, thiếu null check)
- Lint: Vi phạm convention qua khỏi QA review (import chưa dùng, kiểu
any,console.logtrong production) - Build validation: Lỗi đặc thù Astro (content collection schema bị hỏng, frontmatter sai, prop component thiếu)
- Unit tests: Regression hành vi trong hàm tiện ích
Smoke Tests: Xác Minh Cuối Cùng
Sau mỗi lần deploy, smoke test tự động chạy trên site live.
Bộ smoke test cho luonghongthuan.com:
const tests = [
// Trang chính
{ url: '/', check: (html: string) => html.includes('Luong Hong Thuan') },
{ url: '/en/blog/', check: (html: string) => html.includes('blog-post') },
{ url: '/vi/blog/', check: (html: string) => html.includes('bai-viet') },
// API endpoint
{ url: '/api/tts-config',
check: (json: any) => json.provider !== undefined },
// TTS cache verification
{
url: '/api/tts',
method: 'POST',
body: { text: 'smoke test phrase', voice: 'en-US-Chirp3-HD-Charon', lang: 'en' },
check: (res: Response) => res.headers.get('X-TTS-Cache') === 'MISS', // Lần đầu MISS
},
{
url: '/api/tts',
method: 'POST',
body: { text: 'smoke test phrase', voice: 'en-US-Chirp3-HD-Charon', lang: 'en' },
check: (res: Response) => res.headers.get('X-TTS-Cache') === 'HIT', // Lần 2 HIT
},
];
Nếu smoke test thất bại: triggerRollback() dùng Cloudflare Pages API để quay về deployment trước. Không có traffic nào ở trên phiên bản lỗi quá 5 phút.
Giám Sát Log: Sau Khi Deploy
Ngay khi smoke test pass, production vẫn có thể gây bất ngờ. Giám sát log là lưới an toàn liên tục.
Cảnh báo tôi đã cấu hình:
- Tỷ lệ lỗi > 1% request trong bất kỳ window 5 phút nào — thông báo Slack
- Lỗi TTS API (Google 429, 503) — thông báo Slack ngay lập tức
- Tỷ lệ cache MISS > 80% trong 1 giờ — kích hoạt điều tra
- Thời gian build > 120 giây — kích hoạt điều tra
Những gì giám sát đã bắt được:
-
Bài blog tiếng Việt với encoding bị hỏng khiến TTS function trả về 502 mọi request cho trang đó. Bắt được 11 phút sau deploy. Fix trong 20 phút.
-
Cloudflare CDN cache phục vụ HTML cũ sau deploy. Giám sát cho thấy
cf-cache-status: HITtrên các trang lẽ ra phải làMISS. Kích hoạt purge cache thủ công.
CubLearn: Pipeline Ứng Dụng Giáo Dục
CubLearn có pipeline phức tạp hơn vì chạy là ứng dụng Next.js đầy đủ.
Pipeline deployment YLE integration:
Khi thêm 8 bài học game và 3 bộ memory card, đây là CI logs:
TypeScript check: PASS (0 lỗi)
ESLint: PASS
Unit tests: 47 passed, 0 failed
-- english-lessons.test.ts: 12 tests (tất cả bài học YLE mới được xác thực)
-- memory-pairs.test.ts: 8 tests (tất cả bộ card mới được xác thực)
-- pronunciation.test.ts: 6 tests (tất cả bài tập mới được xác thực)
E2E tests: 3 passed
Build: PASS (47.2 giây)
Deploy: PASS
Smoke tests: PASS
Tổng thời gian từ push đến live: 4 phút 20 giây.
Vai Trò Của Con Người Trong Pipeline Này
Human review KHÔNG PHẢI:
- Review code từng dòng (đó là việc của agent QA)
- Xác minh test (đó là việc của CI)
- Săn bug (đó là việc của agent QA + smoke test)
Human review LÀ:
- Kiểm tra tính hợp lý: diff có khớp với yêu cầu không?
- Kiểm tra scope: có thứ gì trong diff mà không có trong spec không?
- Phán xét: có lý do nào hệ thống tự động sẽ không bắt được điều này không?
- Ủy quyền: tôi là người quyết định cái này ship
Review 5 phút là về phán xét, không phải kiểm tra. Việc kiểm tra đã xảy ra rồi.
Series: Hoàn Tất
Đây là bài cuối trong “Xây Bằng Agentic Engineering.”
Chúng ta bắt đầu với manifesto: agentic engineering có nghĩa là gì và tại sao vibe coding không phải đích đến.
Chúng ta đã nói về plan mode: tại sao nghiên cứu trước code không phải tùy chọn, cách specification ngăn stub, và cách agent QA kiểm tra plan trước khi viết dòng code nào.
Chúng ta đã nói về agent QA: wiring verification, kiểm tra test coverage, tuân thủ convention, và dữ liệu thực tế về chi phí so với tiết kiệm.
Chúng ta đã nói về debug dựa trên bằng chứng: Chrome DevTools MCP, Docker logs, Serena semantic understanding, và tại sao đo lường thắng hơn đoán mò.
Và chúng ta đã nói về pipeline: CI, build, smoke test, giám sát, rollback.
Dòng chữ ở cuối mỗi bài có ý nghĩa thực sự:
Xây bằng agentic engineering. Xác minh bởi agent QA. Review bởi người. Ship lên production.
Đây không phải workflow cho tất cả mọi người hay mọi dự án. Nhưng nếu bạn đang xây phần mềm quan trọng — phần mềm người ta sẽ tin cậy, phải hoạt động mọi lần, ai đó sẽ maintain nhiều năm — thì đáng có xu hướng xây hệ thống xây ra phần mềm.
Agent có năng lực. Hệ thống là nghề thủ công.
Đây là Phần 5 của series “Xây Bằng Agentic Engineering”. Trước: Debug Dựa Trên Bằng Chứng Bắt đầu từ đầu: Cách Làm Phần Mềm Mới