SỬ DỤNG GIT, GITHUB VÀ GIT FLOW TRONG QUY TRÌNH CI/CD

Trong hệ thống triển khai phần mềm hiện đại, việc tổ chức mã nguồn và quy trình phát triển thông qua Git không chỉ là yếu tố kỹ thuật, mà còn là nền tảng cho việc tự động hoá kiểm thử và triển khai. Để áp dụng được tích hợp liên tục (Continuous Integration) và chuyển giao liên tục (Continuous Delivery), mã nguồn phải được quản lý có hệ thống, cấu trúc phân nhánh rõ ràng, và tích hợp với nền tảng như GitHub để kích hoạt các quy trình tự động.

Bài học này trình bày cách sử dụng Git để tổ chức quy trình phát triển phần mềm, giới thiệu mô hình nhánh Git Flow, và phân tích vai trò của GitHub trong việc tích hợp với pipeline CI/CD.


1. Git là nền tảng kiểm soát phiên bản phân tán

Git là hệ thống quản lý phiên bản phân tán, cho phép nhiều nhà phát triển làm việc đồng thời trên cùng một mã nguồn mà không gây xung đột. Các thay đổi được ghi nhận thành từng phiên bản (commit), có thể được đồng bộ với kho lưu trữ từ xa như GitHub hoặc GitLab.

Trong bối cảnh CI/CD, mỗi thao tác pushpull request, hoặc merge đều có thể được sử dụng làm tín hiệu kích hoạt (trigger) cho pipeline tự động, ví dụ kiểm thử mã, đóng gói hoặc triển khai.

Một số lệnh Git cơ bản cần nắm:

git clone <repository>         # Tải mã nguồn từ GitHub về máy cục bộ
git branch <tên_nhánh>         # Tạo nhánh mới
git checkout <tên_nhánh>       # Chuyển sang nhánh khác
git add . && git commit -m ""  # Ghi nhận thay đổi
git push origin <tên_nhánh>    # Đẩy mã lên kho lưu trữ từ xa

2. GitHub và vai trò trong hệ thống CI/CD

GitHub là nền tảng lưu trữ mã nguồn phổ biến nhất hiện nay, cung cấp hệ thống quản lý kho lưu trữ, nhánh, pull request và tích hợp CI/CD thông qua GitHub Actions.

Với GitHub, mỗi lần tạo pull request, mở nhánh mới, hoặc đẩy mã nguồn lên kho lưu trữ đều có thể được sử dụng để kích hoạt quy trình kiểm thử, build hoặc triển khai ứng dụng.

Một số chức năng quan trọng của GitHub trong quy trình CI/CD:

  • Quản lý pull request: cho phép kiểm thử tự động trước khi hợp nhất mã
  • Bảo vệ nhánh chính: ngăn thay đổi trực tiếp vào main mà không qua kiểm thử
  • Tích hợp GitHub Actions: khai báo workflow tự động hóa quy trình test/build/deploy

Ví dụ: khi lập trình viên đẩy mã lên nhánh feature/login, GitHub có thể tự động chạy pipeline kiểm thử trên nhánh đó trước khi cho phép merge vào nhánh chính.


3. Mô hình phân nhánh Git Flow trong triển khai tự động

Git Flow là chiến lược phân nhánh phổ biến được sử dụng để tổ chức quy trình phát triển phần mềm có tích hợp CI/CD. Mục tiêu là đảm bảo mã trên nhánh chính luôn ở trạng thái triển khai được, đồng thời cho phép phát triển tính năng mới hoặc sửa lỗi một cách tách biệt.

Cấu trúc Git Flow gồm các nhánh chính:

  • main hoặc master: chứa mã nguồn ổn định, luôn trong trạng thái sẵn sàng triển khai
  • develop: nơi tích hợp các tính năng mới trước khi hợp nhất vào main
  • feature/*: mỗi nhánh con dùng để phát triển một tính năng riêng biệt
  • hotfix/*: nhánh xử lý lỗi khẩn cấp trực tiếp từ main
  • release/*: chuẩn bị phiên bản phát hành chính thức

Quy trình sử dụng:

  1. Tạo nhánh mới từ develop để phát triển tính năng:git checkout develop git checkout -b feature/login
  2. Sau khi hoàn thành, gửi pull request từ feature/login vào develop. Tại đây CI sẽ tự động chạy test.
  3. Khi tích hợp nhiều tính năng vào develop và kiểm thử ổn định, có thể tạo nhánh release/v1.0 từ develop, chạy kiểm thử cuối cùng, và merge vào main.
  4. Nếu có lỗi khẩn cấp trên main, có thể tạo nhánh hotfix, sửa lỗi và merge ngược lại vào cả main và develop.

Mô hình này phù hợp với dự án lớn, có nhiều lập trình viên và quy trình phát hành định kỳ. Tuy nhiên, trong các dự án nhỏ hoặc sản phẩm triển khai nhanh, có thể sử dụng mô hình đơn giản hơn như “trunk-based development”, nơi mọi thay đổi được kiểm thử và triển khai trực tiếp từ một nhánh chính duy nhất.


4. Trigger CI/CD từ nhánh và Pull Request

Một ưu điểm lớn của việc tổ chức nhánh theo Git Flow là có thể sử dụng từng loại nhánh làm điều kiện kích hoạt các bước khác nhau trong pipeline CI/CD. Ví dụ:

  • Khi đẩy mã lên feature/*: chỉ chạy kiểm thử đơn vị
  • Khi mở pull request từ develop vào main: chạy kiểm thử và kiểm tra build
  • Khi merge vào main: thực hiện triển khai production

Ví dụ khai báo điều kiện trigger trong GitHub Actions:

on:
  push:
    branches:
      - "feature/*"
      - "develop"
      - "main"
  pull_request:
    branches:
      - "main"

Việc kiểm soát trigger theo nhánh giúp tăng tính linh hoạt và chính xác trong triển khai, hạn chế lỗi và đảm bảo quy trình an toàn.


5. Tổ chức team làm việc với Git và CI/CD

Để vận hành hiệu quả, nhóm phát triển phần mềm cần đồng thuận về quy ước phân nhánh, quy trình pull request và chuẩn hóa cách đặt tên nhánh, ví dụ:

  • feature/authentication-api
  • bugfix/null-pointer-exception
  • release/v2.3.0
  • hotfix/critical-403-error

Mỗi nhóm cần sử dụng hệ thống kiểm thử tự động trong pull request, và không merge tay vào main mà không thông qua kiểm thử.


Tổng kết

Sử dụng Git, GitHub và mô hình Git Flow không chỉ giúp quản lý mã nguồn hiệu quả mà còn là nền tảng vững chắc để triển khai tích hợp liên tục và chuyển giao liên tục. Với cấu trúc nhánh hợp lý và trigger rõ ràng, pipeline CI/CD có thể tự động kiểm thử, build và triển khai một cách an toàn, kiểm soát và mở rộng được.