2012-07-18 22 views
11

Tôi đang chạy Jenkins và tôi đã làm việc thành công với tài khoản Github của tôi, nhưng tôi không thể làm cho nó hoạt động chính xác với Amazon S3.Tích hợp liên tục Jenkins với Amazon S3 - Mọi thứ đang tải lên thư mục gốc?

Tôi đã cài đặt plugin S3 và khi tôi chạy bản dựng, nó tải lên thành công nhóm S3 mà tôi chỉ định, nhưng tất cả các tệp được tải lên sẽ kết thúc trong thư mục gốc của nhóm. Tôi có một loạt các thư mục (chẳng hạn như/css/js và vv), nhưng tất cả các tập tin trong các thư mục đó từ hithub sẽ kết thúc trong thư mục gốc của tài khoản S3 của tôi.

Có thể tải plugin S3 lên và giữ lại cấu trúc thư mục không?

Trả lời

15

Nó không giống như thế này là có thể. Thay vào đó, tôi đang sử dụng s3cmd để làm điều này. Trước tiên, bạn phải cài đặt nó trên máy chủ của bạn, và sau đó trong một trong những kịch bản bash trong một công việc Jenkins bạn có thể sử dụng:

s3cmd sync -r -P $WORKSPACE/ s3://YOUR_BUCKET_NAME 

Điều đó sẽ sao chép tất cả các tập tin vào tài khoản S3 của bạn duy trì cấu trúc thư mục. Các -P giữ quyền đọc cho tất cả mọi người (cần thiết nếu bạn đang sử dụng xô của bạn như là một máy chủ web). Đây là một giải pháp tuyệt vời sử dụng tính năng đồng bộ hóa, vì nó so sánh tất cả các tệp cục bộ của bạn với nhóm S3 và chỉ sao chép các tệp đã thay đổi (bằng cách so sánh kích thước tệp và tổng kiểm tra).

+1

Tôi khuyên bạn nên sử dụng t anh ấy JClouds Cắm ngay bây giờ. – Aron

+0

JClouds cũng không tuyệt vời; nó tiếp tục thất bại với một lỗi tối nghĩa về phát trực tuyến. Có dự phòng cho một công cụ CLI cho điều này là lố bịch ... – aendrew

+0

s3cmd không phải là tối ưu vì nó đòi hỏi một cửa hàng riêng biệt cho các thông tin aws. Có lợi cho việc sử dụng s3 của plugin s3 hồ sơ để xác thực. Đồng ý rằng việc bảo quản phân cấp giả tạo sẽ thích hợp hơn với hành vi hiện tại. –

3

Tôi chưa bao giờ làm việc với plugin S3 cho Jenkins (nhưng bây giờ tôi biết nó tồn tại, tôi có thể thử), mặc dù, nhìn vào mã, có vẻ như bạn chỉ có thể làm những gì bạn muốn bằng cách sử dụng workaround .

Đây là những gì mã Plugin thực tế không (lấy từ github) --Tôi loại bỏ các phần của mã mà không liên quan vì lợi ích của khả năng đọc:

lớp hudson.plugins.s3.S3Profile, phương pháp upload:

final Destination dest = new Destination(bucketName,filePath.getName()); 
getClient().putObject(dest.bucketName, dest.objectName, filePath.read(), metadata); 

Bây giờ nếu bạn có một cái nhìn vào javadoc hudson.FilePath.getName() 's:

Gets chỉ phần tên tập tin mà không cần danh bạ.

Bây giờ, hãy xem vào 's hudson.plugins.s3.Destination constructor:

public Destination(final String userBucketName, final String fileName) { 

    if (userBucketName == null || fileName == null) 
     throw new IllegalArgumentException("Not defined for null parameters: "+userBucketName+","+fileName); 

    final String[] bucketNameArray = userBucketName.split("/", 2); 
    bucketName = bucketNameArray[0]; 
    if (bucketNameArray.length > 1) { 
     objectName = bucketNameArray[1] + "/" + fileName; 
    } else { 
     objectName = fileName; 
    } 
} 

Các javadoc Destination lớp nói:

Quy ước thực hiện ở đây là a/trong một tên xô là được sử dụng để xây dựng một cấu trúc trong tên đối tượng. Tức là, một tập tin file.txt vào tên của "mybucket/v1" sẽ khiến đối tượng "v1/file.txt" được tạo trong mybucket.

Kết luận: các filePath.getName() gọi dải tắt bất kỳ tiền tố (S3 không có bất kì thư mục, nhưng thay vì các tiền tố, xem thisthis đề để biết thêm) bạn thêm vào các tập tin. Nếu bạn thực sự cần đưa tệp của mình vào "thư mục" (nghĩa là có tiền tố cụ thể có dấu gạch chéo (/)), tôi khuyên bạn nên thêm tiền tố này vào cuối tên nhóm của bạn, như được giải thích trong lớp JavaDoc Destination .

1

Có điều này là có thể.

Dường như đối với mỗi đích thư mục, bạn sẽ cần một phiên bản riêng biệt của plugin S3.

"Nguồn" là tệp bạn đang tải lên.

"Nhóm đích" là nơi bạn đặt đường dẫn của mình.

+0

Nó không hoàn toàn đệ quy, nhưng bạn có thể tải lên một thư mục con trong nhóm s3. –

1

Sử dụng Jenkins 1.532.2 và Plugin trình xuất bản S3 0.5, màn hình Giao diện người dùng định cấu hình Màn hình công việc từ chối các mục xuất bản S3 bổ sung. Cũng sẽ có một lợi ích bảo trì đáng kể đối với chúng ta nếu plugin tái tạo cấu trúc thư mục không gian làm việc vì chúng ta sẽ có nhiều thư mục để tạo.

+1

plugin đó không phải là tồi tệ hơn cố gắng! nó là ok cho một tập tin tải lên nhưng nó không giữ cấu trúc thư mục. – mohamnag

1
  1. Thiết lập plugin git của bạn.

enter image description here

  1. Thiết lập kịch bản Bash của bạn

enter image description here

  1. Tất cả trong thư mục bạn đã đánh dấu dưới dạng "*" sẽ chuyển đến thùng