Cách tốt nhất để phiên bản một dự án nhiều thành phần


10

Tôi có một chương trình được xây dựng gồm 5 thành phần chính. Tôi thấy việc đánh số phiên bản tiêu chuẩn quá hạn chế vì tôi muốn xem mỗi phiên bản của mỗi thành phần.

Có ai tìm thấy một cách dễ dàng để làm điều này ngoài danh sách riêng biệt?


1
Có phải tất cả các thành phần được xây dựng cùng một lúc? Có phải chúng được "phát hành" cùng một lúc?
Adam Lear

1
@Anna Lear: không, các thành phần được xây dựng và phát hành vào các thời điểm khác nhau.
John Smith

Nếu chúng được phát hành độc lập, tôi sẽ coi chúng là những sản phẩm riêng biệt, mỗi sản phẩm có số phiên bản 'phát triển' của riêng chúng. Nếu sự kết hợp cũng được bán / phát hành dưới dạng một sản phẩm có thể có phiên bản 'thương mại'.
Kwebble

Mục tiêu của bạn khi tạo phiên bản là gì? Thông tin phiên bản đó được sử dụng để làm gì? Báo cáo lỗi? kiểm tra nâng cấp tuân thủ? cấp phép? Trả lời những câu hỏi này có thể trả lời câu hỏi gốc của bạn.
Alex Feinman

Câu trả lời:


7

Chúng tôi có cùng một vấn đề với sản phẩm của mình và chúng tôi đã quyết định tạo số phiên bản riêng cho từng thành phần và phiên bản sản phẩm chỉ là phiên bản tiếp thị bao gồm các thành phần khác nhau trong một phiên bản cụ thể.


2
Điều đó sẽ trông như thế nào trong hệ thống kiểm soát phiên bản của bạn? Bạn có "ghim" tất cả các dự án phụ khi bạn phát hành chính không?
Robert Harvey

Khi chúng tôi đang chuẩn bị một bản phát hành chính, tất cả các thành phần sẽ được xem xét và nếu chúng có thay đổi thì chúng sẽ nhận được một phiên bản cập nhật tại thời điểm đó. Phiên bản được gắn thẻ Kiln.
Dave Nay

3

Chúng tôi có "phiên bản phát hành hệ thống", là số phiên bản tiêu chuẩn mô tả một cấu hình cụ thể của các thành phần, sau đó một tệp riêng liệt kê các phiên bản thành phần riêng cho bản phát hành hệ thống cụ thể đó. Khách hàng nói 5.2.1 nhưng chúng tôi có thể tra cứu bản dựng riêng lẻ nếu cần thiết. Thông thường đối với một bản phát hành chính, chúng tôi đồng bộ hóa tất cả các phiên bản riêng lẻ để mọi thứ được xây dựng từ cùng một số chi nhánh.


1
Đây là những gì tôi đã suy nghĩ, nhưng làm thế nào để bạn quản lý điều này trong môi trường CI / CD? Giữ tài liệu đó có vẻ như là một PITA thực sự
Sina Architectural

1

Phiên bản là một vấn đề tách biệt với phát triển ứng dụng dựa trên thành phần. Bạn muốn phiên bản từng thành phần, hoặc bạn muốn phiên bản toàn bộ ứng dụng.

Một mô hình nổi tiếng để tạo phiên bản là từ Microsoft :

major version.minor version.build number.revision

Ví dụ: bạn có thể thấy các tệp DLL trong nền tảng .NET có các phiên bản như 2.0.3600.1 hoặc đại loại như thế.

Vì vậy, tôi khuyên bạn trước tiên nên xác định rằng bạn muốn phiên bản toàn bộ hệ thống hoặc các thành phần của nó. Nếu bạn muốn phiên bản toàn bộ hệ thống, sau mỗi lần tích hợp, hãy xây dựng toàn bộ dự án và tăng phần số bản dựng . Nếu không, thì chỉ cần phiên bản từng thành phần trên bản dựng.


Tôi không đồng ý với chiến lược số xây dựng của bạn. Số bản dựng thường thay đổi mỗi khi bạn xây dựng dự án cho một thành phần nhất định, do đó, nó sẽ không hoạt động.
Robert Harvey

@Robert, yeah, số bản dựng sẽ sớm trở thành một số tuyệt vời. Đó là lý do tại sao một số hệ thống khác không bao gồm nó. Bạn được tự do đi. Nhưng, cả phiên bản chính và phiên bản nhỏ đều thoát trong hầu hết mọi hệ thống phiên bản.
Saeed Neamati

Kiểu phiên bản này là để tương thích và không thực sự trả lời vấn đề.
Trang web thẩm mỹ

1

Hãy cẩn thận với phiên bản, nó có thể giết chết bạn :-) Đừng cố làm mọi thứ quá phức tạp.

Tôi nghĩ rằng cách tiếp cận sau đây có thể giúp bạn:

Phiên bản từng thành phần riêng lẻ với bất kỳ lược đồ phiên bản nào bạn muốn. Từ ý kiến ​​của bạn, tôi hiểu rằng bạn đã có một VCS. Tôi cũng giả sử rằng mỗi thành phần có một tệp mà phiên bản của nó được giữ (phải không?). Mỗi ngày một lần / tuần (tùy theo nhóm nào hoạt động tốt hơn) hãy thêm thẻ vào một trong những sửa đổi gần đây nhất trong VCS đánh dấu bản sửa đổi đó là bản sửa đổi chính thức mới nhất (và tùy chọn tăng số siêu sửa đổi). Bây giờ bạn có thể truy vấn VCS cho các sửa đổi với thẻ đó và sau đó tìm phiên bản của các thành phần trong bản dựng chính thức đó.

Nếu bạn chỉ muốn cục bộ, hãy viết một tập lệnh nhỏ sẽ tổng hợp phiên bản của từng thành phần từ nơi được lưu trữ trong mã.

Nếu bạn muốn làm cho nó thậm chí còn lạ hơn, khi bạn thực hiện gắn thẻ, bạn có thể xem các tệp thuộc từng thành phần, xem xét rằng bạn có thể xác định các tệp thuộc về một thành phần cụ thể. Nếu có thay đổi, hãy tăng phiên bản cho thành phần cụ thể đó. Thay thế là làm điều này bằng tay. Một cách khác là kết hợp phân nhánh và hợp nhất với theo dõi phiên bản.


1

Hầu hết các số phiên bản sử dụng một sửa đổi lớn và nhỏ được điều khiển bởi tiếp thị, vì vậy bạn không thể sử dụng các phiên bản để theo dõi các phiên bản thành phần riêng lẻ. Nói tóm lại, bạn cần tìm một số phần khác của phiên bản mà bạn có thể sử dụng để theo dõi các phiên bản của các thành phần riêng lẻ và dự trữ số phiên bản chính và phụ để theo dõi toàn bộ gói.

Nếu bạn đang theo dõi một cái gì đó giống với mẫu của Microsoft:

major-version.minor-version.build-number.revision

Bạn có thể sử dụng .revision để theo dõi từng phiên bản của từng thành phần và sử dụng các số sửa đổi nhỏ và chính để theo dõi thay đổi sản phẩm hoàn chỉnh, theo cách thông thường.

Nếu bạn đang theo một mô hình tương tự như thế này:

Major-Version.Minor-Version.Build-Number

Bạn sẽ phải sử dụng số bản dựng để theo dõi các phiên bản thành phần riêng lẻ.


0

Toàn bộ cuốn sách được viết về phần mềm phiên bản.

Đây là một cách tiếp cận mà tôi sử dụng.

Mỗi phần có một phiên bản dưới dạng:

Major.minor.developmental

Mỗi trong số này là một số, bắt đầu từ 0.

Đối với một bản phát hành chính thức (tức là cho khách hàng), phần phát triển phải luôn là 0 như một vấn đề của chính sách.

Chính được tăng lên bởi quyết định tiếp thị.

Nhỏ được tăng lên bởi các bộ tính năng được phát hành - ra thị trường.

Thí dụ:

  • Tôi bắt đầu phát triển trên một thành phần mới, vì vậy số phiên bản của tôi sẽ là 0.0.1. Khi tôi nhả bàn làm việc ra các đồng nghiệp của mình, ví dụ, để thử nghiệm nội bộ, số lượng phát triển lên tới 0.0.2, 0.0.3, v.v.

  • Tôi phát hành thứ mới này ra thị trường là 1.0.0, trong đó thay đổi được phép duy nhất từ ​​khi kết thúc phát triển sang phát hành là thay đổi số phiên bản (ví dụ: 0,0.43 -> 1.0.0).

  • Một số tính năng mới sẽ được thêm vào. Tôi bắt đầu làm việc trên đường cơ sở 1.0.0, thêm các tính năng này, vì vậy các phiên bản tôi phát hành cho các đồng nghiệp của mình để thử nghiệm là 1.0.1, 1.0.2, v.v.

  • Các tính năng tiếp theo được phát hành ra thị trường là 1.1.0.

  • Tiếp thị quyết định rằng điều lớn tiếp theo sẽ thực sự lớn, vì vậy nó sẽ ra mắt là 2.0.0. Tôi bắt đầu làm việc trên 1.1.1, tiến tới 1.1.x và phát hành thành 2.0.0.

Và thế là chu kỳ lặp lại.

Cách tiếp cận này, đối với mỗi thành phần, cung cấp cho bạn truy xuất nguồn gốc của tổ tiên.

Nội bộ đối với hệ thống quản lý sửa đổi nguồn (và đối tượng) của bạn, sử dụng các nhánh và thẻ (nhãn, bất kể thuật ngữ của bạn trong ngày là gì) để quản lý sự phát triển.

Kiểm soát sửa đổi của bạn sau đó có thể quản lý từng thành phần hoàn toàn riêng biệt, với các nhánh phát triển và nhãn / thẻ cho từng thành phần. Hoặc bạn có thể kết hợp tất cả chúng lại với nhau, trong trường hợp đó bạn có thể muốn phân nhánh theo gói công việc - nhưng hãy chắc chắn gắn nhãn / thẻ bằng cách phát hành từng thành phần (và khi bạn thực hiện, gắn nhãn / gắn thẻ mọi thứ, không chỉ các bit cho thành phần này. Bằng cách này bạn có một ảnh chụp nhanh về trạng thái của mọi thứ tại thời điểm đó.)

Có khả năng quá trình phát hành của bạn sẽ đòi hỏi suy nghĩ cẩn thận. Sử dụng phương pháp này bao gồm một số bước thủ công và điều này có thể là không mong muốn - tất cả phụ thuộc vào cách hệ thống xây dựng của bạn chọc các số phiên bản vào đối tượng cuối cùng. Đối với nhiều mã nhúng trong đó số phiên bản chỉ là số được đặt tên (ví dụ #d xác định trong mã C), bạn có rất ít sự lựa chọn ngoài việc thực hiện tất cả bằng tay bằng mọi cách. Các nền tảng máy tính để bàn với GUI đẹp thường làm cho tất cả thân thiện hơn nhiều.


Vì vậy, về cơ bản, bạn đang nói rằng, để tạo phiên bản cho các thành phần riêng lẻ, bạn tăng số thứ ba và để phiên bản toàn bộ hệ thống, bạn tăng số thứ nhất hoặc số thứ hai cho mỗi thành phần?
Robert Harvey

Làm từng thành phần riêng biệt như số phiên bản phát triển. Cuộn lên phần chính hoặc phụ với các bản phát hành sản phẩm đầy đủ có liên quan. LƯU Ý rằng điều này hoạt động hợp lý tốt cho phần mềm nhúng - Tôi sẽ suy nghĩ rất nhiều về điều này so với điều gì khác cho s / w dựa trên PC nơi bạn có thể gửi một loạt các DLL. Cách tiếp cận này cũng có một số nếp nhăn cho những thứ như PC-s / w nơi bạn có thể muốn xác định và gửi gói dịch vụ.
quick_now

Thật thú vị khi những người gõ cửa hạ thấp điều này mà không nói vấn đề là gì, hoặc gợi ý điều gì đó tốt hơn.
quick_now

0

Tóm lược

Đối với tôi, cách đáng tin cậy duy nhất cho phần mềm phiên bản là sử dụng định danh băm hoặc thay đổi từ hệ thống kiểm soát phiên bản của bạn.

Số phiên bản bản dựng tổng thể có thể hữu ích, nhưng nó chỉ thực sự được đảm bảo là duy nhất nếu bạn có máy chủ bản dựng và / hoặc bạn ký mỗi bản phát hành. Đối với nhiều người trong chúng ta, điều này chỉ đơn giản là không khả thi.

Nếu dự án của bạn được chia thành nhiều kho kiểm soát phiên bản, bạn cũng sẽ cần xây dựng một cơ chế theo đó giao diện người dùng của bạn có thể truy vấn từng kho lưu trữ phụ thuộc và báo cáo lại băm cho người dùng.

Ví dụ từ kinh nghiệm cá nhân

Trong một dự án tại một công ty trước đây, nơi chúng tôi gặp vấn đề với phần mềm sửa đổi khách hàng (nội bộ) của chúng tôi và biên dịch lại nó, tôi đã thiết lập một quy trình theo đó các giá trị băm được biên dịch vào mỗi ứng dụng và thư viện. Bất cứ khi nào phần mềm được khởi động, một chuỗi sửa đổi đã được xây dựng bằng cách truy vấn tất cả các thành phần phần mềm.

Chuỗi sửa đổi này được hiển thị khi bạn đi đến trang giới thiệu và được ghi vào tệp nhật ký mỗi khi ứng dụng được khởi động. Đó là hình thức:

Application name     (6a72e7c61f54)
    Library1         (b672a13a41e1)
        Library2     (9cc35769b23a)
    Library2         (9cc35769b23a)
    Library3         (4e9f56a0186a+)
        Library2     (9cc35769b23a)
    Library4         (2e3b08c4ac76)
        Library1     (b672a13a41e1)
            Library2 (9cc35769b23a)

Từ điều này tôi có thể dễ dàng thấy rằng họ đã sửa đổi Library3 và đã không thực hiện những thay đổi đó đối với kho lưu trữ, vì vậy họ đang sử dụng mã không được kiểm soát. Tôi cũng có thể so sánh các giá trị băm với hệ thống kiểm tra hiện tại của mình, do đó tôi có thể xác định rằng chúng đã hoàn nguyên (giả sử) Library1 với phiên bản cũ hơn.

Điều này có nghĩa là bất cứ khi nào họ báo cáo lỗi, tôi luôn có thể xây dựng lại chính xác mã đang sử dụng tại thời điểm xảy ra sự cố hoặc ít nhất biết chắc chắn rằng tôi không thể sao chép thiết lập.

Để biết thêm chi tiết về hệ thống xây dựng mà tôi đã sử dụng, cách tôi hoàn thành việc này, tôi gặp phải vấn đề gì và những gì mọi người đề xuất để tránh chúng, hãy xem câu hỏi về Stack Overflow của tôi .

Lưu ý: Hệ thống này chỉ thực sự khả thi nếu bạn sử dụng hệ thống kiểm soát sửa đổi trong đó hàm băm nhất định được đảm bảo dẫn đến cùng một tập tin trong thư mục làm việc của bạn (ví dụ: git và mercurial) nếu một thư mục làm việc nhất định có thể chứa hỗn hợp các tệp và các thư mục từ một số sửa đổi (ví dụ: svn) sau đó tất cả các cược được tắt liên quan đến trạng thái của thư mục làm việc và phương pháp này hoàn toàn không hoạt động.

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.