GitLab — kiến thức cơ bản, tính năng và CI/CD

Tác giả: IT Sectr Đã đăng: 2026-05-09 Thời gian đọc: 8 phút

GitLab — là nền tảng DevOps mã nguồn mở kết hợp kho Git, CI/CD tích hợp, registry container và các công cụ bảo mật trong một ứng dụng duy nhất. Được thành lập vào năm 2011 bởi Sid Sijbrandij và Dmitriy Zaporozhets, nền tảng cung cấp cả dịch vụ đám mây (GitLab.com) và phiên bản tự quản lý (Self-Managed) cho môi trường doanh nghiệp. Theo GitLab, 2024, nền tảng được hơn 30 triệu người dùng đã đăng ký sử dụng.

Điểm chính

  • GitLab — nền tảng DevOps thống nhất với Git, CI/CD, registry và bảo mật có sẵn.
  • GitLab CI/CD sử dụng cấu hình YAML trong .gitlab-ci.yml để mô tả pipeline.
  • Self-Managed — khả năng cài đặt GitLab trên máy chủ riêng không giới hạn runner.
  • Container Registry tích hợp và Dependency Proxy tăng tốc xây dựng ứng dụng container.
  • Security Scanning bao gồm SAST, DAST, quét container và quét phụ thuộc.

GitLab là gì?

GitLab — là nền tảng DevOps mã nguồn mở đầy đủ tính năng theo giấy phép MIT. Không giống GitHub kết hợp nhiều dịch vụ thông qua tích hợp, GitLab cung cấp một công cụ duy nhất cho toàn bộ vòng đời phát triển: từ quản lý mã và đánh giá mã đến CI/CD, giám sát, bảo mật và triển khai. Nền tảng không yêu cầu dịch vụ bên thứ ba cho hầu hết các tác vụ DevOps.

Lịch sử của GitLab bắt đầu vào năm 2011 như một dự án nội bộ của các nhà phát triển Ukraine. Phiên bản công khai đầu tiên ra mắt vào tháng 9 năm 2011, và năm 2015 GitLab trở thành dự án đầu tiên trên GitLab.com, ra mắt dịch vụ lưu trữ đám mây. Năm 2017, GitLab đã thực hiện một quá trình di chuyển đau đớn nhưng đầy bài học — chuyển toàn bộ cơ sở hạ tầng từ Azure sang Google Cloud, được thực hiện trực tiếp và ghi lại trong một loạt bài viết trên blog.

Kiến trúc của GitLab gồm ba thành phần chính: GitLab Rails (ứng dụng web trên Ruby on Rails), GitLab Shell (xử lý thao tác Git qua SSH) và Gitaly (máy chủ gRPC để truy cập dữ liệu Git). CI/CD được cung cấp qua GitLab Runner — một ứng dụng riêng biệt cài đặt trên máy chủ build và thực thi các tác vụ trong môi trường cô lập (Docker, Kubernetes, VirtualBox).

GitLab CI/CD: pipeline và runner

GitLab CI/CD — là hệ thống tích hợp và phân phối liên tục tích hợp sẵn, một lợi thế chính của nền tảng. Không giống GitHub Actions, GitLab CI/CD được xây dựng trong kiến trúc ngay từ đầu và không yêu cầu cấu hình riêng: mọi dự án tự động có CI/CD sau khi thêm tệp .gitlab-ci.yml vào thư mục gốc của kho lưu trữ.

Pipeline bao gồm các giai đoạn chạy tuần tự hoặc song song: build → test → deploy. Mỗi giai đoạn chứa một hoặc nhiều tác vụ chạy trên runner. Nếu một tác vụ trong giai đoạn thất bại, toàn bộ giai đoạn bị đánh dấu thất bại và các giai đoạn tiếp theo không chạy theo mặc định. Dưới đây là ví dụ pipeline cho dự án di động:

yaml
# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy

build-android:
  stage: build
  image: openjdk:17-jdk
  script:
    - ./gradlew assembleDebug
  artifacts:
    paths:
      - app/build/outputs/

unit-tests:
  stage: test
  script:
    - ./gradlew testDebugUnitTest

deploy-firebase:
  stage: deploy
  script:
    - firebase appdistribution:distribute app.apk

GitLab Runner hỗ trợ nhiều trình thực thi: Docker (khuyến nghị), Kubernetes, SSH, VirtualBox và Parallels. Lựa chọn phổ biến nhất là trình thực thi Docker, chạy mỗi tác vụ trong một container riêng. Runner có thể được đăng ký dành riêng cho một dự án hoặc dùng chung (shared) cho toàn bộ nhóm. GitLab.com cung cấp runner dùng chung miễn phí với giới hạn 2000 phút mỗi tháng.

Tính năng CI/CD nâng cao

GitLab CI/CD hỗ trợ kích hoạt thủ công (when: manual), kích hoạt trì hoãn (when: delayed), thực thi song song (parallel: 5), ma trận, pipeline động (child pipelines) và pipeline đa cấp (parent-child). Điều này cho phép xây dựng các kịch bản phức tạp: ví dụ, tự động tạo pipeline cho mỗi mô-đun trong monorepo hoặc chạy build song song cho các kiến trúc Android khác nhau (arm64, x86_64).

GitLab so với GitHub: khác biệt chính

GitLab và GitHub — là hai đối thủ cạnh tranh chính trên thị trường nền tảng Git, nhưng triết lý và kiến trúc của chúng khác nhau cơ bản. GitHub tập trung vào cộng đồng mở, hệ sinh thái tích hợp và các tính năng xã hội (fork, sao). GitLab tập trung vào chu trình DevOps toàn diện và cung cấp mọi công cụ có sẵn: từ lập kế hoạch đến giám sát.

Sự khác biệt kiến trúc chính: GitLab — là một ứng dụng nguyên khối duy nhất mà nhà phát triển cài đặt toàn bộ. Tất cả tính năng (CI/CD, Container Registry, Security Scanning, Pages) đều được tích hợp và hoạt động ngay sau khi cài đặt. GitHub là nền tảng có API nơi hầu hết tính năng được triển khai qua tích hợp với dịch vụ bên thứ ba: Travis CI, CircleCI, Jenkins, SonarQube. Bảng dưới đây so sánh các đặc điểm chính:

Tiêu chíGitLabGitHub
CI/CDTích hợp sẵn, YAML trong .gitlab-ci.ymlActions, YAML trong .github/workflows
Self-HostedMiễn phí (Community Edition)Trả phí (Enterprise Server)
Giấy phépMIT (mã nguồn mở)Độc quyền
RegistryContainer + Dependency ProxyPackages (container + gói)
Bảo mậtSAST, DAST, Fuzzing, Container ScanningDependabot + CodeQL (giới hạn)

Lựa chọn giữa GitLabGitHub phụ thuộc vào nhu cầu của nhóm. Nếu ưu tiên là triển khai nhanh không cấu hình và cộng đồng mở — hãy chọn GitHub. Nếu bạn cần kiểm soát hoàn toàn cơ sở hạ tầng, tự lưu trữ và bảo mật tích hợp — GitLab là lựa chọn tốt hơn. Theo khảo sát Stack Overflow (2024), 90% nhà phát triển sử dụng GitHub, 33% sử dụng GitLab (thường cả hai nền tảng cùng lúc).

Self-Managed GitLab: cài đặt trên máy chủ riêng

Self-Managed GitLab (trước đây là On-Premises) cho phép cài đặt nền tảng trên máy chủ riêng và kiểm soát hoàn toàn dữ liệu, cơ sở hạ tầng và thời gian hoạt động. Điều này đặc biệt quan trọng đối với tổ chức có yêu cầu tuân thủ: lĩnh vực tài chính, cơ quan chính phủ, tổ chức y tế nơi dữ liệu không thể lưu trữ trên máy chủ bên thứ ba.

Việc cài đặt GitLab được hỗ trợ trên Ubuntu, Debian, CentOS và qua Docker. Gói Omnibus chính thức bao gồm tất cả thành phần: máy chủ web (NGINX), cơ sở dữ liệu (PostgreSQL), bộ nhớ đệm (Redis), trình xử lý Git (Gitaly) và các tiến trình nền. Yêu cầu tối thiểu: 4 GB RAM và 2 CPU cho nhóm tối đa 100 người. Đối với cài đặt lớn có tải cao, nên phân tách các thành phần trên các máy chủ riêng biệt.

bash
# Cài đặt GitLab CE trên Ubuntu qua Omnibus
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
sudo bash script.deb.sh

# Cài đặt gói
sudo EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ce

# Xem trạng thái
sudo gitlab-ctl status
sudo gitlab-ctl tail

Self-Managed GitLab không có giới hạn phút CI/CD — tất cả runner thuộc về tổ chức và sức mạnh của chúng chỉ bị giới hạn bởi phần cứng của bạn. Cũng có sẵn Sao chép địa lý cho các khu vực, nhật ký kiểm toán, chặn IP và tích hợp với nhà cung cấp LDAP/SAML doanh nghiệp. GitLab phát hành bản cập nhật mỗi tháng (ngày 22) với tính năng mới và bản vá bảo mật.

Công cụ bảo mật tích hợp của GitLab

Bảo mật trong GitLab được tích hợp ở cấp nền tảng và bao gồm nhiều trình quét hoạt động ở mọi giai đoạn pipeline. SAST (Static Application Security Testing) phân tích mã nguồn để tìm lỗ hổng mà không chạy ứng dụng, hỗ trợ hơn 15 ngôn ngữ bao gồm Java, Kotlin, Swift, Python và JavaScript. DAST (Dynamic Application Security Testing) kiểm tra ứng dụng web đang chạy để tìm lỗ hổng từ bên trong.

Công cụ bổ sung: Container Scanning kiểm tra hình ảnh Docker để tìm lỗ hổng trong các lớp cơ bản; Dependency Scanning phân tích phụ thuộc dự án và cảnh báo về CVE đã biết; Secret Detection tìm khóa API, mật khẩu và token bị commit nhầm; Fuzz Testing thực hiện kiểm thử tự động với dữ liệu không hợp lệ để tìm lỗi không rõ ràng. Tất cả kết quả quét được hiển thị trong Bảng điều khiển bảo mật thống nhất.

GitLab cũng cung cấp Tuân thủ — công cụ đáp ứng yêu cầu quy định. Bảng điều khiển tuân thủ hiển thị trạng thái tuân thủ của tất cả dự án, Sự kiện kiểm toán ghi lại mọi hành động của quản trị viên và nhà phát triển, và Khung tuân thủ cho phép áp dụng bắt buộc chính sách cấu hình cho các nhóm dự án cụ thể. Điều này làm cho GitLab trở thành lựa chọn phổ biến trong môi trường doanh nghiệp có yêu cầu bảo mật nghiêm ngặt.

Container Registry và Dependency Proxy

GitLab Container Registry — là registry Docker tích hợp sẵn với CI/CD. Sau khi xây dựng hình ảnh Docker trong pipeline, nó có thể được đăng ngay lập tức lên Registry bằng biến môi trường CI_REGISTRYCI_REGISTRY_USER. Registry hỗ trợ bộ nhớ đệm pull-through, gắn thẻ, chính sách dọn dẹp và quét lỗ hổng trực tiếp trong registry.

Dependency Proxy — cơ chế lưu đệm cho container và hình ảnh từ registry bên ngoài (Docker Hub, Quay, GCR). Khi pipeline yêu cầu hình ảnh như ubuntu:latest, GitLab đầu tiên kiểm tra bộ nhớ đệm — nếu hình ảnh đã được tải xuống, nó sẽ không được tải lại. Điều này giảm tải cho registry bên ngoài, tăng tốc pipeline và bảo vệ khỏi giới hạn tốc độ của Docker Hub.

Đối với nhà phát triển di động, GitLab cung cấp GitLab Pages để lưu trữ tài liệu và báo cáo kiểm thử. Sau khi chạy kiểm thử, các tạo phẩm (báo cáo HTML, ảnh chụp màn hình, nhật ký) có thể được đăng dưới dạng Pages và chia sẻ liên kết với nhóm QA. Điều này thuận tiện hơn so với tải báo cáo lên lưu trữ đám mây vì mọi thứ nằm trong cùng một dự án GitLab.

API GitLab và Webhook

API GitLab (REST và GraphQL) cung cấp quyền truy cập vào tất cả tài nguyên nền tảng: dự án, người dùng, pipeline, Merge Request, registry. API được sử dụng để tự động hóa: tạo dự án từ mẫu, chỉ định người đánh giá, lấy trạng thái pipeline. Webhook cho phép gửi thông báo HTTP đến hệ thống bên ngoài khi có sự kiện: push, merge, tạo Issue. Webhook tích hợp với Mattermost, Slack, Telegram và hệ thống giám sát nội bộ.

GitLab Pages cho tài liệu di động

GitLab Pages tự động đăng trang web tĩnh từ kho lưu trữ. Đối với dự án di động, Pages tiện lợi để lưu trữ tài liệu API, báo cáo độ phủ kiểm thử và kết quả phân tích lint. Việc đăng tải diễn ra tự động sau pipeline thành công — chỉ cần thêm bước triển khai với đăng lên Pages. Kết quả có sẵn tại https://namespace.gitlab.io/project-name.

Câu hỏi thường gặp

GitLab là gì một cách đơn giản?

GitLab — là chương trình lưu trữ mã và tự động hóa xây dựng. Nhà phát triển tải mã lên, GitLab kiểm tra, xây dựng ứng dụng và gửi lên máy chủ tự động.

GitLab miễn phí hay trả phí?

GitLab CE (Community Edition) hoàn toàn miễn phí với mã nguồn mở. GitLab EE (Enterprise Edition) có gói trả phí từ $19 mỗi người dùng mỗi tháng với các tính năng bảo mật bổ sung.

GitLab Runner khác gì với pipeline?

Runner — là tác nhân thực thi các tác vụ. Pipeline — là chuỗi các tác vụ được mô tả trong .gitlab-ci.yml. Runner chạy mã trên máy chủ, trong khi pipeline xác định chạy cái gì và theo thứ tự nào.

Có thể di chuyển kho lưu trữ từ GitHub sang GitLab không?

Có, GitLab cung cấp công cụ nhập tích hợp từ GitHub, Bitbucket và các nền tảng khác. Quá trình nhập chuyển mã, commit, nhánh, Issues, Wiki và Pull Request với bảo toàn lịch sử tối đa.

Làm thế nào để thiết lập GitLab CI cho dự án iOS?

Đối với iOS, cần runner macOS (Mac vật lý hoặc Mac trên đám mây). Pipeline bao gồm cài đặt Xcode, chạy xcodebuild để xây dựng, thực thi kiểm thử và xuất tệp .ipa cho TestFlight.

Tổng kết

  • GitLab — nền tảng DevOps thống nhất mã nguồn mở kết hợp Git, CI/CD, bảo mật và registry.
  • GitLab CI/CD mô tả pipeline trong .gitlab-ci.yml hỗ trợ Docker, Kubernetes và build ma trận.
  • Self-Managed cho phép cài đặt GitLab trên máy chủ riêng không giới hạn phút hay người dùng.
  • Công cụ bảo mật tích hợp bao gồm SAST, DAST, Dependency Scanning và Secret Detection.
  • Container RegistryDependency Proxy tăng tốc build và giảm tải registry bên ngoài.
  • GitLab tốt hơn GitHub cho tổ chức cần kiểm soát hoàn toàn cơ sở hạ tầng và dữ liệu.
  • Bắt đầu bằng cách tạo dự án trên GitLab.com và thêm .gitlab-ci.yml — thiết lập cơ bản mất chưa đầy một giờ.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm