Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở
Xây dựng chuỗi DevOps đầu tiên của bạn theo năm bước dành cho người mới bắt đầu.

DevOps đã trở thành liều thuốc chữa bách bệnh cho các quy trình phát triển quá chậm, bị ngắt kết nối và có vấn đề. Nhưng bạn cần có kiến ​​thức tối thiểu về DevOps. Nó sẽ bao gồm các khái niệm như chuỗi DevOps và cách tạo một chuỗi trong năm bước. Đây không phải là một hướng dẫn đầy đủ, mà chỉ là một "con cá" có thể được mở rộng. Hãy bắt đầu với lịch sử.

Giới thiệu của tôi về DevOps

Tôi đã từng làm việc với đám mây tại Citi Group và phát triển ứng dụng web IaaS để quản lý cơ sở hạ tầng đám mây của Citi, nhưng tôi luôn quan tâm đến cách tối ưu hóa chuỗi phát triển và cải thiện văn hóa giữa các nhà phát triển. Greg Lavender, CTO về Kiến trúc và Cơ sở hạ tầng Đám mây của chúng tôi, đã giới thiệu cuốn sách này cho tôi. Dự án "Phượng hoàng". Nó giải thích các nguyên tắc DevOps rất hay và đọc như một cuốn tiểu thuyết.

Bảng ở mặt sau cho biết tần suất các công ty tung ra các phiên bản mới:

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Làm thế nào để Amazon, Google và Netflix quản lý để tung ra nhiều như vậy? Và thật đơn giản: họ đã tìm ra cách tạo ra một chuỗi DevOps gần như hoàn hảo.

Mọi thứ rất khác đối với chúng tôi tại Citi cho đến khi chúng tôi chuyển sang DevOps. Sau đó, nhóm của tôi có các môi trường khác nhau, nhưng chúng tôi đã chuyển giao đến máy chủ phát triển theo cách thủ công. Tất cả các nhà phát triển chỉ có quyền truy cập vào một máy chủ phát triển dựa trên Phiên bản Cộng đồng Máy chủ Ứng dụng WebSphere của IBM. Với nỗ lực giao hàng đồng thời, máy chủ đã “gục ngã” và mỗi lần chúng tôi phải “đau đớn” thương lượng với nhau. Chúng tôi cũng không có đủ phạm vi mã với các bài kiểm tra, quy trình phân phối thủ công tốn thời gian và không có cách nào để theo dõi việc phân phối mã với sự trợ giúp của một số nhiệm vụ hoặc yêu cầu của khách hàng.

Rõ ràng là có việc cần phải làm gấp, và tôi đã tìm được một đồng nghiệp có cùng chí hướng. Chúng tôi quyết định cùng nhau tạo chuỗi DevOps đầu tiên - anh ấy thiết lập một máy ảo và máy chủ ứng dụng Tomcat, còn tôi chăm sóc Jenkins, tích hợp với Atlassian Jira và BitBucket, cũng như bảo hiểm mã với các thử nghiệm. Dự án đã thành công: chúng tôi hoàn toàn tự động hóa chuỗi phát triển, đạt được gần như 100% thời gian hoạt động trên máy chủ phát triển, có thể giám sát và cải thiện phạm vi mã bằng các thử nghiệm và một nhánh Git có thể được liên kết với phân phối và phát hành Jira. Và hầu như tất cả các công cụ chúng tôi sử dụng để xây dựng chuỗi DevOps đều là mã nguồn mở.

Trên thực tế, chuỗi đã được đơn giản hóa vì chúng tôi thậm chí không áp dụng các cấu hình nâng cao bằng Jenkins hoặc Ansible. Nhưng chúng tôi đã thành công. Có lẽ đây là hệ quả của nguyên tắc Pareto (còn gọi là quy tắc 80/20).

Mô tả ngắn gọn về Chuỗi DevOps và CI/CD

DevOps có các định nghĩa khác nhau. DevOps, giống như Agile, bao gồm các nguyên tắc khác nhau. Nhưng hầu hết sẽ đồng ý với định nghĩa sau: DevOps là một phương pháp hoặc vòng đời của quá trình phát triển phần mềm, nguyên tắc chính của nó là tạo ra một nền văn hóa nơi các nhà phát triển và các nhân viên khác “có cùng bước sóng”, lao động thủ công được tự động hóa, mọi người làm những gì họ giỏi nhất, tần suất giao hàng tăng lên, năng suất làm việc tăng lên, tính linh hoạt tăng lên.

Mặc dù chỉ riêng các công cụ là không đủ để tạo môi trường DevOps, nhưng chúng là thứ không thể thiếu. Điều quan trọng nhất trong số này là tích hợp liên tục và phân phối liên tục (CI/CD). Có các giai đoạn khác nhau trong chuỗi cho từng môi trường (ví dụ: DEV (phát triển), INT (tích hợp), TST (thử nghiệm), QA (đảm bảo chất lượng), UAT (thử nghiệm chấp nhận của người dùng), STG (chuẩn bị), SẢN XUẤT (sử dụng)) , các tác vụ thủ công được tự động hóa, các nhà phát triển có thể tạo mã chất lượng, phân phối mã và có thể dễ dàng xây dựng lại.

Ghi chú này mô tả cách tạo chuỗi DevOps theo năm bước, như minh họa trong hình bên dưới, sử dụng các công cụ nguồn mở.

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Hãy bắt tay vào công việc.

Bước 1: Nền tảng CI/CD

Trước hết, bạn cần một công cụ CI/CD. Jenkins là một công cụ CI/CD nguồn mở, được cấp phép bởi MIT, được viết bằng Java, đã phổ biến phong trào DevOps và đã trở thành tiêu chuẩn trên thực tế cho CICD.

Jenkins là gì? Hãy tưởng tượng rằng bạn có một bảng điều khiển kỳ diệu cho nhiều dịch vụ và công cụ. Về bản thân, một công cụ CI/CD như Jenkins là vô dụng, nhưng với các công cụ và dịch vụ khác, nó trở nên toàn năng.

Ngoài Jenkins còn rất nhiều công cụ mã nguồn mở khác, chọn cái nào cũng được.

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Đây là quy trình DevOps trông như thế nào với công cụ CI/CD

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Bạn có một công cụ CI/CD trong localhost, nhưng vẫn chưa có nhiều việc phải làm. Hãy chuyển sang bước tiếp theo.

Bước 2: Kiểm soát phiên bản

Cách tốt nhất (và có thể nói là dễ nhất) để kiểm tra sự kỳ diệu của công cụ CI/CD là tích hợp nó với công cụ quản lý kiểm soát nguồn (SCM). Tại sao bạn cần kiểm soát phiên bản? Giả sử bạn đang tạo một ứng dụng. Bạn viết nó bằng Java, Python, C++, Go, Ruby, JavaScript hoặc bất kỳ ngôn ngữ nào khác là một toa xe và một chiếc xe đẩy nhỏ. Những gì bạn viết được gọi là mã nguồn. Lúc đầu, đặc biệt nếu bạn đang làm việc một mình, bạn có thể lưu mọi thứ vào một thư mục cục bộ. Nhưng khi dự án phát triển và nhiều người tham gia hơn, bạn cần một cách để chia sẻ các thay đổi mã nhưng tránh xung đột khi hợp nhất các thay đổi. Và bạn cũng cần khôi phục bằng cách nào đó các phiên bản trước mà không sử dụng bản sao lưu và sử dụng phương pháp sao chép-dán cho các tệp mã.

Và ở đây không có SCM ở bất cứ đâu. SCM lưu trữ mã trong các kho lưu trữ, quản lý các phiên bản của nó và điều phối mã giữa các nhà phát triển.

Có nhiều công cụ SCM, nhưng Git xứng đáng trở thành tiêu chuẩn thực tế. Tôi khuyên bạn nên sử dụng nó, nhưng có những lựa chọn khác.

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Đây là giao diện của quy trình DevOps sau khi thêm SCM.

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Công cụ CI/CD có thể tự động tải lên và tải xuống mã nguồn cũng như cộng tác nhóm. Không tệ? Nhưng bây giờ làm thế nào để tạo một ứng dụng hoạt động từ ứng dụng này, được hàng tỷ người dùng yêu thích?

Bước 3: Xây dựng công cụ tự động hóa

Mọi thứ đang diễn ra như nó phải vậy. Bạn có thể tải mã lên và thực hiện các thay đổi đối với kiểm soát nguồn và mời bạn bè cùng làm việc với mình. Nhưng bạn chưa có ứng dụng. Để đây là một ứng dụng web, nó phải được biên dịch và đóng gói để phân phối hoặc chạy dưới dạng tệp thực thi. (Một ngôn ngữ lập trình được giải thích như JavaScript hoặc PHP không cần phải được biên dịch.)

Sử dụng một công cụ tự động hóa xây dựng. Cho dù bạn chọn công cụ nào, nó sẽ tập hợp mã theo đúng định dạng và tự động hóa việc dọn dẹp, biên dịch, kiểm tra và phân phối. Các công cụ xây dựng khác nhau tùy theo ngôn ngữ, nhưng các tùy chọn mã nguồn mở sau thường được sử dụng.

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Hoàn hảo! Bây giờ, hãy chèn các tệp cấu hình công cụ tự động hóa bản dựng vào kiểm soát nguồn để công cụ CI/CD xây dựng chúng.

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Nó cảm thấy tốt. Nhưng tất cả những thứ này sẽ được triển khai ở đâu bây giờ?

Bước 4: Máy chủ ứng dụng web

Vì vậy, bạn có một tệp được đóng gói có thể được thực thi hoặc triển khai. Để một ứng dụng thực sự hữu ích, nó phải có một số loại dịch vụ hoặc giao diện, nhưng bạn cần đặt tất cả chúng ở đâu đó.

Một ứng dụng web có thể được lưu trữ trên một máy chủ ứng dụng web. Máy chủ ứng dụng cung cấp một môi trường nơi bạn có thể thực thi logic được đóng gói, kết xuất giao diện và hiển thị các dịch vụ web qua một ổ cắm. Bạn cần một máy chủ HTTP và một vài môi trường khác (ví dụ như máy ảo) để cài đặt máy chủ ứng dụng. Bây giờ, hãy giả sử bạn đang giải quyết tất cả những điều này khi bạn tiếp tục (mặc dù tôi sẽ nói về các thùng chứa bên dưới).

Có một số máy chủ ứng dụng web mở.

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Chúng tôi đã có một chuỗi DevOps gần như đang hoạt động. Bạn đã làm rất tốt!

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Về nguyên tắc, bạn có thể dừng ở đây, sau đó bạn có thể tự xử lý, nhưng điều đáng nói là chất lượng của mã.

Bước 5: Kiểm tra phạm vi bảo hiểm

Việc kiểm tra tốn rất nhiều thời gian và công sức, nhưng tốt hơn hết là bạn nên tìm ra lỗi ngay lập tức và cải thiện mã để làm hài lòng người dùng cuối. Với mục đích này, có nhiều công cụ mở không chỉ kiểm tra mã mà còn tư vấn về cách cải thiện mã. Hầu hết các công cụ CI/CD đều có thể cắm vào các công cụ này và tự động hóa quy trình.

Thử nghiệm được chia thành hai phần: khung thử nghiệm để viết và thực hiện thử nghiệm và các công cụ có gợi ý để cải thiện chất lượng mã.

Khung kiểm tra

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Công cụ có mẹo chất lượng

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Hầu hết các công cụ và khung này được viết cho Java, Python và JavaScript vì C++ và C# là độc quyền (mặc dù GCC là mã nguồn mở).

Chúng tôi đã áp dụng các công cụ kiểm tra phạm vi và bây giờ quy trình DevOps sẽ trông giống như hình ảnh ở phần đầu của hướng dẫn.

Các bước bổ sung

Container

Như tôi đã nói trước đây, một máy chủ ứng dụng có thể được lưu trữ trong máy ảo hoặc máy chủ, nhưng các thùng chứa phổ biến hơn.

container là gì? Nói tóm lại, trong một máy ảo, hệ điều hành thường chiếm nhiều dung lượng hơn ứng dụng và một bộ chứa thường đủ với một vài thư viện và cấu hình. Trong một số trường hợp, máy ảo là không thể thiếu, nhưng bộ chứa có thể chứa ứng dụng cùng với máy chủ mà không phải trả thêm phí.

Đối với vùng chứa, Docker và Kubernetes thường được sử dụng, mặc dù có các tùy chọn khác.

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Đọc các bài viết về Docker và Kubernetes tại Opensource.com:

Công cụ tự động hóa phần mềm trung gian

Chuỗi DevOps của chúng tôi tập trung vào việc cộng tác xây dựng và phân phối ứng dụng, nhưng có những điều thú vị khác mà bạn có thể thực hiện với các công cụ DevOps. Ví dụ: sử dụng các công cụ Cơ sở hạ tầng dưới dạng mã (IaC), còn được gọi là công cụ tự động hóa phần mềm trung gian. Những công cụ này giúp tự động cài đặt, quản lý và các tác vụ khác cho phần mềm trung gian. Ví dụ: một công cụ tự động hóa có thể lấy các ứng dụng (máy chủ ứng dụng web, cơ sở dữ liệu, công cụ giám sát) với cấu hình chính xác và đẩy chúng đến máy chủ ứng dụng.

Dưới đây là một số tùy chọn cho các công cụ tự động hóa phần mềm trung gian mở:

Hướng dẫn dành cho người mới bắt đầu: Xây dựng Chuỗi DevOps bằng Công cụ nguồn mở

Chi tiết trong các bài viết Opensource.com:

Còn bây giờ thì sao?

Đây chỉ là đỉnh của tảng băng trôi. Chuỗi DevOps có thể làm được nhiều hơn thế. Bắt đầu với công cụ CI/CD và xem bạn có thể tự động hóa những gì khác để giúp công việc của bạn dễ dàng hơn. Đừng quên về công cụ truyền thông mở để hợp tác hiệu quả.

Dưới đây là một số bài viết DevOps hay dành cho người mới bắt đầu:

Bạn cũng có thể tích hợp DevOps với các công cụ linh hoạt mở:

Nguồn: www.habr.com

Thêm một lời nhận xét