2009-11-21 33 views
6

Plugin git cho hudson hoạt động tốt. Tuy nhiên, kịch bản lệnh xây dựng phải cập nhật số phiên bản trong các tệp trong kho lưu trữ, cam kết và đẩy trở lại kho lưu trữ.Vòng lặp vô hạn Hudson cho các thay đổi trong kho Git?

Khi Hudson thăm dò bên cạnh để kiểm tra các thay đổi, nó đi vào vòng lặp vô hạn vì nó thấy cam kết đó là "thay đổi", tạo lại thay đổi, vì vậy nó lại xây dựng, sau đó cam kết thay đổi khác, v.v. .. Bạn có được ý tưởng.

tôi dừng lại nó, chạy một "git log" trong mỗi kho và so sánh cam kết ids mới nhất là giống hệt nhau sử dụng git ls-cây ĐẦU

Ngoài ra, Hudson chạy lệnh này để kiểm tra xem có thay đổi:

git fetch + refs/heads/: refs/điều khiển từ xa/gốc/ git ls-cây đẦU

Kể từ Hudson tự đẩy cam kết từ kho không gian làm việc của mình, và dường như trận đấu kết quả ls-cây, làm thế nào có thể lệnh này xác định rằng đã có thay đổi?

Dường như nó phải lưu trữ kết quả của ls-tree trước khi thực hiện việc xây dựng và so sánh với kết quả không có cam kết mới nhất. Ah. Tôi có thể thử tắt cam kết để kiểm tra lý thuyết đó.

Dù sao, thay vì sửa bất kỳ vấn đề nào trong plugin git cho Hudson, tôi có thể làm gì để đảm bảo rằng phần cuối của bản dựng của tôi giống hệt nhau và Hudson sẽ thấy nó.

Cách sửa lỗi này? Bất kỳ ý tưởng?

Wayne

+0

Chắc chắn đủ. Khi cam kết được nhận xét để kịch bản chỉ đẩy vào một vài kho lưu trữ, nó hoạt động đúng. Đó là, Hudson nhận ra không có thay đổi xảy ra và chờ đợi thay đổi mà không lặp. Vì vậy, làm thế nào để ngăn chặn vòng lặp vô hạn. Dường như plugin git cho Hudson lưu trạng thái repo sau lần tìm nạp ban đầu cho bản dựng. Nhưng có vẻ như nó sẽ lưu trạng thái repo một lần nữa sau khi xây dựng thành công trong trường hợp xây dựng đã thực hiện một cam kết - hoặc ít nhất là cho rằng như là một lựa chọn. Bất kỳ cơ thể nào có ý tưởng dễ dàng hơn, nhanh hơn để giải quyết vấn đề này? – Wayne

+0

Ồ, tôi tìm thấy một cái nĩa của git-hudson-plugin trên github, nơi người khác dường như đã có thêm xử lý tình huống này. Tôi đang tải xuống và xây dựng và sẽ thử điều đó. Một lần nữa nếu có ai có giải pháp tốt hơn, vui lòng tư vấn. Tôi sẽ đăng lại nếu nó giải quyết nó. – Wayne

Trả lời

3

Và câu trả lời là! ...

Plugin Git Hudson đã được người khác phân chia để thêm tính năng này hoạt động tốt. Tuy nhiên, tôi đã phải rút xuống nguồn và sửa một vài vấn đề nhỏ.

Bây giờ, nó hoạt động rất đẹp. Các cam kết xây dựng, và các plugin Git đẩy trở lại kho lưu trữ mà không looping, nghĩ rằng nó đã thay đổi một lần nữa.

Tuyệt vời!

Nếu ai đó cần giao diện này cho nhánh ngã ba của Hudson-GIT-Plugin trên Github.com nhưng kiểm tra xem liệu đã được tích hợp lại vào dự án chính chưa. Người đi làm cho biết anh ta quan tâm và lên kế hoạch kết hợp các nhánh.

Wayne

+0

Ồ. điều này thật tuyệt! Hóa ra, plugin Hudson Git đã xử lý tình huống này. Nó mô tả nó trên tài liệu và đã được trên đầu của tôi một vài ngày trước đây. Ý tưởng là chỉ cam kết với các chi nhánh "tính năng". Sau đó, máy chủ xây dựng đầu tiên kết hợp chi nhánh tính năng với một nhánh tích hợp và sau đó nó hoạt động. Bằng cách đó, không bao giờ cần bất kỳ máy chủ tự động nào có các phép trộn không tiến nhanh và các cam kết xảy ra trong nhánh tích hợp theo thứ tự thích hợp. Tuyệt vời. Bạn phải yêu sức mạnh của Git. – Wayne

5

Hệ thống xây dựng của bạn không được có bất kỳ tương tác viết nào với hệ thống kiểm soát sửa đổi của bạn. Chắc chắn không nên tự động đẩy những thay đổi đó.

Hệ thống xây dựng của bạn có thể yêu cầu git (thông qua git describe, ví dụ) bản sửa đổi hiện tại là gì. Bất cứ điều gì khác là dư thừa và dễ bị lỗi.

Một điều khác mà bạn có thể xem xét không phải là bỏ phiếu cho các thay đổi. Điều đó có vẻ giống như một cách ngớ ngẩn để hoạt động. (Phải thừa nhận rằng, tôi là một người dùng buildbot nặng khá quen với việc có mọi thứ được kích hoạt trên các sự kiện.)

Các repo git đang được thăm dò biết khi nào nó thay đổi. Nó chỉ nên nói với hệ thống CI để bắt đầu xây dựng ngay lập tức dựa trên đó. Bạn nhận được các bản dựng của bạn sớm hơn và vì chúng được kích hoạt, bạn không có máy tính của bạn ngồi xung quanh làm nhiều việc vì không có lý do chính đáng.

+0

Thật không may, việc viết phải xảy ra vì xây dựng phải gắn thẻ bản sửa đổi với số bản phát hành như 0.5.6.135 và cũng cập nhật tệp nguồn với số để các tệp nhị phân được biên soạn có bản sửa đổi. Điều đó cho phép theo dõi lỗi trở lại đúng mã nguồn. Trước đây chúng tôi đã sử dụng SVN và plugin đó có tùy chọn "bỏ qua" các tệp nhất định khi bỏ phiếu cho các thay đổi. Vì vậy, chúng tôi đã bỏ qua các tệp phiên bản của chúng tôi. Git là khác nhau, tất nhiên. Nếu bạn biết một số cách khác để thực hiện tương tự, hãy cho tôi biết xin vui lòng. – Wayne

+0

Tôi thích ý tưởng của bạn về việc không bỏ phiếu cho những thay đổi thực sự. Các rào cản đó cũng tránh được vòng lặp vô hạn của việc đẩy từ việc xây dựng tự động. Vì vậy, phương pháp này cũng phải có một cách để so sánh giữa quá. Đó là phức tạp. Vì vậy, bỏ phiếu và so sánh có vẻ đơn giản hơn. Và bỏ phiếu mỗi 1 phút cho các thay đổi chắc chắn không phải là bất kỳ loại công việc nào cho một máy tính để băn khoăn về việc làm. – Wayne

+0

FYI, tôi nhận ra bây giờ tại sao bạn nói xây dựng không bao giờ nên viết vào kho lưu trữ. Tôi có tất cả thiết lập và làm việc nhưng máy xây dựng CI viết và tạo các cam kết không có từ nhanh khi nó thực hiện ở cuối quá trình xây dựng trong khi các lập trình viên tiếp tục mã hóa và cam kết trong quá trình xây dựng. Phức tạp, nhưng yêu cầu cần thiết. Tôi sẽ đăng một câu hỏi khác để giải quyết vấn đề này. – Wayne

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