2009-08-04 26 views
33

Quy trình phát triển của nhóm của tôi dựa trên continuous integration. Các nhánh duy nhất mà chúng ta tạo ra là các nhánh bảo trì khi chúng ta phát hành, nhưng nếu không các nhà phát triển dự kiến ​​sẽ thường xuyên (hàng ngày nếu không thường xuyên hơn) vào thân cây, để công việc của mọi người luôn được tích hợp, kiểm tra liên tục và tất cả những thứ tốt.DVCS có thích Git không phù hợp với các nhóm sử dụng tích hợp liên tục không?

Sự hiểu biết của tôi về DVCS là cách tuyệt vời để phân nhánh. Tôi đã làm việc một vài năm trước trong một đội ngũ nơi mà điều này sẽ rất hữu ích, vì mỗi chút phát triển đã được thực hiện trên một chi nhánh, và chỉ sáp nhập khi hoàn thành và thử nghiệm. Nhưng đây là một triết lý khác với sự tích hợp liên tục. Nhưng có vẻ như với một nhóm sử dụng tích hợp liên tục, các tính năng của các công cụ DVCS như Git sẽ không liên quan đặc biệt và thậm chí có thể cản trở quá trình tích hợp liên tục nếu việc thay đổi hợp nhất yêu cầu các bước bổ sung có thể bị lãng quên .

Tôi chắc chắn có những lợi ích khác của DVCS (ví dụ: cam kết rất nhanh vì nó là cục bộ, có lẽ sáp nhập với nhánh chính có thể xảy ra trong nền khi nhà phát triển tiếp tục làm việc).

Nhưng đối với câu hỏi này, tôi quan tâm đến cách các nhóm sử dụng DVCS và tích hợp liên tục hòa giải hai triết lý dường như mâu thuẫn nhau. Tôi chủ yếu quan tâm đến việc nghe từ những người đang thực sự làm điều này.

+0

Đây là một câu hỏi hay. Thật không may, hầu hết những người đã trả lời đã nhầm lẫn "Liên tục tích hợp" có nghĩa là "chạy một máy chủ xây dựng liên tục". Điều nó thực sự có ý nghĩa trong một bối cảnh Agile (và những gì Kief đang hỏi), thường xuyên cam kết những thay đổi có giá trị cho thân cây có thể được đẩy vào sản xuất. Vì vậy, câu hỏi không phải là, "Tôi có thể chạy Jenkins chống lại Git?", Nhưng "điểm của các chi nhánh nếu những gì chúng tôi thực sự muốn làm là đẩy thay đổi để thân cây?" Thật không may, tôi không có kinh nghiệm CI + DVCS để thêm một câu trả lời hữu ích hơn, nhưng tôi dự định trở lại trong 12 tháng thêm một. –

Trả lời

32

Thực ra DVCS đã tích hợp liên tục dễ dàng hơn nhiều.

Với VCS trung tâm, mọi nhà phát triển đều có quyền cam kết trực tiếp trong thân cây và do đó anh ta có thể thực hiện mã lỗi. CI sẽ phát hiện nó sau khi thực tế. Vì vậy, nó có thể có thân cây bị hỏng ngay cả với CI.

Mặt khác, các hoạt động cơ bản trong thế giới DVCS là phân nhánh và hợp nhất. Bởi vì hợp nhất là rõ ràng và một quá trình riêng biệt so với cam kết với thân cây, người ta luôn có thể kiểm tra kết quả của một hợp nhất trước khi nó đất trên thân cây. Tôi không có kinh nghiệm với Git, nhưng các nhà phát triển của VCS Bazaar đã sử dụng kỹ thuật này thành công trong ít nhất 3,5 năm với sự trợ giúp của công cụ PQM.

Về cơ bản quy trình làm việc PQM trông như sau: nhà phát triển xuất bản nhánh của mình để nhánh có thể được hợp nhất, sau đó anh ấy gửi một e-mail đặc biệt tới bot PQM với hướng dẫn hợp nhất. Khi PQM nhận được một yêu cầu hợp nhất, nó tạo ra một nhánh tích hợp riêng biệt (bản sao của thân cây), sau đó hợp nhất nhánh của nhà phát triển và chạy các kiểm tra trên mã kết quả. Nếu tất cả các bài kiểm tra được thông qua thì nhánh tích hợp được đẩy lên thân cây, nếu không nhà phát triển sẽ nhận được một e-mail với nhật ký kiểm tra lỗi.

Chạy tất cả các kiểm tra cho dự án Bazaar mất thời gian, nhưng các thử nghiệm được thực hiện theo yêu cầu trên một máy chủ riêng biệt. Các nhà phát triển sẽ không bị chặn bởi việc hợp nhất và có thể tiếp tục làm việc trên các tác vụ khác.

Do kết quả của luồng công việc hợp nhất dựa trên PQM, thân cây bzr không bao giờ bị hỏng (ít nhất là miễn là có đủ phép kiểm tra và chấp nhận).

+0

Cảm ơn bialix, các mẹo như thế này chính xác là những gì tôi đã hy vọng nhận được từ câu hỏi này. – Kief

+0

Tôi đã bỏ phiếu cho câu trả lời của bạn, cùng với một vài người khác đã cung cấp thông tin chi tiết tốt. Tôi không nghĩ rằng bất kỳ câu trả lời ở đây (cho đến nay) là, ngày của riêng mình, 'the' câu trả lời cho câu hỏi này. – Kief

+0

@Damien cảm ơn bạn rất nhiều. – bialix

7

Vì tất cả DVCS có thể được sử dụng với quy trình làm việc sử dụng kho lưu trữ tập trung, không có vấn đề gì. Chính sách quy định rằng nhà phát triển phải đẩy các thay đổi của họ vào kho lưu trữ trung tâm theo cách chính xác mà chính sách ra lệnh cam kết với một VCS không phân phối. Các công cụ bổ sung cho phép nhà phát triển chỉnh sửa tập bản vá không phải là cản trở trong bất kỳ cách nào và trên thực tế, việc tạo cơ sở mã duy trì dễ dàng hơn nhiều.

5

Các công cụ tích hợp liên tục như Hudson có hỗ trợ DVCS, vì vậy tôi nghi ngờ có thể điều chỉnh tích hợp liên tục với điều khiển phiên bản được phân phối.

Trước tiên, tôi nghĩ rằng với DVCS sử dụng luồng công việc như luồng công việc nhánh chủ đề CI có thể ít cần thiết hơn. Thứ hai, bạn có thể thiết lập kho lưu trữ tích hợp liên tục (đơn, trung tâm) mà bạn đẩy khi bạn đã sẵn sàng, và móc làm CI.


Added 07-08-2009:

Xem ví dụ Continuous Integration Spring Cleaning bài trên GitHub Blog.

6

Sử dụng DVCS như Git không ngăn bạn thường xuyên chuyển sang kho trung tâm. Tuy nhiên, nó có nghĩa là bạn có thể thực hiện các cam kết trung gian cục bộ và chỉ đẩy các thay đổi vào kho lưu trữ trung tâm khi bạn đã hoàn tất.

Bằng cách này bạn có lợi ích từ kiểm soát nguồn ngay cả khi bạn đang thực hiện một nửa tính năng, mà không phá vỡ bản dựng cho các nhà phát triển khác.

+0

Tôi nghĩ đây là một trong những lợi ích chính của DVCS trên VC tập trung khi được sử dụng để tích hợp liên tục. Nó cho phép mức độ chi tiết hơn của các cam kết, các cam kết không tự vượt qua một thử nghiệm, nhưng vẫn đáng giá để được theo dõi bởi VC. Các nhóm của những cam kết này sau đó tạo nên một thay đổi hoàn toàn mà cùng nhau có thể vượt qua thử nghiệm, và được tích hợp thông qua việc đẩy vào một repo chính. – imagineerThat

+0

nhưng vấn đề là bạn muốn dạy các nhà phát triển của mình phát triển gia tăng :) với một phần công việc không vượt qua các bài kiểm tra hiện có bạn cho phép nhóm của bạn có các nhánh dài và sau đó đột nhiên bạn đang thực hiện phân nhánh tính năng ngay cả khi bạn không biết điều đó chưa –

1

Hai ý tưởng mà tôi đã tìm thấy sự giúp đỡ để giải thích điều này:

  • DVCS tách cam kết từ sáp nhập.
  • CI chạy trên một kho lưu trữ mà bạn chọn.

Vì vậy, trọng tâm của vấn đề là cách hợp nhất được thực hiện vào kho lưu trữ mà bạn muốn chạy công cụ CI. Bạn có thể chọn chỉ có một kho lưu trữ khi bạn bắt đầu.

+0

miễn là cam kết của bạn không làm giảm số lượng hợp nhất bạn làm với một repo tập trung, bạn vẫn đang làm tích hợp liên tục. CI nên chạy với repo mà mọi người đều đồng ý, nếu không thì nó chỉ là một gói repos được phân phối không được tích hợp. – imagineerThat

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