Trường hợp sử dụng – Phân phối tự động các thành phần mã nguồn mở và riêng tư với JFrog Bintray
Talk Transcription:
(Allen) Xin chào, tôi là Allen Reese từ Yahoo. Hôm nay, tôi sẽ trình bày về tự động hóa phân phối các thành phần Mã Nguồn Mở và Private bằng JFrog’s Bintray. Đồng nghiệp Jack Weaver sẽ phụ trách phần open source, còn tôi tập trung vào phân phối private build trên Bintray. Đầu tiên, đây là slide cảnh báo an toàn, tất cả những gì tôi nói đều mang tính trao đổi.
(Allen) Chủ đề hôm nay sẽ bao gồm cách chúng tôi sử dụng Bintray, quy trình phân phối private build, triển khai open source miễn phí và tích hợp Bintray với Travis CI – phần thú vị nhất. Cuối cùng là phần hỏi đáp.
(Allen) Tại sao nên chọn Bintray? Có một lần, chúng tôi có nhu cầu mở firewall cho Artifactory nội bộ chỉ để một đối tác duy nhất sử dụng cho một build nhất định. Chúng tôi cần chia sẻ build ứng dụng với đối tác nhưng không muốn mở rộng truy cập trong hệ thống. Cuối cùng, chúng tôi chọn Bintray để làm giải pháp thay thế, và vài tuần sau có thêm nhiều trường hợp tương tự xuất hiện, có người cũng muốn publish mã nguồn mở lên Bintray. Đăng ký Maven central thực sự rất phức tạp.
(Allen) Mô hình sử dụng Bintray của Yahoo khá đặc biệt: nhiều người cùng push open source, bên cạnh đó là các team chia sẻ build với đối tác/contractor bên ngoài (gọi là private party build). Đối với private party build, các bản build này chỉ định danh cho từng khách hàng, thường được watermark, chỉ có 1-2 lượt tải, không công khai, chủ yếu là ứng dụng di động.
(Allen) Nhiều team muốn publish open source artifact lên Bintray nhưng yêu cầu phải dùng tài khoản cá nhân hoặc enterprise entitlements. Gần đây Bintray bổ sung thêm nhiều mức giới hạn cấp phép linh hoạt hơn. Để các team chủ động thao tác mà không cần quản lý user, chúng tôi lựa chọn sử dụng entitlements cho từng team/nhóm.
(Allen) Dưới đây là ví dụ về một số repo: Bạn có thể thấy đối tác A, các JNI library dùng chung, Tachyon (ứng dụng di động mật), và Maven repo public dành cho Flurry SDK cùng các thư viện omit.
(Allen) Private party build là gì? Đó là những build không công khai, chưa publish, cần kiểm soát chặt quyền truy cập để tránh rò rỉ. Chúng tôi sử dụng download key cho mỗi lượt tải, key này có hiệu lực 24 giờ/chỉ 1 lần tải.
(Allen) Mô hình này hoạt động hiệu quả. Khách hàng nhận được license key cho build, được phép tải 4-5 lần tùy nhu cầu. Sau khi đủ lượt tải, key hết hạn, muốn tải lại phải liên hệ support. Điều này đảm bảo chỉ một người truy cập và quản lý tốt tài sản nội bộ.
(Allen) Với mỗi khách hàng, sẽ có một repository riêng. Mỗi file đều có signed URL, hết hạn sau 24 giờ và chỉ dùng cho một lượt tải. Với phần mềm có license, có thể cấp 5 lượt tải cho mỗi key.
(Allen) Tài liệu build được mã hóa bằng khóa chung trước khi gửi để bảo mật khi truyền qua email. Thường, một repo cho một sản phẩm hoặc build private riêng lẻ. Doanh nghiệp có thể kiểm soát cấu hình entitlement rất chi tiết, hãy trao đổi với đội ngũ support nếu cần custom hóa sâu hơn.
(Allen) Tiếp theo, Jack sẽ trình bày về phân phối open source.
(Jack) Lưu ý nhanh, tôi đã rời Yahoo cách đây 2-3 tuần. Bên cạnh những chia sẻ của Allen, những thông tin của tôi cũng mang tính tham khảo.
(Jack) Tôi sẽ chia sẻ quá trình quản lý mã nguồn mở ở Yahoo bằng Bintray. Chúng tôi dùng license và setup cấp doanh nghiệp, do đó quy trình sẽ khác với trường hợp bình thường, kết hợp download key và entitlement ngay từ khi Bintray ra mắt tính năng này. Điều này hỗ trợ tuyệt vời cho automation.
(Jack) Mục tiêu là tự động hóa release lên Bintray với thao tác thủ công thấp nhất, giúp đội open source ở github.com/Yahoo chủ động release mà không cần phụ thuộc vào đội công cụ.
(Jack) Để onboard, chúng tôi xây dựng quy trình streamlined với form đăng ký và tạo download key, entitlement riêng cho từng dự án. Khi vào trang bintray.com/Yahoo, bạn sẽ thấy danh sách các project được cấp entitlement và key riêng biệt cho repo đó.
(Jack) Điều này mang lại lợi ích lớn: không dùng tài khoản chung. Nếu không dùng key và entitlement, sẽ cần chia sẻ credentials cho CI (ví dụ Travis CI). Nhờ cơ chế này, nếu maintainer rời đi có thể “roll” lại key/quyền truy cập đơn giản.
(Jack) Về kỹ thuật: để tạo key, chỉ cần gọi API (tài liệu có trên doc Bintray). Xác thực basic với base64 user và API key, sau đó nhận lại thông tin JSON chứa key.
(Jack) Kế tiếp, tạo entitlement – chính là phân scope cho key vào project cụ thể. Gửi kèm thông tin xác thực và JSON chỉ định quyền (read/write) cũng như key áp dụng. Tên repo và package có cấu trúc rõ ràng (vd: Yahoo Maven, hello Bintray). Mỗi team đăng ký lên Bintray sẽ được tạo key và entitlement để quản lý truy cập tách biệt.
(Jack) Điều thú vị là phải tích hợp với CI. Yahoo có hệ thống CI nội bộ, nhưng phổ biến vẫn là Travis CI, dễ sử dụng. Tôi sẽ minh họa bằng Maven, nhưng hoàn toàn dùng cho Gradle hoặc tool khác tương tự.
(Jack) Khi setup, bạn sẽ cần cấp credentials cho Travis CI dưới dạng environment variables hoặc dùng tool dòng lệnh của Travis để encrypt và lưu vào file yaml (cách nào phù hợp tùy nhu cầu). Khi deploy, Maven có thể đọc biến môi trường này tại build time để xác thực với Bintray – đảm bảo user và API key an toàn, không bị lộ ra ngoài.
(Jack) Maven sẽ được cấu hình settings.xml để lấy thông tin từ biến môi trường (giống với những gì đã encrypt ở Travis). Khi deploy lên Bintray thì toàn bộ credential/entitlement chỉ áp dụng đúng package đã được scope.
(Jack) Triển khai release: Khi dev quyết định milestone, sẽ dùng Maven release plugin để tag và tăng version, chuyển sang cycle tiếp theo. Travis sẽ phát hiện tag, dùng deploy script để đẩy artifact lên Bintray theo đúng package đã cấu hình, nhờ đó tự động hóa chu trình release mà vẫn đảm bảo bảo mật credentials.
(Jack) Nhiều cách để setup, chẳng hạn chạy Maven release prepare từ laptop dev, Travis chỉ trigger deploy khi phát hiện tag đúng với regex định trước. Nhờ vậy, tránh release mỗi khi có commit mà chỉ khi nhóm thực sự muốn publish build sản phẩm ra ngoài.
(Jack) Cách này vừa linh hoạt, vừa an toàn – mọi quyền truy cập, download/read/write đều được phân scope rõ ràng, không chia sẻ credentials, khó có rủi ro thao tác ngoài mong muốn.
(Jack) Một số lưu ý cuối: Yahoo áp dụng enterprise feature cho open source, nhưng các tổ chức nhỏ hoàn toàn có thể tạo tài khoản riêng rồi dùng credentials này cho dự án của mình, thêm tài khoản này vào tổ chức trên Bintray là xong. Nếu bạn là cá nhân thì chỉ cần mã hóa credential với Travis là đủ bảo mật.
(Jack) Sử dụng download key (giờ gọi là access key) giúp bạn tự động hóa, phân quyền headless cho CI publish lên repo. Có thể mở rộng hoặc bán tự động hóa theo nhu cầu, dễ đặt human-in-the-loop khi cần.
(John) Bintray cho phép bạn push artifact vào repo nhưng chưa cần publish ngay ra public; khi nào sẵn sàng chỉ cần chọn bản release phù hợp. Phù hợp cho các đơn vị muốn kiểm soát release cycle chặt chẽ.
(John) Tôi thấy nhiều team mã nguồn mở lưu artifact trên GitHub; Bintray dễ sử dụng, kết nối nhanh với JCenter để mọi consumer dùng Maven hoặc công cụ khác không cần cấu hình gì thêm. Đây là hệ thống tối ưu hiện nay, hỗ trợ tự động hóa end-to-end rất tốt.
(Allen) Cảm ơn các bạn đã lắng nghe.
Bạn đang gặp khó khăn trong tự động hóa phân phối phần mềm, quản lý Mã Nguồn Mở hoặc Private Component? Liên hệ ngay với Softribution để được tư vấn chuyên sâu và triển khai giải pháp tối ưu nhất trên nền tảng Bintray và các công cụ CI/CD hàng đầu!
