Chia sẻ các phần của một monorepo


12

Chúng tôi hiện có một hệ thống xây dựng phức tạp và không hiệu quả, bao gồm nhiều repos SVN và Git (mỗi loại khoảng 50%), bao gồm một hệ thống là một mô đun con git repo. Chúng tôi cũng có các kịch bản tự chế quản lý tốt hơn hoặc ít hơn toàn bộ.
Một điểm chính của cơ sở mã (nguồn đóng) của chúng tôi là nó được liên kết chặt chẽ và mọi dự án được phát hành cùng một lúc trong cùng một phiên bản.

Chúng tôi muốn di chuyển hệ thống này sang một hệ thống đơn giản hơn và một VCS duy nhất và đang xem xét một số tùy chọn, bao gồm: mô đun con git, Google Repo và monorepose. VCS cuối cùng chưa được xác định (ngoại trừ các tùy chọn bắt buộc) và có thể là svn, git hoặc thậm chí một cái gì đó khác nếu điều đó phù hợp với tình huống của chúng tôi hơn.

Chúng tôi đang cố gắng liệt kê các điểm cộng và trừ của từng giải pháp và một trong những vấn đề chính mà chúng tôi hiện đang gặp phải với vấn đề đơn lẻ là nó có vẻ không dễ dàng, hoặc thậm chí có thể chỉ chia sẻ một số mô-đun cho một thực thể bên ngoài. Chúng tôi muốn những người đó có thể kiểm tra và hoạt động bình thường trên các mô-đun đó, nhưng không thể truy cập mã hoặc lịch sử của phần còn lại của repo. Đó không phải là thứ chúng tôi làm thường xuyên hoặc rộng rãi vào lúc này, nhưng chúng tôi có thể trong tương lai và chúng tôi không muốn điều này trở thành cơn ác mộng bởi vì chúng tôi đã đưa ra một quyết định tồi tệ ở đây.

Hệ thống quản lý đặc quyền như vậy có tồn tại trong hệ thống VCS không?
Hoặc có cách nào để giảm thiểu vấn đề này?


Bạn sẽ xem xét Team Foundation Server hoặc Service? Nó có hỗ trợ cho Git và bao gồm một số quy trình công việc tốt và Khả năng tích hợp liên tục
hanzolo

Mà chính xác là thực hiện monorepo bạn đang xem xét?
Dan Cornilescu

Câu trả lời:


3

Từ mô tả của bạn, tôi nghĩ rằng bạn có một vài lựa chọn ở đây:

  1. Sử dụng các mô hình con git - với một dịch vụ như GitHub (hoặc bất cứ thứ gì khác), bạn có thể quản lý các quyền theo từng dự án và tách rời quá trình triển khai của bạn. Tuy nhiên, tôi đã nghe nói rằng các mô đun con git cuối cùng là một nỗi đau rất lớn. Các tập lệnh tự động để sắp xếp lại / tải lại sạch các mô hình con git của bạn có thể giúp đỡ ở đây.
  2. Phá vỡ repo của bạn thành các dịch vụ độc lập. Điều này cho phép bạn phát triển đồng thời, nhưng cũng gây ra nỗi đau lớn khi bạn cần bắt đầu suy nghĩ về khám phá dịch vụ, triển khai nhiều dịch vụ, môi trường phát triển, tích hợp / triển khai liên tục và tất cả những niềm vui nhỏ khác đến từ việc quản lý kiến trúc microservice.
  3. Sử dụng một hệ thống quản lý gói chính thức như pip cho Python, npm cho Node.js, Maven cho Java, v.v. Triển khai các đoạn mã bạn cần vào kho lưu trữ và sử dụng chúng trong repo chính của bạn khi cần, sẽ cung cấp cho bạn khả năng để phiên bản chúng. Tùy thuộc vào khớp nối giữa các mô-đun của bạn và repo chính của bạn, bạn có thể không thực sự trích xuất, chạy hoặc kiểm tra các mô-đun cấp thấp hơn một cách độc lập. Tuy nhiên, nếu bạn có thể , đây là một cách khá hay để sử dụng tốt với nhiều kho lưu trữ trong khi vẫn có thể tích hợp các gói của bạn trong thời gian xây dựng bằng cách cài đặt chúng từ kho lưu trữ từ xa.

Thật không may, không có tùy chọn nào trong số này là hoàn hảo, nhưng chúng đều hợp lệ tùy thuộc vào trạng thái của cơ sở mã của bạn. Mô tả của bạn có vẻ như tùy chọn 3 có thể hoạt động tốt nhất ở đây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.