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

  • GitLab CI/CD Pipeline: Hiểu đúng để xử lý lỗi nhanh hơn

    GitLab CI/CD Pipeline: Hiểu đúng để xử lý lỗi nhanh hơn


    Khi xây dựng một hệ thống CI/CD, việc lựa chọn nền tảng phù hợp là yếu tố rất quan trọng. Nhiều doanh nghiệp lựa chọn GitLab vì đây là một nền tảng DevOps tích hợp, cung cấp cả Git Repository, CI/CD Pipeline, Container Registry và nhiều tính năng quản lý vòng đời phát triển phần mềm trên cùng một hệ thống.

    Thay vì phải kết hợp nhiều sản phẩm khác nhau, GitLab mang đến một môi trường "all-in-one" giúp đơn giản hóa việc phát triển và triển khai ứng dụng.
    Pipeline as Code với GitLab


    Toàn bộ quy trình CI/CD của GitLab được định nghĩa trong một file duy nhất:
    .gitlab-ci.yml

    File này được đặt ở thư mục gốc (root) của project và được viết bằng cú pháp YAML.

    Khái niệm này được gọi là Pipeline as Code, nghĩa là pipeline cũng được quản lý giống như mã nguồn.

    Điều này mang lại nhiều lợi ích:
    • Lưu lịch sử thay đổi bằng Git.
    • Dễ dàng review thông qua Merge Request.
    • Rollback nhanh khi pipeline gặp lỗi.
    • Audit toàn bộ thay đổi.
    • Có thể tái sử dụng và chia sẻ giữa nhiều dự án.

    Ngoài ra, GitLab còn tích hợp CI Lint, công cụ kiểm tra cú pháp YAML trước khi chạy pipeline, giúp phát hiện lỗi cấu hình ngay từ đầu.
    Các thành phần của GitLab CI/CD


    Một GitLab Pipeline được xây dựng từ nhiều thành phần. Commit


    Mỗi lần Developer commit mã nguồn lên Git Repository sẽ có thể kích hoạt một pipeline mới.
    Job


    Job là đơn vị thực thi nhỏ nhất trong pipeline.

    Ví dụ:
    • Build
    • Test
    • Security Scan
    • Deploy

    Mỗi Job sẽ được GitLab Runner thực hiện độc lập.
    Pipeline


    Pipeline là tập hợp của nhiều Job được tổ chức thành các Stage khác nhau.

    Ví dụ:
    Build

    Test

    Security Scan

    Deploy

    Pipeline chỉ hoàn thành khi toàn bộ các Stage đều thành công.
    Runner


    GitLab Runner là thành phần chịu trách nhiệm thực thi các Job.

    Runner có thể là:
    • Máy vật lý
    • Virtual Machine
    • Docker Container
    • Kubernetes Pod

    Runner có thể tự động khởi tạo hoặc hủy sau khi hoàn thành công việc, giúp tối ưu tài nguyên.
    Stage


    Stage là các giai đoạn trong pipeline.

    Thông thường sẽ gồm:
    • Build
    • Test
    • Security Scan
    • Package
    • Deploy

    Các Job trong cùng một Stage có thể chạy song song để rút ngắn thời gian xử lý.
    Khi Build Stage thất bại


    Trong nhiều pipeline, Build luôn là Stage đầu tiên.

    Nếu Build thất bại thì:
    • Test sẽ không chạy.
    • Security Scan sẽ không chạy.
    • Deploy sẽ không chạy.

    Pipeline sẽ dừng ngay tại Stage đầu tiên.

    Điều này giúp tiết kiệm thời gian và tài nguyên vì không cần tiếp tục thực hiện các bước phía sau khi mã nguồn chưa thể build thành công.
    Lỗi Pipeline Configuration


    Một trong những lỗi phổ biến nhất là sai cấu hình trong file:
    .gitlab-ci.yml

    Ví dụ:
    • Sai cú pháp YAML.
    • Thiếu dấu :.
    • Thụt lề (indentation) không đúng.
    • Sai tên Stage.
    • Sai biến môi trường.
    • Sai Job dependency.

    May mắn là GitLab cung cấp CI Lint, công cụ kiểm tra cú pháp trước khi chạy pipeline.

    CI Lint sẽ chỉ rõ:
    • Dòng bị lỗi.
    • Nội dung lỗi.
    • Gợi ý cách sửa.

    Nhờ đó, nhiều lỗi có thể được phát hiện trước khi commit lên Repository.
    Lỗi Missing Dependencies


    Sau khi sửa file YAML, pipeline vẫn có thể thất bại do thiếu thư viện hoặc package.

    Đây là lỗi rất phổ biến trong các dự án Python.

    Ví dụ, mã nguồn sử dụng:
    import requests
    import flask
    import pandas

    Nếu GitLab Runner chưa cài các package này thì Build sẽ thất bại ngay.

    Thông thường, các dự án Python sẽ khai báo dependency trong:
    requirements.txt

    hoặc
    Pipfile

    Một sai sót thường gặp là lập trình viên cài package trên máy cá nhân nhưng quên commit file requirements.txt hoặc Pipfile lên Git. Khi pipeline chạy trên GitLab Runner, môi trường mới không có các thư viện cần thiết nên quá trình build sẽ thất bại.
    Lỗi Version Incompatibility


    Một nguyên nhân khác là sự khác biệt về phiên bản giữa môi trường phát triển và môi trường CI.

    Ví dụ:
    • Python 3.10 trên máy Developer nhưng Runner dùng Python 3.12.
    • Node.js 18 trên máy local nhưng Runner dùng Node.js 22.
    • Terraform, Docker hoặc Kubernetes CLI khác phiên bản.

    Những khác biệt này có thể khiến pipeline hoạt động không như mong đợi, dù ứng dụng vẫn chạy bình thường trên máy của lập trình viên.

    Để hạn chế rủi ro, nhóm phát triển nên chuẩn hóa môi trường bằng Docker hoặc Dev Containers và luôn build, test trên môi trường cục bộ trước khi đẩy mã nguồn lên Repository.
    Best Practices


    Để giảm tỷ lệ Pipeline Failure, các nhóm DevOps thường áp dụng một số nguyên tắc:
    • Kiểm tra file .gitlab-ci.yml bằng CI Lint trước khi commit.
    • Quản lý đầy đủ dependency thông qua requirements.txt, Pipfile, package.json hoặc các file tương ứng.
    • Chuẩn hóa phiên bản công cụ giữa môi trường local và GitLab Runner.
    • Build và test cục bộ trước khi đẩy mã nguồn.
    • Sử dụng Merge Request để code được review và chạy pipeline trên branch trước khi hợp nhất vào nhánh chính.
    Kết luận


    GitLab không chỉ là một Git Repository mà còn là một nền tảng DevOps tích hợp, nơi mã nguồn, pipeline và hạ tầng đều được quản lý dưới dạng mã (Code).

    Việc hiểu rõ cấu trúc của GitLab CI/CD, biết cách đọc log, kiểm tra file .gitlab-ci.yml, quản lý dependency và chuẩn hóa môi trường sẽ giúp DevOps Engineer và Developer xử lý sự cố nhanh hơn, đồng thời xây dựng các pipeline ổn định, dễ bảo trì và sẵn sàng mở rộng trong các dự án hiện đại.
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X