Hướng dẫn cho người mới bắt đầu: Tạo quy trình DevOps

Nếu bạn mới làm quen với DevOps, hãy xem hướng dẫn 5 bước này để tạo quy trình đầu tiên của bạn.

Hướng dẫn cho người mới bắt đầu: Tạo quy trình DevOps

DevOps đã trở thành giải pháp tiêu chuẩn để khắc phục các quy trình phát triển phần mềm chậm, rời rạc hoặc bị hỏng. Vấn đề là nếu bạn chưa quen với DevOps và không biết bắt đầu từ đâu, bạn có thể thiếu hiểu biết về các kỹ thuật này. Bài viết này sẽ thảo luận về định nghĩa của quy trình DevOps và cũng sẽ cung cấp hướng dẫn gồm 5 bước để tạo quy trình. Mặc dù hướng dẫn này chưa đầy đủ nhưng nó sẽ cung cấp cho bạn nền tảng để bắt đầu hành trình và mở rộng kiến ​​thức của bạn trong tương lai. Nhưng hãy bắt đầu với lịch sử.

Hành trình DevOps của tôi

Trước đây tôi đã làm việc trong nhóm đám mây của Tập đoàn Citi để phát triển ứng dụng web Cơ sở hạ tầng dưới dạng dịch vụ (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 làm cho quá trình phát triển hiệu quả hơn và mang lại sự thay đổi văn hóa tích cực cho cộng đồng. nhóm phát triển. Tôi đã tìm thấy câu trả lời trong một cuốn sách được đề xuất bởi Greg Lavender, CTO của Cơ sở hạ tầng và Kiến trúc Đám mây tại Citi. Cuốn sách có tên là Dự án Phoenix (Dự án Phượng hoàng), và nó giải thích các nguyên tắc của DevOps, nhưng nó đọc như một cuốn tiểu thuyết.

Bảng ở cuối cuốn sách cho thấy tần suất các công ty khác nhau triển khai hệ thống của họ trong môi trường phát hành:

Amazon: 23 mỗi ngày
Google: 5 mỗi ngày
Netflix: 500 mỗi ngày
Facebook: Mỗi ngày một lần
Twitter: 3 lần một tuần
Công ty tiêu biểu: 9 tháng một lần

Làm thế nào mà tần số của Amazon, Google và Netflix lại có thể thực hiện được? Điều này là do các công ty này đã tìm ra cách tạo ra một quy trình DevOps gần như hoàn hảo.

Chúng tôi đã không làm được điều này cho đến khi triển khai DevOps tại Citi. Hồi đó, nhóm của tôi có các môi trường khác nhau nhưng việc triển khai trên máy chủ phát triển hoàn toàn 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 IBM WebSphere Application Server Community Edition. Vấn đề là máy chủ sẽ tắt bất cứ khi nào nhiều người dùng cố gắng triển khai cùng lúc, vì vậy các nhà phát triển phải truyền đạt ý định của họ cho nhau, điều này khá khó khăn. Ngoài ra, còn có các vấn đề về phạm vi bao phủ mã kiểm tra cấp thấp, quy trình triển khai thủ công rườm rà và không thể theo dõi quá trình triển khai mã liên quan đến một tác vụ cụ thể hoặc câu chuyện của người dùng.

Tôi nhận ra rằng cần phải làm gì đó và tìm được một đồng nghiệp có cùng chí hướng. Chúng tôi quyết định hợp tác xây dựng quy trình DevOps ban đầu - anh ấy đã thiết lập máy chủ ứng dụng và máy ảo Tomcat trong khi tôi làm việc trên Jenkins, tích hợp Atlassian Jira và BitBucket, đồng thời làm việc về phạm vi kiểm tra mã. Dự án phụ này đã rất thành công: chúng tôi gần như tự động hóa hoàn toàn nhiều quy trình, đạt được gần như 100% thời gian hoạt động trên máy chủ phát triển của mình, cung cấp khả năng theo dõi và cải thiện phạm vi kiểm tra mã, đồng thời bổ sung khả năng liên kết các nhánh Git với các vấn đề hoặc hoạt động triển khai của Jira. Hầu hết các công cụ chúng tôi sử dụng để xây dựng quy trình DevOps của mình đều là nguồn mở.

Bây giờ tôi đã hiểu quy trình DevOps của chúng tôi đơn giản đến mức nào: chúng tôi không sử dụng các tiện ích mở rộng như tệp Jenkins hoặc Ansible. Tuy nhiên, quy trình đơn giản này hoạt động tốt, có lẽ nhờ nguyên tắc Pareto (còn được gọi là quy tắc 80/20).

Giới thiệu ngắn gọn về DevOps và Quy trình CI/CD

Nếu bạn hỏi nhiều người “DevOps là gì?”, bạn có thể sẽ nhận được nhiều câu trả lời khác nhau. DevOps, giống như Agile, đã phát triển để mở rộng sang nhiều lĩnh vực khác nhau, nhưng hầu hết mọi người sẽ đồng ý ở một số điều: DevOps là một phương pháp phát triển phần mềm hoặc vòng đời phát triển phần mềm (SDLC) với nguyên lý trung tâm là thay đổi văn hóa trong đó các nhà phát triển và không phải nhà phát triển. các nhà phát triển tồn tại trong một môi trường trong đó:

Các hoạt động trước đây được thực hiện thủ công đã được tự động hóa;
Mọi người đều làm những gì họ làm tốt nhất;
Số lượng triển khai trong một khoảng thời gian nhất định tăng lên; Thông lượng tăng;
Tăng tính linh hoạt phát triển.

Mặc dù việc có các công cụ phần mềm phù hợp không phải là điều duy nhất bạn cần để tạo môi trường DevOps nhưng một số công cụ vẫn rất cần thiết. Công cụ chính là tích hợp liên tục và triển khai liên tục (CI/CD). Trong quy trình này, môi trường có các giai đoạn khác nhau (ví dụ: DEV, INT, TST, QA, UAT, STG, PROD), nhiều hoạt động được tự động hóa và nhà phát triển có thể viết mã chất lượng cao, đạt được tính linh hoạt trong phát triển và tỷ lệ triển khai cao.

Bài viết này mô tả cách tiếp cận gồm 5 bước để tạo quy trình DevOps giống như quy trình được hiển thị trong sơ đồ sau bằng cách sử dụng các công cụ nguồn mở.

Bước 1: Phương pháp CI/CD

Điều đầu tiên bạn cần là một công cụ CI/CD. Jenkins, một công cụ nguồn mở dựa trên Java và được cấp phép theo giấy phép MIT, là công cụ đã phổ biến DevOps và trở thành tiêu chuẩn trên thực tế.

Vậy Jenkins là gì? Hãy coi nó như một loại điều khiển từ xa đa năng kỳ diệu nào đó có thể nói chuyện và sắp xếp các dịch vụ và công cụ khác nhau. Bản thân một công cụ CI/CD như Jenkins là vô dụng nhưng nó trở nên mạnh mẽ hơn khi kết nối với các công cụ và dịch vụ khác nhau.

Jenkins chỉ là một trong nhiều công cụ CI/CD nguồn mở mà bạn có thể sử dụng để xây dựng quy trình DevOps của mình.

Jenkins: Creative Commons và MIT
Travis CI: MIT
Kiểm soát hành trình:BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU

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

Hướng dẫn cho người mới bắt đầu: Tạo quy trình DevOps

Bạn có công cụ CI/CD chạy trên máy chủ cục bộ của mình nhưng hiện tại bạn không thể làm được gì nhiều. Hãy chuyển sang giai đoạn tiếp theo của hành trình DevOps.

Bước 2: Quản lý hệ thống kiểm soát nguồn

Cách tốt nhất (và có lẽ là dễ nhất) để xác minh rằng công cụ CI/CD của bạn có thể phát huy tác dụng kỳ diệu của nó là tích hợp với công cụ kiểm soát mã nguồn (SCM). Tại sao bạn cần kiểm soát nguồn? Giả sử bạn đang phát triển một ứng dụng. Bất cứ khi nào bạn tạo một ứng dụng, bạn đang lập trình và việc bạn sử dụng Java, Python, C++, Go, Ruby, JavaScript hay bất kỳ ngôn ngữ lập trình nào không thành vấn đề. Mã bạn viết được gọi là mã nguồn. Lúc đầu, đặc biệt là khi bạn làm việc một mình, bạn có thể đặt mọi thứ vào một thư mục cục bộ. Nhưng khi dự án trở nên lớn hơn và bạn mời người khác cộng tác, bạn cần một cách để ngăn chặn xung đột đồng thời chia sẻ các sửa đổi một cách hiệu quả. Bạn cũng cần một cách để khôi phục các phiên bản trước đó, vì việc tạo bản sao lưu và sao chép/dán vào chúng đang trở nên lỗi thời. Bạn (và đồng đội của bạn) cần thứ gì đó tốt hơn.

Đây là lúc việc kiểm soát mã nguồn gần như trở nên cần thiết. Công cụ này lưu trữ mã của bạn trong kho, theo dõi các phiên bản và điều phối công việc của những người tham gia dự án.

Mặc dù có rất nhiều công cụ kiểm soát nguồn nhưng Git là tiêu chuẩn và đúng như vậy. Tôi thực sự khuyên bạn nên sử dụng Git, mặc dù có các tùy chọn nguồn mở khác nếu bạn thích.

Git: GPLv2 và LGPL v2.1
Lật đổ: Apache 2.0
Hệ thống phiên bản đồng thời (CVS): GNU
Vesta: LGPL
Thủy ngân: GNU GPL v2+

Đây là giao diện của quy trình DevOps khi bổ sung các điều khiển mã nguồn.

Hướng dẫn cho người mới bắt đầu: Tạo quy trình DevOps

Công cụ CI/CD có thể tự động hóa các quy trình xem xét, thu thập mã nguồn và cộng tác giữa các thành viên. Không tệ? Nhưng làm cách nào để biến nó thành một ứng dụng hoạt động được để hàng tỷ người có thể sử dụng và đánh giá cao nó?

Bước 3: Tạo công cụ tự động hóa bản dựng

Tuyệt vời! Bạn có thể xem lại mã và thực hiện các thay đổi đối với kiểm soát nguồn cũng như mời bạn bè của mình cộng tác phát triển. Nhưng bạn vẫn chưa tạo ứng dụng. Để tạo một ứng dụng web, nó phải được biên dịch và đóng gói ở định dạng hàng loạt có thể triển khai hoặc chạy dưới dạng tệp thực thi. (Lưu ý rằng không cần phải biên dịch ngôn ngữ lập trình thông dịch như JavaScript hoặc PHP).

Sử dụng công cụ tự động hóa xây dựng. Cho dù bạn quyết định sử dụng công cụ tự động hóa xây dựng nào, chúng đều có cùng một mục tiêu: xây dựng mã nguồn thành một số định dạng mong muốn và tự động hóa tác vụ dọn dẹp, biên dịch, kiểm tra và triển khai đến một môi trường cụ thể. Các công cụ xây dựng sẽ khác nhau tùy thuộc vào ngôn ngữ lập trình của bạn, nhưng đây là một số tùy chọn nguồn mở phổ biến.

tên
Giấy phép
Ngôn ngữ lập trình

Maven
Apache 2.0
Java

Ant
Apache 2.0
Java

Gradle
Apache 2.0
Java

bazel
Apache 2.0
Java

Hãy
GNU
N/A

Tiếng càu nhàu
MIT
JavaScript

Nuốt chửng
MIT
JavaScript

Người xây dựng
Apache
hồng ngọc

Cào
MIT
hồng ngọc

AAP
GNU
Python

SCons
MIT
Python

BitBake
GPLv2
Python

Bánh
MIT
C#

ASDF
Người nước ngoài (MIT)
LISP

Cabal
BSD
Haskell

Tuyệt vời! Bạn có thể đặt các tệp cấu hình của công cụ tự động hóa bản dựng vào hệ thống kiểm soát nguồn của mình và để công cụ CI/CD kết hợp mọi thứ lại với nhau.

Hướng dẫn cho người mới bắt đầu: Tạo quy trình DevOps

Mọi thứ đều ổn phải không? Nhưng triển khai ứng dụng của bạn ở đâu?

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

Hiện tại, bạn có một tệp đóng gói có thể thực thi hoặc cài đặt được. Để bất kỳ ứng dụng nào thực sự hữu ích, nó phải cung cấp một số loại dịch vụ hoặc giao diện, nhưng bạn cần một vùng chứa để lưu trữ ứng dụng của mình.

Máy chủ ứng dụng web chỉ là một nơi chứa như vậy. Máy chủ cung cấp một môi trường trong đó logic của gói đang được triển khai có thể được xác định. Máy chủ cũng cung cấp giao diện và cung cấp các dịch vụ web bằng cách đưa các socket ra thế giới bên ngoài. Bạn cần một máy chủ HTTP cũng như một số môi trường (như máy ảo) để cài đặt nó. Hiện tại, giả sử bạn sẽ tìm hiểu thêm về điều này (mặc dù tôi sẽ đề cập đến các vùng chứa bên dưới).

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

tên
Giấy phép
Ngôn ngữ lập trình

Mèo đực
Apache 2.0
Java

cầu tàu
Apache 2.0
Java

Côn trung hoang da
GNU Ít công khai hơn
Java

GlassFish
CDDL & GNU Ít công khai hơn
Java

Django
BSD 3 mệnh đề
Python

Tornado
Apache 2.0
Python

bắp súng
MIT
Python

Python
MIT
Python

Rails
MIT
hồng ngọc

Node.js
MIT
Javascript

Quy trình DevOps của bạn gần như đã sẵn sàng để sử dụng. Làm tốt lắm!

Hướng dẫn cho người mới bắt đầu: Tạo quy trình DevOps

Mặc dù bạn có thể dừng ở đó và tự mình xử lý việc tích hợp, nhưng chất lượng mã là điều quan trọng mà nhà phát triển ứng dụng phải lo lắng.

Bước 5: Phạm vi kiểm tra mã

Việc triển khai các thử nghiệm có thể là một yêu cầu phức tạp khác, nhưng các nhà phát triển phải sớm phát hiện mọi lỗi trong ứng dụng và cải thiện chất lượng mã để đảm bảo người dùng cuối hài lòng. May mắn thay, có rất nhiều công cụ nguồn mở để kiểm tra mã của bạn và đưa ra đề xuất để cải thiện chất lượng của nó. Điều tuyệt vời hơn nữa là hầu hết các công cụ CI/CD đều có thể kết nối với các công cụ này và tự động hóa quy trình.

Kiểm tra mã bao gồm hai phần: khung kiểm tra mã giúp bạn viết và chạy thử nghiệm cũng như các công cụ gợi ý giúp bạn cải thiện chất lượng mã của mình.

Hệ thống kiểm tra mã

tên
Giấy phép
Ngôn ngữ lập trình

JUnit
Giấy phép Công cộng Eclipse
Java

EasyMock
Apache
Java

nhạo báng
MIT
Java

PowerMock
Apache 2.0
Java

Pytest
MIT
Python

Giả thuyết
Mozilla
Python

Độc
MIT
Python

Hệ thống khuyến nghị để cải thiện mã

tên
Giấy phép
Ngôn ngữ lập trình

Bảo hiểm
GNU
Java

CodeCover
Eclipse công khai (EPL)
Java

Bảo hiểm.py
Apache 2.0
Python

Emma
Giấy phép công cộng chung
Java

JaCoCo
Giấy phép Công cộng Eclipse
Java

Giả thuyết
Mozilla
Python

Độc
MIT
Python

Jasmine
MIT
JavaScript

Karma
MIT
JavaScript

một thứ mã nảo
MIT
JavaScript


MIT
JavaScript

Lưu ý rằng hầu hết các công cụ và khung được đề cập ở trên đều được viết cho Java, Python và JavaScript, vì C++ và C# là ngôn ngữ lập trình độc quyền (mặc dù GCC là nguồn mở).

Bây giờ bạn đã triển khai các công cụ kiểm thử, quy trình DevOps của bạn sẽ trông giống như sơ đồ được hiển thị ở phần đầu của hướng dẫn này.

Các bước bổ sung

Container

Như tôi đã nói, bạn có thể lưu trữ máy chủ của mình trên máy ảo hoặc máy chủ, nhưng vùng chứa là một giải pháp phổ biến.

Container là gì? Giải thích ngắn gọn là máy ảo cần một lượng bộ nhớ hệ điều hành khổng lồ, vượt quá kích thước của ứng dụng, trong khi một container chỉ cần một vài thư viện và cấu hình để chạy ứng dụng. Rõ ràng, máy ảo vẫn có những ứng dụng quan trọng, nhưng vùng chứa là một giải pháp gọn nhẹ để lưu trữ một ứng dụng, bao gồm cả máy chủ ứng dụng.

Mặc dù có các tùy chọn vùng chứa khác nhưng phổ biến nhất là Docker và Kubernetes.

Trình quản lý: Apache 2.0
Kubernetes: Apache 2.0

Công cụ tự động hóa trung gian

Quy trình DevOps của chúng tôi chủ yếu tập trung vào việc tạo và triển khai ứng dụng cộng tác, nhưng có nhiều việc khác có thể được thực hiện bằng các công cụ DevOps. Một trong số đó là việc 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 hóa việc cài đặt, quản lý và các tác vụ khác cho phần mềm trung gian. Vì vậy, ví dụ: một công cụ tự động hóa có thể trích xuất các ứng dụng như máy chủ ứng dụng web, cơ sở dữ liệu và công cụ giám sát với cấu hình chính xác và triển khai chúng đến máy chủ ứng dụng.

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

Ansible: GNU Public
SaltStack: Apache 2.0
Đầu bếp: Apache 2.0
Con rối: Apache hoặc GPL

Hướng dẫn cho người mới bắt đầu: Tạo quy trình DevOps

Tìm hiểu chi tiết về cách có được một nghề được săn đón ngay từ đầu hoặc Tăng cấp về kỹ năng và mức lương bằng cách tham gia các khóa học trực tuyến trả phí từ SkillFactory:

nhiều khóa học hơn

Hữu ích

Nguồn: www.habr.com

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