2011-10-21 16 views
6

Mô tả vấn đềLàm thế nào để ngăn chặn ghi đè các hiện vật phát hành (phiên bản không chụp) trong kho maven trên hudson

Hãy xem xét các trường hợp maven đang được sử dụng trên hudson.

Bây giờ ai đó đã kiểm tra dự án, sửa đổi một số tệp nhưng vô tình sử dụng cùng một id tạo tác và số phiên bản (không chụp nhanh).

Sau đó, anh ấy/cô ấy xây dựng dự án này trên hudson và đã cài đặt maven. Hiện vật sửa đổi giờ đây nằm trong hudson .m2. Bất kỳ dự án nào khác phụ thuộc vào nó sẽ được xây dựng với tạo tác được sửa đổi. Không ai tìm thấy điều này nếu biên dịch không thành công. Mặc dù hiện vật chính xác nằm trong kho trung tâm, nó không bao giờ được sử dụng bởi vì một sửa đổi được chọn từ .m2 khi hudson bắt đầu xây dựng.

Vì vậy, tôi đang tìm cách ngăn chặn lỗi người này.

  1. Dù sao để thu hồi quyền của maven cài đặt trên phiên bản không chụp (phát hành hiện vật) trên hudson?
  2. Bất kỳ cách nào để so sánh tổng kiểm tra .m2 trong hudson và trên vùng lưu trữ trung tâm từ xa để kiểm tra thất bại có thể tạo cảnh báo hoặc không thành công?

Tôi đã kiểm tra rằng không có cách nào để buộc cập nhật phiên bản không chụp nhanh từ kho lưu trữ trung tâm vì chúng có nghĩa là không thay đổi.

Làm sạch kho trung tâm hoặc sử dụng kho lưu trữ riêng cho từng công việc trên hudson sẽ dẫn đến tăng thời gian xây dựng & mức sử dụng dung lượng đĩa tương ứng.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

1

Không có cách nào trực tiếp để giải quyết điều này, nhưng chúng tôi giải quyết này inderctly bằng cách viết một cron công việc mà chạy mỗi năm phút và đánh dấu tất cả các lọ không phải là SNONPSHOT chỉ đọc trong kho lưu trữ cục bộ của Hundson. Bằng cách này khi một số dự án ở Hudson cố gắng ghi đè lên nó, cài đặt mvn của tôi hoặc mvn triển khai nó không thành công trong việc ghi đè lên các tạo tác khi chúng được đọc.

Bất kỳ hiện vật mới nào được thực hiện đều có thể dễ dàng được viết. Khi được viết trong kịch bản năm phút tiếp theo, đánh dấu chúng là chỉ đọc.

Dưới đây là mã cho unix kịch bản permission-handler.sh

#!/bin/bash 
cd ~/.m2 
date 2>&1>> permission-handler.out 
find . -name '*jar' -type f | grep -v 'SNAPSHOT' | xargs chmod -vc 444 2>&1>> permission-handler.out 
chmod 777 permission-handler.out 

Logging cũng được xử lý để xem tất cả các hiện vật đã được đánh dấu là phát hành duy nhất.

1

Tôi không nghĩ rằng bạn sẽ tìm cách ngăn chặn cài đặt ghi đè lên một tạo phẩm. Một máy chủ kho lưu trữ nên có một thiết lập để ngăn chặn việc triển khai một tạo phẩm phát hành được cập nhật mặc dù. Xem, ví dụ: "How do I disable artifact redeployment" cho Nexus.

+1

Tôi đã xử lý các quyền triển khai trong tạo tác. Nhưng điều đó không giúp đỡ vì nếu một hiện vật ghi đè có mặt trong kho .m2 và một dự án phụ thuộc được xây dựng trên hudson maven luôn luôn chọn tạo tác từ .m2 thay vì máy chủ lưu trữ. Không có cách nào để buộc tải xuống một tạo phẩm trong hudson hoặc xác minh thời tiết .m2 artifact được đồng bộ với máy chủ lưu trữ. – Aman

1

Đây là cách chúng ta quản lý các phiên bản trong dự án của chúng tôi:

Chúng tôi làm việc trên một phiên bản SNAPSHOT. Trên Jenkins, chúng tôi có công việc Fast Build xây dựng và thử nghiệm ứng dụng này nhưng không thành công nếu phiên bản là không phải a SNAPSHOT. Điều này được thực hiện bởi một số custom enforcer (điều này ngược lại với số require release version enforcer).

Khi muốn tạo bản phát hành, chúng tôi sử dụng công việc Jenkins cho điều đó. Sử dụng parameterized buildMaven release plugin, người chịu trách nhiệm thực hiện việc phát hành sẽ chỉ cho biết phiên bản của bản phát hành (phiên bản ổn định), phiên bản SNAPSHOT tiếp theo, cũng như tên của thẻ SCM. Vì vậy, chỉ Jenkins sẽ xác định một phiên bản ổn định và các nhà phát triển sẽ luôn luôn làm việc trên một mã số SNAPSHOT.

Nhưng tất nhiên, điều này không ngăn các nhà phát triển thực hiện những gì anh ta muốn trên máy cục bộ của mình. Nhưng chúng tôi luôn xem xét một nơi đáng tin cậy: máy chủ Jenkins.Nó hoạt động trên máy tính của tôi không bao giờ là một câu trả lời tốt cho một vấn đề; o)

0

Điều này được giải quyết bằng cách định cấu hình kho lưu trữ Maven của bạn (ví dụ: Nexus, Artifactory) từ không cho phép ghi đè lên bản phát hành repos. Trong Nexus, chúng tôi có một repo cho SNAPSHOT và một cho bản phát hành. Repo SNAPSHOT cho phép ghi đè lên. Nhưng repo phát hành không cho phép ghi đè lên. Đây chỉ là một tính năng hộp kiểm đơn giản trong Nexus cho repo đó. Khi một phiên bản phát hành được đưa vào repo, nó không thể được ghi đè. Hoạt động rất tốt.

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