Trong quá trình vận hành CI/CD pipeline, workflow log là dữ liệu cốt lõi để kiểm tra và khắc phục sự cố. Tuy nhiên, GitHub Actions không phải là hệ thống lưu trữ dài hạn (thời gian retention mặc định thường là 90 ngày). Việc phụ thuộc hoàn toàn vào hệ thống của GitHub sẽ gây ra rủi ro mất mát dữ liệu khi cần truy xuất lại các bản triển khai (deployment) từ nhiều tháng trước.
Quá trình tự động hóa được chia thành các bước tuần tự như sau:
1.Kích hoạt (Trigger):
Hệ thống sử dụng sự kiện workflow_run (kích hoạt khi một workflow bất kỳ trong repository hoàn thành) hoặc workflow_dispatch (cho phép chạy thủ công với một Run ID cụ thể).
2.Tải dữ liệu (Download Logs):
Thông qua GitHub REST API, hệ thống xác định ID của workflow vừa hoàn thành và tải về toàn bộ bản lưu trữ log dưới định dạng file ZIP.
3.Xử lý dữ liệu (Extract logs):
Thay vì tải trực tiếp file ZIP lên storage, hệ thống giải nén file này vào một thư mục tạm trên runner. Việc này giúp giữ nguyên cấu trúc phân cấp (từng job, từng step), tạo sự thuận tiện tối đa cho việc tra cứu sau này.
4.Đồng bộ hóa (Upload lên R2):
Hệ thống kiểm tra và cài đặt AWS CLI, sau đó sử dụng lệnh aws s3 sync để tải toàn bộ thư mục đã giải nén lên Cloudflare R2, và cuối cùng dọn dẹp môi trường runner. Các điểm VẤN ĐỀ quan trọng
- Sử dụng AWS CLI với Cloudflare R2: Việc dùng AWS CLI không đồng nghĩa với việc lưu trữ trên AWS S3. Cloudflare R2 cung cấp S3-compatible API. Bằng cách định tuyến lại tham số --endpoint-url trỏ về hạ tầng của Cloudflare, AWS CLI đóng vai trò như một client chuẩn hóa để đẩy dữ liệu lên R2. Phương pháp này tận dụng được lệnh aws s3 sync rất mạnh mẽ trong việc đồng bộ hóa thư mục.
- Ngăn chặn vòng lặp vô hạn (Infinite Loop): Vì bản thân quy trình archive cũng là một GitHub Actions workflow, nếu không kiểm soát, nó sẽ tự kích hoạt chính nó khi hoàn thành. Giải pháp bắt buộc là phải cấu hình điều kiện (if) để hệ thống bỏ qua việc lưu trữ nếu workflow vừa chạy chính là workflow archive.
- Bảo mật thông tin: Các thông tin nhạy cảm (Access Key, Secret Key, Endpoint) của R2 được lưu trữ hoàn toàn qua GitHub Secrets và truyền vào môi trường (Environment Variables), tuân thủ nguyên tắc đặc quyền tối thiểu (least privilege).
Kiến trúc này thiết lập nền tảng cơ bản cho việc quản lý log độc lập. Trong môi trường thực tế, hệ thống có thể được tối ưu hóa thêm thông qua:
- Vòng đời dữ liệu (Lifecycle Policy): Thiết lập chính sách trên R2 để tự động xóa các log cũ (ví dụ: sau 180 ngày) nhằm tối ưu hóa chi phí.
- Phân loại lưu trữ: Giới hạn việc archive chỉ áp dụng cho các workflow quan trọng (ví dụ: Production Deployment) thay vì toàn bộ repository.
- Lưu trữ siêu dữ liệu (Metadata): Đính kèm thêm các thông tin như commit_hash, branch, hoặc status bên cạnh file log để phục vụ mục đích truy vấn và phân tích chuyên sâu về sau.
Comment