Tại Sao Cần Xây Dựng Git Workflow và Mô Hình Branching Hợp Lý?
Git workflow đóng vai trò như xương sống của một đội ngũ phát triển, mọi hoạt động liên quan đến quản lý mã nguồn đều gắn liền với git workflow và quy trình phát triển. Git chỉ là công cụ quản lý phiên bản mã nguồn, và không quy định cách thức vận hành của nhóm. Teamlead hoặc CTO cần xác định cách thức hoạt động của đội ngũ mình và mô hình các nhánh (branching model) để đáp ứng nhu cầu phát triển. Một git workflow hợp lý không chỉ giúp giảm thời gian quản lý mã nguồn mà còn hạn chế xung đột, từ đó tăng hiệu suất làm việc của đội ngũ.
Với sự phát triển của CI/CD, quy trình triển khai ứng dụng có thể tự động hóa ngay sau khi mã nguồn được hợp nhất vào nhánh chính và đồng bộ với môi trường cần thiết, đây thực sự là một bước tiến đáng kể so với phương pháp triển khai thủ công trước đây. Điều này yêu cầu ci/cd phải được thiết kế hợp lý cho các môi trường, mục đích và nhánh hiện có. Dưới đây là một số quy trình phát triển chính của đội ngũ:
- New Feature/Implement Task: Developer thực hiện các tác vụ trên nhánh độc lập, thường là trên môi trường local.
- Integration: Giai đoạn tích hợp, nơi các task được review và hợp nhất vào nhánh phát triển để tích hợp vào hệ thống. Tính năng sẽ chưa được nghiệm thu là CI deploy nếu không được tích hợp.
- Testing and Fixbug: Sau khi tích hợp, các thay đổi sẽ được chuyển sang môi trường kiểm thử để QA kiểm tra. Môi trường này cần được tách biệt và quản lý chặt chẽ.
- User Acceptance Testing - UAT: Code sau khi đã kiểm thử sẽ được chuyển sang nhánh UAT, như một môi trường gần gũi nhất với production.
- Release Production: Sau khi vượt qua giai đoạn UAT, code sẽ được lưu trữ và triển khai lên môi trường production.
Tuy nhiên, quá trình phát triển không bao giờ diễn ra một cách hoàn hảo. Thường xuyên xảy ra lỗi trên các môi trường khác nhau, và các developer cần phải nắm rõ cách thức xử lý các vấn đề mà không làm ảnh hưởng đến các giai đoạn hoặc sprint tiếp theo. Dưới đây là những vấn đề thường gặp trong phát triển cùng với giải pháp ứng phó:
Những Vấn Đề Thường Gặp Trong Quy Trình Phát Triển Git
1. Tương Thích Ngược (Backward Compatibility)
Trong một sprint, mọi thứ thường tiến triển dần dần theo thứ tự các nhánh. Tuy nhiên, từ giai đoạn kiểm thử trở đi, việc quản lý mã nguồn cần được thực hiện chặt chẽ vì các nhánh này tương ứng trực tiếp với các môi trường ứng dụng hoạt động. Nếu có lỗi phát sinh, việc sửa lỗi phải được đảm bảo trên môi trường tương ứng và tuyệt đối không làm ảnh hưởng đến các tính năng khác.
2. Kiểm Thử Nhiều Phiên Bản Code Trên Cùng Một Môi Trường
Việc chỉ có 2-3 môi trường phát triển có thể khiến developer cần kiểm thử nhiều tính năng khác nhau trên cùng một môi trường. Điều này đòi hỏi cần có kế hoạch triển khai tính năng riêng biệt mà không gây ra xung đột.
3. Gỡ Bỏ Tính Năng Khỏi Sprint
Không phải lúc nào các sprint cũng hoàn hảo. Khi các nhiệm vụ bị trì hoãn, việc bỏ qua một tính năng đã được hợp nhất vào môi trường Test hoặc UAT cần phải thực hiện theo nguyên tắc giảm thiểu tác động tới mã của các thành viên khác và các nhiệm vụ đã được QA kiểm thử.
4. Quản Lý Thiết Kế Mã Nguồn với Nhiều Repo hoặc Mono Repo
Tùy thuộc vào quy mô của hệ thống, việc quản lý mã nguồn có thể được thực hiện qua nhiều repository hoặc một repository duy nhất. Mỗi phương pháp đều có ưu và nhược điểm riêng, do đó cần xác lập rõ mô hình nào sẽ phù hợp với đội ngũ phát triển.
5. Quản Lý Phiên Bản Mã Nguồn Và Tag
Trong quy trình CI/CD, mỗi bản build cần có mã định danh (name + version). Việc xác định version/tag có thể giúp quản lý tốt hơn trong quá trình phát triển và phục vụ cho việc rollback khi cần thiết.
6. Quy Tắc Commit và Tích Hợp Git Với Các Ứng Dụng CI/CD Khác
Việc tuân thủ commit convention là cơ sở quan trọng để duy trì lịch sử thay đổi một cách rõ ràng. Một quy ước thống nhất sẽ giúp cho việc theo dõi và quản lý code dễ dàng hơn trong quy trình phát triển và CI/CD.
7. Xung Đột Do Định Dạng Code
Một số trường hợp, khi cùng một file mã nguồn mà nhiều người sử dụng các IDE khác nhau, việc định dạng code khác nhau có thể dẫn đến xung đột lớn khi merge. Cần có giải pháp đồng bộ hóa định dạng code giữa các IDE để giảm thiểu vấn đề này.
Các Giải Pháp Cho Git Workflow
Dựa trên những vấn đề đã đề cập, đội ngũ cần xác định một workflow hiệu quả để giảm thiểu xung đột và tăng cường sự hợp tác giữa các thành viên. Dưới đây là một vài git workflow thông dụng:
1. Centralized Workflow
Mọi người làm việc trên nhánh chính là chủ yếu. Mặc dù dễ quản lý, nhưng cách thức này có nhiều nhược điểm về sự hợp tác.
2. Feature Branching
Mỗi tính năng hoặc tác vụ sẽ có một nhánh riêng biệt, giúp giảm xung đột và ảnh hưởng lẫn nhau.
3. Gitflow Workflow
Luồng công việc này được xây dựng để phù hợp với các phase phát triển và có cả tiện ích hỗ trợ trong git.
4. Tùy Chỉnh Mô Hình Workflow
Từ việc tham khảo và tổng kết những vấn đề thường gặp, mỗi đội ngũ có thể xây dựng một mô hình git workflow riêng, phù hợp với nhu cầu phát triển của mình.
Kết Luận
Tổng kết lại, một git workflow hiệu quả là rất quan trọng trong việc nâng cao hiệu suất và quy trình phát triển ứng dụng. Hi vọng rằng bài viết này sẽ giúp ích cho bạn trong việc nắm vững git workflow và giải quyết những vấn đề liên quan đến git mà bạn có thể gặp phải. Trong bài viết tiếp theo, chúng tôi sẽ cùng nhau xây dựng workflow đáp ứng quy trình phát triển Agile và CI/CD một cách chi tiết hơn.
source: viblo