Bài viết

[AgiCoffee] Tháng 6/2016 – Docker từ những chiến hào

Ngày 29/06/2016 AgiCoffee số 3 với chủ đề “Docker từ những chiến hào” đã được chia sẻ bởi anh Nguyễn Ngọc Tú và anh Lê Văn Thuận đến từ NAL Group. Họ là những “kiến trúc sư” kiêm “nhà phát triển cơ sở hạ tầng” trong việc phát triển và vận hành sản phẩm của NAL ở nhiều nền tảng từ Java IoT cho tới PHP và Mobile. Họ đã sử dụng từ những hệ thống máy ảo cho tiến tới việc sử dụng Docker. Bên cạnh đó là những động lực, khó khăn khi áp dụng các công cụ khác nhau như Jenkin, Docker, SonarQube, cũng như cách họ vượt qua khó khăn để có được kết quả hiện tại.

AgiCoffee#3-1

Các phương pháp phát triển Agile giúp phản hồi nhanh bằng cách phát triển theo các phân đoạn (Iteration) ngắn. Tuy nhiên cách làm này lại tốn rất nhiều công sức như: phải rà soát code nhiều lần, phải chạy kiểm thử nhiều lần… Một điểm nữa rất phức tạp là việc cài đặt sản phẩm để chạy tốn rất nhiều công sức cũng như rủi ro.
DevOps đã được sinh ra để giải quyết vấn đề đó, giúp thích ứng nhanh trong quá trình phát triển (Development) mà không làm giảm sự ổn định ở quá trình vận hành (Operation).

Buổi nói chuyện của anh Tú và anh Thuận đã chia sẻ những giải pháp của NAL Group với DevOps sử dụng các công cụ: Docker, Jenkins, SonarQube. SonarQube giúp phân tích code để đưa ra những đánh giá về chất lượng code dựa trên những quy tắc, tiêu chuẩn như coding convention, độ phức tạp của hàm, độ dài của hàm, của lớp, …. Jenkins để tích hợp các bên liên quan và tích hợp tự động, chạy kiểm thử tự động. Docker là giải pháp rẻ và nhẹ nhàng để cài đặt và chạy các ứng dụng (Jenkins, SonarQube, môi trường build, môi trường kiểm thử, và thậm chí là môi trường vận hành).

AgiCoffee là hoạt động định kỳ hàng tháng của Học viện Agile dành riêng cho học viên nhằm kết nối cộng đồng học viên với nhau và với các chuyên gia trong việc thực hành Agile.

Agipedia

CD – Continuous Deployment

Triển khai Liên tục (CD) được coi như phần mở rộng của Tích hợp Liên tục (CI).

CD là kĩ thuật này được sử dụng để giảm thiểu thời gian chờ, khoảng thời gian mà người dùng thật sự được sử dụng phần mềm với những mã nguồn mới nhất được viết bởi nhà phát triển. Giống như CI, kĩ thuật này được triển khai với sự trợ giúp của một loạt các công cụ tự động.

DevOps

DevOps là từ viết tắt của cụm từ Development and Operations. DevOps là một thuật ngữ trong phát triển phần mềm để chỉ mối liên quan giữa quá trình phát triển và quá trình vận hành phần mềm. Khi triển khai kĩ thuật Triển khai Liên tục (CD) sẽ dẫn đến nhu cầu cộng tác chặt chẽ giữa nhóm phát triển (development) và nhóm vận hành (operation). Nhu cầu này đã cho ra đời các công cụ tự động để tích hợp các công đoạn và cộng tác giữa các bên liên quan. Có một công thức nói lên tính chất này:

DevOps = Development + Operation

Hệ thống Tích hợp Liên tục

Hệ thống Tích hợp Liên tục là một hệ thống được xây dựng để triển khai Tích hợp Liên tục (CI – Continuous Integration). Hệ thống này bao gồm một số thành phần và cấu hình khác nhau. Đầu vào của hệ thống này chính là mã nguồn riêng lẻ từ các nhà phát triển, đầu ra của hệ thống là một phiên bản hợp nhất của sản phẩm và các báo cáo, phản hồi và lỗi phát sinh nếu có.

ci-he-thong-tich-hop-lien-tuc

CI – Tích hợp liên tục

Tích hợp liên tục (Continuous Integration, viết tắt CI) là kĩ thuật hợp nhất thường xuyên mã nguồn từ những nhà phát triển riêng lẻ vào một nhánh chính duy nhất.

Khi các thành viên Nhóm Phát triển làm việc trên cùng một sản phẩm, họ thường làm việc trên những phần khác nhau, do đó mỗi người tạo ra một “nhánh” khác của sản phẩm, các nhánh này thường chia sẻ chung một mã nguồn cơ sở, nếu trong quá trình phát triển có các thay đổi xảy ra với phần mã nguồn chia sẻ chung này thì rất có thể nó sẽ ảnh hưởng đến những “nhánh” khác. Do vậy, nếu kéo dài thời gian phát triển riêng lẻ của từng nhánh thì nguy cơ xảy ra các xung đột khi các nhánh này hợp nhất lại là rất cao, và các xung đột này thường mất rất nhiều thời gian để giải quyết.

Tích hợp liên tục là kĩ thuật giải quyết được vấn đề này bằng cách rút ngắn thời gian tồn tại của các nhánh riêng lẻ, thường xuyên hợp nhất chúng lại, từ đó ngăn ngừa các xung đột cũng như sớm phát hiện ra chúng để giải quyết một cách dễ dàng và ít tốn kém hơn.

Khi chúng ta có một hệ thống CI mạnh, kết hợp với các công cụ tự động hoá cùng với các quy trình chặt chẽ kết hợp giữa bộ phận phát triển sản phẩm và bộ phận vận hành và cung cấp dịch vụ, để nhanh chóng chuyển giao liên tục (Continuous Delivery) giá trị tới người dùng cuối, là lúc chúng ta có thể tiến đến một hệ thống DevOps mạnh mẽ và hiệu quả. Đây có thể coi là một bước tiến tiếp theo trong phát triển phần mềm linh hoạt.