2009-07-31 27 views
10

Tôi muốn nhận được một số ý kiến ​​phản hồi về ý tưởng này, vì tôi có thể thấy được ưu và khuyết điểm của mỗi cách tiếp cận. Là một nhà phát triển Java, điều này sẽ là lưu trữ các tệp jar trong kho lưu trữ mã, nhưng nó có thể dễ dàng mở rộng sang các ngôn ngữ được biên dịch khác.Bạn có đặt các bản dựng trong kho lưu trữ mã nguồn không?

Ưu điểm:

  • có thể dễ dàng lấy các bản phân phối trước đó, mà không cần phải phụ thuộc vào (potientially không còn có sẵn) ra khỏi các công cụ ngày để biên dịch lại.

Nhược điểm:

  • có thể nhanh chóng "phình" kho mã, tùy thuộc vào tần số của xây dựng.
+1

Có, chắc chắn sẽ bloat kho lưu trữ của bạn. IMO, kho lưu trữ nguồn chỉ là - cho ** nguồn ** thuộc bất kỳ loại nào, nhưng ** không ** cho đầu ra của các bản dựng cuối cùng. Nhưng đó chỉ là ý kiến ​​của tôi –

Trả lời

20

Chúng tôi lưu trữ bản phát hành vào cấu trúc thư mục và gắn thẻ các phiên bản thích hợp trong điều khiển nguồn. Điều này cho phép chúng ta truy cập vào các phiên bản được xây dựng và nguồn đã tạo ra chúng.

Điều này có thể dễ dàng thực hiện bằng cách sử dụng tập lệnh xây dựng để tự động gắn thẻ và lưu trữ bản dựng.

+1

+1 - yup, đó là những gì chúng tôi làm là tốt. Bản phát hành đầy đủ đã vượt qua tất cả các bài kiểm tra và mọi thứ được lưu trữ bởi máy chủ tích hợp liên tục của chúng tôi trên một "Máy chủ phát hành" vào một chia sẻ trên đĩa –

+1

+1 Thông thường, các kết quả đầu ra duy nhất cần được lưu giữ là những kết quả thực sự được phát hành. Những người khác có thể được tổ chức trong một vài tuần, nhưng sau đó bị xóa để nhường chỗ, vì chúng luôn có thể được tạo lại. Dù bằng cách nào, kết quả đầu ra không thuộc về kiểm soát nguồn. –

+0

+1 Điều này có ý nghĩa nhất. Việc kiểm soát nguồn nên "trong lý thuyết" có thể tái tạo bản dựng nhưng nếu các công cụ thay đổi nó có ý nghĩa để có một vị trí song song với các tệp nhị phân thực sự. –

4

Thỏa hiệp: công cụ lưu trữ và mã nguồn trong kho lưu trữ và xây dựng thẻ. Bằng cách này, bạn luôn có thể tạo lại bất kỳ bản dựng sản phẩm nào.

Và bạn luôn có thể có kho lưu trữ riêng cho các tạo tác được biên dịch.

+1

Tôi nghĩ đây là một sự thỏa hiệp tốt. Tuy nhiên, tôi cũng có một chút hoang tưởng về các công cụ cũ không còn hoạt động trong một thời gian nữa trong tương lai. –

+0

@Jin Kim: Giả sử bạn cũng giữ bản phát hành trên máy chủ FTP hoặc tương đương, điều này không nên làm bạn lo lắng. –

0

Đặt bản phát hành khách hàng cụ thể trong kho lưu trữ.
Về lý thuyết, điều này là không cần thiết vì chúng tôi luôn có thể tái tạo phiên bản đó nhưng thật tuyệt khi có thể nhận được chính xác .msi được gửi tới một khách hàng nhất định vào một ngày nhất định - sau đó chúng tôi kiểm tra trong vm sạch.

Một lý do là nó bảo vệ bạn chống lại bất kỳ thay đổi nào bên ngoài môi trường xây dựng của bạn từ việc cập nhật Windows hoặc phòng thu trực quan. Bạn có thể không thể tái tạo một bit-bit xây dựng của một msi nếu bản thân msi đã cập nhật!

+1

Tôi có xu hướng không đồng ý với điều này - tôi thà biết rằng tôi có thể xây dựng từ bất kỳ điểm nào chính xác một bản sao chính xác của những gì đã được gửi. Bởi vì tùy thuộc vào con người có liên quan, đó .msi có thể không được tái sản xuất trong thực tế. Nó có thể là một lần xây dựng bởi một số nhà phát triển đã quên kiểm tra trong những thay đổi của mình, và do đó "không thể hỗ trợ". LUÔN dựa vào quá trình xây dựng của bạn để làm cho nó đúng, và nếu bạn không thể, sau đó bạn có một cái gì đó bạn cần phải sửa chữa. –

+0

Bạn có nghĩ rằng MSI được xây dựng lại sẽ khác nhau theo bất kỳ cách nào? Tôi không có nghĩa là chức năng, nhưng ở mức bit-cho-bit. –

0

Tôi nghĩ rằng việc lưu trữ đầu ra xây dựng trong hệ thống kiểm soát phiên bản là thích hợp. Cả hai để thử nghiệm một số phiên bản cụ thể của một bản xây dựng và cũng để giảm bớt các nhiệm vụ phát triển nhất định.

Tuy nhiên, bạn nên đảm bảo rằng bạn cũng sẽ giữ mọi thứ trong kho lưu trữ cần thiết để tạo lại bản dựng chính xác đó nếu cần. Bạn nên sử dụng gắn thẻ/ghi nhãn phù hợp để tạo điều kiện thuận lợi cho việc này. Bạn có thể cần phải kiểm tra sửa lỗi với các phiên bản khác nhau của các thành phần khác nhau và tùy thuộc vào độ phức tạp của hệ thống tổng thể của bạn mà bạn có thể muốn thử các kết hợp khác nhau.

+0

Tôi thấy không có lợi ích để làm tắc nghẽn hệ thống kiểm soát nguồn với đầu ra. –

+0

Nó phụ thuộc rất nhiều vào môi trường và quy mô nhóm của bạn. Trong các dự án lớn với công cụ phức tạp, biên dịch mọi thứ từ đầu chỉ vì bạn cần một số phiên bản của một số thành phần không phải lúc nào cũng khả thi. Đưa ra quyết định của riêng bạn. – VoidPointer

1

Chúng tôi sẽ gắn nhãn kho lưu trữ cho bất kỳ bản dựng nào để chúng tôi có thể lấy nguồn thực cho bất kỳ số xây dựng nào & sau đó chúng tôi nén và tải lên các tệp xây dựng đã xuất bản thực sự được triển khai - chỉ để đảm bảo không có cấu hình phút cuối cùng lén lút tinh chỉnh vv trong quá trình triển khai không được phản ánh trong chính thân cây.

4

Nếu bạn có thể tạo một hệ thống xây dựng đủ tốt để tạo một bản dựng chính xác chỉ với việc kiểm tra mã, tôi không tin có bất kỳ nhu cầu nào để lưu trữ các bản dựng của bạn trong kho lưu trữ.

Đối với hầu hết nội dung của tôi, tôi không lưu trữ các bản dựng mã cụ thể, nhưng tôi lưu trữ các phiên bản thư viện cụ thể mà mã của tôi dựa vào.Tôi đặt rất nhiều nỗ lực trong một vài tháng trước để làm cho nó tầm thường để tải trong một thẻ và gõ "kiến" và tất cả mọi thứ xây dựng đúng mà không dựa vào bất cứ điều gì bên ngoài của cây. (không bao gồm javac và ant chính xác)

Thật không may, một số hệ thống của chúng tôi không có hệ thống xây dựng tốt (nghĩa là yêu cầu thiết lập sdks và lấy các thư viện bên ngoài và các biến môi trường khác nhau) để tạo lại chính xác phiên bản cụ thể của một bản dựng dựa trên kho lưu trữ (chúng tôi liên tục di chuyển về phía trước và không thực sự hỗ trợ mã cũ, vì vậy máy trạm của nhà phát triển được thiết lập đủ gần mà chúng tôi chưa bị đốt cháy bằng cách quay lại một nhánh cũ trước bản phát hành hiện tại của chúng tôi) và trong trường hợp đó, chúng tôi lưu trữ các bản phát hành của chúng tôi (cho ngón tay không thể tránh khỏi "oh không, tôi đã làm sai máy chủ để thực hiện một số kiểm tra" hoặc một thứ gì đó vô cùng xảo quyệt).

+0

+1. Bất kỳ thứ gì không thể được tạo trong quá trình xây dựng từ các đầu vào khác phải được coi là đầu vào. Vì vậy, nó là ok để kiểm tra trong thư viện của bên thứ ba, hoặc thậm chí cả những di sản có xây dựng không thể được tự động. –

0

Đôi khi. Hầu hết thời gian, câu trả lời là không nhưng vẫn có các tình huống nếu có ý nghĩa, hãy thực hiện.

Là một sang một bên, tôi ngạc nhiên rằng điều này vẫn mở. Các câu hỏi loại thảo luận này thường được bỏ phiếu trong vòng chưa đến 5 phút.

+1

Các nazi đóng phải ở trong một múi giờ khác và vẫn còn ngủ. –

+1

Đây không phải là một cuộc thảo luận mơ hồ về một số vấn đề chủ quan, đó là một vấn đề thực tiễn tốt nhất. –

2

Tôi không nghĩ rằng có lý do chính đáng để phiên bản bản dựng thực tế. Gắn thẻ phiên bản nguồn và làm cho nó để chỉ có một nhóm được kiểm soát có quyền truy cập để thay đổi các thẻ. Một thẻ xây dựng không bao giờ nên có một checkin được thực hiện cho nó vì vậy nó sẽ là tầm thường để tái tạo xây dựng.

3

Tôi lưu trữ các bản dựng trên một thư mục trong máy chủ và chúng được sao lưu thường xuyên. Nhưng tôi gắn thẻ bản sửa đổi đại diện cho bản dựng đó. Trong thư mục xây dựng, tôi lưu trữ không chỉ các tệp thực thi, các tệp nhị phân hoặc các trang (trường hợp của chúng tôi là ASP.Net), mà còn là các kịch bản thay đổi mà chúng tôi nhận được từ SQL Delta.

Thẻ được đặt tên có cùng số nhận dạng so với các trường, vì vậy nếu bạn có bản dựng "System_2009-07-30-01", bạn sẽ có thẻ có tên đó. Vì vậy, nếu bạn cần phải sửa chữa một cái gì đó, bạn chỉ cần nhìn vào tên xây dựng, tìm các từ khóa và sau đó xem xét sửa đổi bạn cần phải xem những gì có thể xảy ra.

+0

+1 để cung cấp ví dụ. –

0

Để giảm thiểu sự lo ngại rằng các công cụ xây dựng cũ có thể không hoạt động trong môi trường mới hơn, chúng tôi lưu trữ hình ảnh máy xây dựng của chúng tôi cho các bản phát hành chính. Nó rất dễ làm cho chúng ta bởi vì các máy xây dựng của chúng ta được ảo hóa. Đó là kế hoạch B trong trường hợp các phương tiện khác không hoạt động.

-1

Tôi nghĩ rằng nguồn khác nhau, phụ thuộc, mã nhị phân và xây dựng công cụ cần được phiên bản với nhau ... Đây là cách duy nhất để theo dõi những gì đang xảy ra với các dự án lớn, nơi phát hành cuối cùng đến từ nhiều dự án mã nguồn ...

Các vấn đề liên quan