Làm cách nào để lưu trữ tài nguyên của bên thứ ba trong một đường ống xây dựng?


8

Một thường yêu cầu truy cập tài nguyên của bên thứ ba, ngoài mã nguồn của các vật phẩm mà nó có nghĩa là để xây dựng. Ví dụ, mỗi tài nguyên bên thứ ba này giới thiệu một yếu tố rủi ro trong các bản dựng:

  • Kho lưu trữ phân phối tạm thời không khả dụng, do đó việc cài đặt các gói phân phối tạm thời không thành công.

  • Kho lưu trữ phân phối vĩnh viễn không có sẵn, giống và tồi tệ hơn trước.

  • Một số gói phần mềm miễn phí NPM dừng tồn tại, bởi vì tác giả của nó đã đòi lại việc rút tiền đó.

  • Một số tệp nguồn hoặc gói quảng cáo nhị phân cho công cụ của bên thứ ba không còn khả dụng nữa.

Danh sách này có thể được mở rộng lib quảng cáo và trong khi nghiên cứu các lý do khác nhau dẫn đến việc một số tài nguyên của bên thứ ba biến mất sẽ thú vị hơn nhiều vì nó có vẻ như là một hậu quả tai hại: đường ống xây dựng bị hỏng.

Cách tốt nhất để bao gồm hai trường hợp sau đây khi xây dựng hình ảnh docker là gì :

  1. Các tập tin lưu trữ được tải xuống với một curl hoặc wget .
  2. Bộ nhớ đệm gói Debian.

Có một số chiến lược hợp lý có thể được xem xét ở đây. Ví dụ: sử dụng proxy và định cấu hình hệ thống xây dựng để định tuyến tất cả các yêu cầu của nó thông qua proxy này. Khả năng thứ hai, giá rẻ sẽ là kết thúc các cuộc gọi curl để lưu kết quả vào bộ đệm cục bộ.

(Trong câu hỏi này, tôi sẽ xem xét chia sẻ bộ đệm giữa một số đơn vị của đường ống xây dựng như một câu hỏi có tầm quan trọng thứ yếu.)

Câu trả lời:


6

Tôi không quá quen thuộc với Docker, nhưng nghe có vẻ giống như các vấn đề người ta sẽ gặp phải khi xây dựng một ứng dụng .NET hoặc ứng dụng java bình thường với nhu cầu lưu trữ các phụ thuộc bên ngoài của chúng (DLL hoặc jar).

Để giải quyết điều này, tôi khá thích tạo tác. Hai trong số phổ biến nhất là Nexus của Sonatype và Artifactory của JFrog . Cả hai đều cung cấp một phiên bản Nguồn mở miễn phí và cả hai sẽ có một số cách để lưu trữ gói tùy chỉnh hoặc sử dụng nó như một kho thô. Có những lựa chọn khác ngoài đó, tôi chỉ liệt kê hai cái này vì tôi đã làm việc với chúng và biết rằng chúng sẽ làm những gì bạn cần. Là một phần thưởng, bạn cũng có thể sử dụng chúng để quản lý hình ảnh docker trực tiếp.

Có những cái khác quá đáng để đề cập, bạn có thể tìm thấy một bảng so sánh cho họ, bạn sẽ có cái nhìn rõ hơn về khả năng của họ. (cảm ơn Karl Harnagy cho liên kết)

Lưu ý rằng một số tùy chọn này có thể yêu cầu một hoặc một trong các phiên bản trả phí vì vậy YMMV.

Một số hệ thống tích hợp liên tục cũng sẽ hỗ trợ khái niệm tạo tác (từ kinh nghiệm Jenkins và team-city làm điều này, một số khác cũng có thể) cho phép bạn đạt được kết quả tương tự trực tiếp.

Nếu không ai trong số này làm điều đó cho bạn, bạn có thể xem xét các công nghệ khác hoặc tự làm. Cá nhân tôi thích tận dụng bất cứ điều gì tôi đã có, điều này làm giảm việc bảo trì cần thiết trong thời gian dài và giúp việc vượt qua trở nên dễ dàng hơn khi đến lúc tìm kiếm những thách thức mới ở nơi khác.

Hi vọng điêu nay co ich


1
+1 cho Artifactory của JFrog. Làm việc trong một môi trường được kiểm soát chặt chẽ, chúng tôi được yêu cầu không dựa vào các nguồn lực bên ngoài trong các bản dựng của chúng tôi, để có một bản dựng có thể tái tạo 100% ngay cả sau 5 năm kể từ bây giờ. Vì vậy, chúng tôi lưu trữ mọi thứ trong Artifactory - hình ảnh cơ sở
docker, gói npm và nuget

Một điều tuyệt vời nữa là các tạo phẩm được lưu trong bộ nhớ cache thường có thể được cung cấp cho các nhà phát triển trực tiếp trên hệ thống của họ thông qua maven, nuget, npm, v.v.
Newtopian

1
Kiểm tra ProGet, bạn cũng có thể tìm thấy một bản phân tích của tất cả các trình quản lý Gói chung ở đây .
Karl Harnagy

cảm ơn, lần trước tôi đã kiểm tra ProGet bị giới hạn khá nhiều trong vũ trụ .NET (cách đây một thời gian) Tôi thấy bây giờ chúng là một vật phẩm có khả năng, xuất hiện ngang tầm với hai thứ tôi đã đề cập. Cảm ơn !
Newtopian

1

Có vẻ như những gì bạn đang tìm kiếm ít hơn về bộ nhớ đệm và nhiều hơn về phản chiếu. Vì các yêu cầu của bạn phải xử lý các gói không có sẵn vĩnh viễn, bạn cần phải tự duy trì các gói trong một cái gì đó lâu dài hơn bộ đệm. Trước đây, chúng tôi đã lưu trữ các gói trong các cửa hàng dựa trên đám mây liên tục như S3. Tuy nhiên, không có gì ngăn cản bạn thiết lập một filestore tùy chỉnh trên máy chủ xây dựng.

Cụ thể hơn, có thể dễ dàng nhất để thiết lập một dịch vụ proxy tìm kiếm tài nguyên trong filestore của bạn (S3) và trả về gói nếu tìm thấy. Nếu không, nó sẽ chỉ yêu cầu tài nguyên từ thượng nguồn, điền vào tệp của bạn và trả lại gói.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.