Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Giải pháp lưu trữ dài hạn (Archive) GitHub Actions Workflow Logs lên Cloudflare R2

    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.
    Để giải quyết vấn đề này, chúng ta có thể xây dựng một cơ chế tự động trích xuất và chuyển hướng log sang một hệ thống Object Storage, cụ thể ở đây là Cloudflare R2. Luồng xử lý của hệ thống


    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).
    Hướng phát triển mở rộng


    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.
    Kết luận: Bằng việc xây dựng một lớp tự động hóa (automation layer) độc lập, chúng ta có thể tách biệt chức năng thực thi CI/CD của GitHub Actions và chức năng lưu trữ dài hạn của Cloudflare R2, đảm bảo tính toàn vẹn của dữ liệu vận hành mà không cần thay đổi hoàn toàn hệ thống hiện tại.
    Click image for larger version

Name:	image.png
Views:	4
Size:	28.3 KB
ID:	445018​​

  • #2
    Mọi người tham khảo workflow mình để trên repo này nha

    Comment

    Working...
    X