1.3 Giới thiệu mô hình DevOps
Thực tiễn DevOps
Các phương pháp Agile và Lean đã ảnh hưởng đến thực tiễn DevOps. Vì các dự án Agile thường lặp đi lặp lại và phương pháp Lean khuyến khích việc tạo ra một sản phẩm tối giản và khả thi, vì vậy cần phải có một quy trình và công cụ để hỗ trợ cho việc đó. Quy trình được sử dụng để giúp cung cấp các dự án Agile và Lean là một quy trình tích hợp liên tục, phân phối liên tục và triển khai liên tục, thường được gọi tắt là CI/CD liên tục.
Tích hợp liên tục là sự hợp nhất liên tục của công việc phát triển vào cơ sở mã để kiểm thử tự động có thể sớm phát hiện ra lỗi. Phân phối liên tục là một cơ chế phân phối gói phần mềm trong đó có code được dựng sẵn để xem xét và kiểm tra trước khi phát hành. Việc triển khai liên tục thì liên quan đến cả việc tích hợp và phân phối liên tục để tự động phát hành code vào sản xuất khi sẵn sàng, cho phép việc liên tục đưa các tính năng mới vào sản phẩm.
Cơ sở hạ tầng dưới dạng mã
Khái niệm CI/CD cũng có thể được áp dụng để quản lý cơ sở hạ tầng. Cơ sở hạ tầng dưới dạng mã (IaC) thực hiện viết mã bậc cao để tự động hóa việc cung cấp và triển khai các thành phần cơ sở hạ tầng. Nó không chỉ viết một vài tập lệnh, mà còn sử dụng các phương pháp phát triển phần mềm như:
- Version control (kiểm soát phiên bản)
- Design patterns
- Kiểm thử
- Thực hiện kéo code mới nhất, đại diện cho cấu hình của cơ sở hạ tầng, từ hệ thống kiểm soát phiên bản. Thực hiện bất kỳ thay đổi nào đối với thiết bị và đẩy code lên hệ thống kiểm soát phiên bản.
- Thực thi việc kiểm tra sơ bộ, chẳng hạn như trạng thái hoạt động, trên cơ sở hạ tầng và trong môi trường thử nghiệm. Tiến hành chạy thô sau khi đã được thay đổi
- Đẩy bản cập nhật lên hệ thống kiểm soát phiên bản, hệ thống này sẽ triển khai code đã được cập nhật và thay đổi cấu hình của cơ sở hạ tầng.
- Thực hiện kiểm tra xác nhận để đảm bảo rằng tất cả các thay đổi dự định đã thành công hoặc quay trở lại cấu hình trước đó từ hệ thống kiểm soát phiên bản.
- Ghi nhận lại và báo cáo kết quả.
Bộ công cụ CI/CD IaC
Để xem CI/CD đang hoạt động với một số công cụ được đề cập, hãy xem xét quy trình mà nhóm phát triển phần mềm tuân theo để phát hành phát hành phiên bản mới nhất của trang web công ty.
- Trình soạn thảo code
- Kiểm soát phiên bản cho code
- Bộ điều phối CI/CD
- Công cụ quản lý cấu hình
- Kiểm tra và xác minh
- Giám sát và thông báo
Có nhiều tùy chọn khác nhau cho từng thành phần của chuỗi công cụ này. Nếu công ty của bạn đã có bản quyền sử dụng của một vài phần mềm trong số đó, có thể sử dụng phần mềm hiện có của bạn trước khi khám phá các tùy chọn khác. Trong một vài trường hợp khác, bạn có thể đang ở trong một môi trường không có các công cụ DevOps và bạn phải điều tra về mặt lợi và những thứ cần phải đánh đổi cho từng công cụ vì không có giải pháp nào là tối ưu về mọi mặt.
Ví dụ về CI/CD
Sử dụng CI/CD để triển khai phần mềm cho một ứng dụng mới liên quan đến một số công cụ đã trình bày trước đó. Ví dụ: Một nhóm phát triển phần mềm có thể cần thực hiện một bản phát hành mới trong một phiên bản mới của trang web công ty. Trong trường hợp đó, luồng công việc sẽ xảy ra như sau:
- Nhà phát triển lấy code mới nhất từ GitHub
- Sau đó họ thực hiện các thay đổi cần thiết và đẩy các commit mới vào kho lưu trữ Github từ xa.
- Máy chủ Jenkins phát hiện các sửa đổi và bắt đầu công việc của nó.
- Công việc của Jenkins là tạo ra một môi trường thử nghiệm với các thay đổi được đề xuất và chạy các bài kiểm tra.
- Jenkins thực hiện nhiều bài kiểm tra bao gồm integration test, smoke tests và nhiều bài kiểm tra khác.
- Kết quả kiểm tra được thông báo lại Jenkins.
- Sau đó kết quả cũng được gửi đến Cisco Webex Teams để nhóm phát triển xem.
- Nếu các bài kiểm tra đều được thông qua, code sẽ được triển khai đến một kho lưu trữ artifact.
Microservices
Một trong những sự đổi mới trong việc triển khai phần mềm Agile và Lean là sự chuyển đổi từ các ứng dụng một khối sang các ứng dụng được thiết kế theo kiểu microservices. Một microservice là một phần mềm nhỏ, mà ở đó mọi thứ được tập trung phát triển, kiểm tra, triển khai một cách độc lập bên trong một ứng dụng lớn hơn. Nó phi trạng thái và được kết hợp với không nhiều ràng buộc, đồng thời có ngôn ngữ lập trình và công nghệ không phụ thuộc vào các microservice khác. Một lợi ích to lớn của cách tiếp cận này là việc sử dụng microservices cho phép các ứng dụng của bạn có khả năng mở rộng và kháng lỗi cao. Các micoservice này dễ dàng tích hợp vào CI/CD pipeline hơn vì bạn có thể cập nhật, kiểm tra và triển khai một phần của ứng dụng được cập nhật mà không ảnh hưởng hoặc thay đổi toàn bộ ứng dụng.
Containers
Một trong những cải tiến cho phép sử dụng microservices là các container. Các container có tốc độ triển khai nhanh hơn đáng kể, di chuyển nhanh hơn, ít chi phí hơn và khởi động lại nhanh hơn các máy ảo bình thường. Các container khác với máy ảo vì chúng chia sẻ một nhân hệ điều hành duy nhất. Container hữu ích hơn khi bạn muốn chạy nhiều phiên bản của một ứng dụng.
Các container có thể triển khai một bộ thực thi DevOps vì chúng cho phép sự liên kết tốt hơn giữa bộ phận phát triển và vận hành. Các container tạo ra phân khúc tự nhiên của nỗ lực. Chúng cũng có tính nhất quán được đảm bảo cho CI/CD. Bởi vì các container có thể xóa và tạo lại một cách nhanh chóng so với máy ảo, chúng dễ quản lý các hoạt động hơn và dễ dàng hơn cho các nhà phát triển trong việc triển khai thường xuyên. Chúng cũng cho phép các container được xây dụng trên máy tính xách tay có thể nhất quán khi được triển khai vào sản xuất. Tình huống này phù hợp với quá trình CI/CD được phát triển cục bộ sau đó đẩy lên pipeline.
Giám sát, Ghi log và Cảnh báo
Vì DevOps bao gồm nhiều quy trình tự động trong CI/CD pipeline nên việc giám sát và ghi log là rất quan trọng để giữ cho các hoạt động diễn ra suôn sẻ. Đo lường giá trị DevOps (một phần của từ viết tắt CALMS) và có các điểm định chuẩn chính xác cho hiệu suất ứng dụng, hiệu suất container và hiệu suất cơ sở hạ tầng yêu cầu phần mềm dành cho các trường hợp sử dụng nó.