Avatar
0
tvd12 Enlightened
tvd12 Enlightened
Best practice cho project chỉ có 2 branch là staging với prod
Hi anh,

Anh có best practice cho project chỉ có 2 branch là staging với prod ko, vấn đề em gặp phải là:

  • Khi fix bug hay code 1 feature mới thì mọi người sẽ checkout từ prod và tiến hành dev- Khi xong -> merge vào staging để test -> test oke sau khi được approval thì sẽ merge vào prod
  • Nhiều feature hoặc bug sẽ không được approval liền (kéo dài 2-3 tuần hoặc 1 tháng) và nhiều cái feature sẽ cần lên prod gấp=> branch staging hiện giờ rất nhiều feature hoặc function đang test, đang đợi approval, hoặc bị cancel
  • nhiều feature được approval lên prod thì toàn phải coppy code qua branch khác rồi merge prod (lúc trước em hay làm), bây giờ thì em checkout 1từ prod dev,ví dụ feature/fnc-1, sau khi xong thì em tạo nhánh mới feature/fnc-1-staging từ feature/fnc-1 rồi merge staging, khi được approval rồi thì em merge feature/fnc-1 vào prod

Nhưng mà mỗi lần test trên staging lẫn lộn nhiều code nên ko chắc chắn là trên prod ko có bug, Anh có solutions nào cho vấn đề này ko ạ.

  • Answer
git
Remain: 5
1 Answer
Avatar
tvd12 Enlightened
tvd12 Enlightened
  1. Đầu tiên phải nói việc quản lý các branch ở git thật không hề đơn giản.
  2. Anh đã từng dùng cách của em và thất bại, các vấn đề gặp phải cũng y như em, khi có quá nhiều branch sẽ cực kỳ rối, đặc biệt khi merge từ staging vào master thì PR nó rất lớn, không review dược.
  3. Các làm của anh hiện tại như sau, em có thể tham khảo cách làm này xem sao nhé.

Cách 1 (thường dùng cho deploy tự động): Tư tưởng chủ đạo là mọi thứ sẽ được merge vào master ngay.

  • Anh chỉ có một branch master và tất cả các code sẽ được merge vào đây thông qua PR, khi đã được merge thì code phải đảm bảo là đã được test (UT, IT) rồi, có thể chuyển sang cho QA test và release được ngay nếu cần.
  • Khi merge PR vào master thì sẽ có CI/CD deploy tự động lên Alpha, với BETA thì deploy bằng tay qua jenkins, với PROD thì deploy bởi DevOps.
  • Khi muốn deploy PROD thì sẽ tạo tag, khi có bug thì tách branch từ tag để fix, fix xong thì lại merge vào master.

Cách 2 (thường dùng cho deploy bằng tay): Tư tưởng chủ đạo là sẽ tạo 1 branch cho mỗi phiên bản và sẽ merge vào master sau khi release.

  • Cứ mỗi một phiên bản anh lại tạo ra một brand release, mọi PR cho phiên bản đó sẽ được merge vào branch này.
  • Khi có hotfix ở phiên bản cũ thì tách nhánh từ master, sau khi fix xong thì merge vào master để tạo tag release và merge master vào branch cho phiên bản mới.
  • Khi nào cẩn release alpha, beta thì sẽ dụng Jenkins.
  • Khi nào cần release PROD thì sẽ tạo tag và vẫn dùng Jenkins để release.
  • Khi đã release xong thì merge tất cả vào master.
  • 0
  • Reply