Tại sao CI/CD quan trọng với các ứng dụng do AI tạo ra
Khi một công cụ AI tạo ra code ứng dụng của bạn, bạn vẫn cần một cách đáng tin cậy để đưa các bản cập nhật lên mà không làm hỏng production. Pipeline CI/CD (Continuous Integration / Continuous Deployment) sẽ chạy các kiểm tra tự động và triển khai code của bạn mỗi khi bạn push lên Git repository. Đối với các ứng dụng do AI tạo ra, điều này càng quan trọng hơn vì code có thể thay đổi rất nhanh khi bạn lặp lại bằng prompt.
Ý tưởng rất đơn giản: mỗi lần bạn push lên repository sẽ kích hoạt một workflow để buildứng dụng, chạy test, và triển khai lên nền tảng hosting của bạn (Vercel, Netlify, AWS, v.v.) nếu mọi thứ pass. Bạn không cần triển khai thủ công nữa, và không còn đẩy code lỗi lên cho người dùng.
GitHub Actions là gì
GitHub Actions là công cụ tự động hóa tích hợp sẵn trong GitHub. Bạn định nghĩa workflow trong các file YAML được lưu trong thư mục `.github/workflows` của repo. Mỗi workflow được kích hoạt bởi một sự kiện (ví dụ như push) và chạy một chuỗi các bước bên trong một máy ảo.
Một file workflow có ba phần chính: trigger (khi nào chạy), runner (chạy trên máy nào), và jobs (làm gì). Dưới đây là một ví dụ tối giản choứng dụng Node.js:
File này nằm tại `.github/workflows/deploy.yml`. Khi bạn push lên nhánh `main`, GitHub sẽ khởi tạo một máy Ubuntu, checkout code của bạn, cài đặt dependencies, build project, và chạy test.
Thêm bước triển khai tự động
Job build ở trên chỉ kiểm tra code của bạn có hoạt động không. Để thực sự đưa nó lên, bạn cần thêm bước deploy. Hầu hết các nhà cung cấp hosting hiện đại đều cung cấp các action dựng sẵn mà bạn có thể chèn vào. Đối với Vercel:
Lưu ý các tham chiếu đến secrets. Bạn lưu trữ các giá trị nhạy cảm như token API trong phần cài đặt của repository GitHub dưới mục Secrets và Environment variables, không bao giờ đặt trực tiếp vào file workflow. Cú pháp `${{ secrets.NAME }}` sẽ lấy secret tại runtime mà không làm lộ nó trong log.
Xử lý các đặc thù của code do AI sinh ra
Code do AI sinh ra thường đi kèm những vấn đề phát sinh thêm. Danh sách dependency có thể bị phình to hoặc bao gồm các package không dùng đến. Code có thể chạy ở môi trường local nhưng lại fail trên một máy sạch do thiếu file cấu hình môi trường. Dưới đây là các bước thực tế để tăng độ chắc chắn cho pipeline của bạn:
Thêm bước linting trước bước build để phát hiện sớm các lỗi thường gặp. Pin phiên bản Node.js hoặc runtime một cách tường minh. Cache dependencies bằng actions/cache để các lần cài đặt lặp lại diễn ra nhanh chóng. Đối với các biến môi trường mà ứng dụng cần khi chạy, hãy thêm chúng vào secrets.
Dùng `npm ci` thay cho `npm install` trong môi trường CI. `ci` đọc lock file một cách nghiêm ngặt và tạo ra các bản cài đặt có thể tái lập, nhờ đó bắt được trường hợp file `package.json` do AI sinh ra bị lệch so với `package-lock.json`.
Các lỗi hay gặp và cách khắc phục
Một sai lầm phổ biến là commit file workflow nhưng quên thêm secrets trong phần cài đặt của repo. Workflow sẽ fail với lỗi "secret not found". Hãy vào Settings → Secrets and variables → Actions và thêm từng cái một.
Một lỗi khác là deploy trên mỗi lần push, kể cả push lên các feature branch. Hãy dùng bộ lọc branches trong khối `on` để giới hạn chỉ chạy trên `main`, hoặc thêm một job deploy preview riêng cho pull request.
Cuối cùng, hãy cẩn thận với các workflow chạy trên pull request từ fork. Theo mặc định, những workflow đó không thể truy cập secrets vì lý do bảo mật. Nếu cần, hãy dùng `pull_request_target` một cách thận trọng, hoặc dựa vào các môi trường preview miễn phí không yêu cầu secrets.
Tổng kết
Một pipeline CI/CD vững cho một web app do AI sinh ra chỉ đơn giản là một file YAML trong repo, chạy mỗi lần push, cài đặt dependencies sạch sẽ, build và test, rồi deploy lên host của bạn bằng các secret đã lưu trữ. Hãy bắt đầu với một workflow build-and-test cơ bản, sau đó thêm bước deploy khi đã có thông tin đăng nhập hosting. Hãy đối xử với chính pipeline đó như hạ tầng production, bởi vì nó quyết định thứ gì sẽ đến tay người dùng của bạn.
Bài kiểm tra cuối bài
Ôn lại kiến thức, thử sức và nhận góp ý cho bài làm.