Đây là những gì tôi đã quyết định làm:
Tôi đã sửa đổi tập tin ivysettings.xml
tôi để có những điều sau đây:
<ivysettings>
<properties environment="env." override="false"/>
<caches
defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}"
resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/>
<settings defaultResolver="default"/>
<include file="${ivy.dir}/ivysettings-public.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
</ivysettings>
này hai điều:
- Nó định nghĩa các Bộ nhớ cache cục bộ của Ivy là
$HOME/.ivy/cache-$EXECUTOR_NUMBER
trong đó $EXECUTOR_NUMBER
là trình xử lý Jenkins. Điều này có nghĩa là mỗi người thực thi đều có bộ nhớ cache Ivy của riêng họ. Vì vậy, nếu Jenkins đang thực hiện nhiều hơn một công việc tại một thời điểm, mỗi công việc sẽ được chọn với một người thi hành khác, vì vậy nó sẽ có bộ nhớ cache riêng của nó. Nếu một công việc muốn làm sạch bộ nhớ cache, nó có thể đi ngay phía trước.
- Tôi đã xác định bộ nhớ cache giải quyết thành
${basedir}/target/ivy.cache
. Điều này mang lại cho mỗi công việc bộ đệm giải quyết riêng của nó khá nhỏ. Tuy nhiên, cách giải quyết ivy này không can thiệp vào các công việc khác nếu Jenkins đang xây dựng nhiều bản sửa đổi của cùng một dự án Ivy.
Hạn chế duy nhất là thư mục bộ nhớ cache mặc định của người dùng được gọi là $HOME/.ivy/cache-$env.EXECUTOR_NUMBER
không phải là trang web đẹp. Tôi muốn làm cho nó hợp lý hơn $HOME/.ivy/cache-0
, nhưng tôi đã không tìm ra điều đó. Tuy nhiên, nó không thực sự ảnh hưởng đến bất cứ điều gì vào thời điểm này.
Bây giờ, một nhà phát triển có một bộ nhớ cache Ivy đơn chứa tất cả các lọ họ đã tải xuống. Bằng cách này, các lọ có thể được chia sẻ giữa các dự án giúp tăng tốc độ cho các nhà phát triển.
Trong khi đó, Jenkins có thể xóa bộ đệm Ivy thường xuyên như được cấu hình. Điều này có thể được thực hiện cho mỗi công việc, hoặc một lần mỗi ngày, hoặc mỗi tháng. Tuy nhiên, vì bộ nhớ đệm được thực hiện cho mỗi người thực hiện, tôi sẽ không có vấn đề về bộ đệm được làm sạch trong khi một công việc khác (đang chạy trên một trình thực thi khác) phụ thuộc vào bộ đệm đó.
Điều này sẽ giải quyết tất cả các vấn đề cụ thể. Điều duy nhất tôi muốn làm là tìm ra cách đặt biến EXECUTOR_NUMBER mặc định nếu biến chưa được đặt. Tôi đã thử những thứ khác nhau như thế này:
<ivysettings>
<property name="env.EXECUTOR_NUMBER" value="0" override="false"/>
<properties environment="env." override="false"/>
<caches
defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}"
resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/>
<settings defaultResolver="default"/>
<include file="${ivy.dir}/ivysettings-public.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
</ivysettings>
Nhưng, vô ích. Tôi đã trued thay đổi các thông số override
trên cả hai <property>
và <properties>
tập tin tất cả các cách khác nhau, nhưng nó không hoàn toàn làm những gì tôi muốn.
Nguồn
2012-08-22 21:23:54
Cảm ơn. Làm sạch bộ nhớ cache chỉ thêm khoảng 90 giây để xây dựng (chúng tôi có kho lưu trữ Maven của công ty địa phương). Nó không ảnh hưởng đến khái niệm _CI_, vì vậy nó sẽ không thực sự gây tổn thương cho Jenkins để bắt đầu mỗi build w/một cache sạch. Các nhà phát triển có thể tắt bằng cách thiết lập ivy.cleancache thành false. Trớ trêu thay, bộ nhớ cache làm sạch kích thích các nhà phát triển bởi vì nó kéo dài việc xây dựng, nhưng nó không ảnh hưởng đến chúng. Jenkins không quan tâm, nhưng nếu Jenkins đang chạy nhiều công việc, nó có thể là một vấn đề. –