CI/CD
- 12-07-2024
- Toanngo92
- 0 Comments
Mục lục
CI/CD là gì?
CI/CD là cách cung cấp ứng dụng đều đặn cho khách hàng bằng cách đưa tự động hóa vào các giai đoạn phát triển ứng dụng. Các tiêu chuẩn quan trọng nhất được gán cho CI/CD là tích hợp liên tục, phân phối liên tục và triển khai liên tục. CI/CD là cách tiếp cận đối với các vấn đề mà việc tích hợp mã mới có thể gây ra cho các đội phát triển và vận hành.
CI/CD giới thiệu sự tự động hóa liên tục và theo dõi liên tục trong suốt vòng đời của ứng dụng, từ các giai đoạn tích hợp và thử nghiệm đến phân phối và triển khai. Những thực hành liên kết này thường được gọi là “pipeline CI/CD” và được hỗ trợ bởi các đội phát triển và vận hành theo phương pháp DevOps hoặc Site Reliability Engineering (SRE).
‘CI’ trong CI/CD đề cập đến tích hợp liên tục, đó là một kỹ thuật tự động hóa cho các nhà phát triển. Thành công trong CI xảy ra khi bất kỳ thay đổi mã nào trong một ứng dụng đều dẫn đến việc tạo mới, thử nghiệm và gộp vào một kho lưu trữ chung. Quá trình tích hợp diễn ra liên tục và suốt ngày đêm. Nó là cách tiếp cận đối với vấn đề có quá nhiều nhánh của một ứng dụng đang phát triển cùng lúc mà có thể đồng bộ hóa nội dung với nhau.
‘CD’ trong CI/CD liên quan đến phân phối liên tục và/hoặc triển khai liên tục (các thuật ngữ này được sử dụng thay thế cho nhau ngày nay). Phân phối/triển khai liên tục liên quan đến việc tự động hóa các giai đoạn sau trong vòng đời phát triển ứng dụng.
Trong khi CI chỉ ra cơ chế để xây dựng và thử nghiệm mã tự động, CD là quá trình triển khai tất cả các thay đổi mã trong một bản xây dựng đến môi trường thử nghiệm hoặc staging. CD cho phép phát hành các bản dựng đến môi trường sản xuất khi cần thiết. Bằng cách cho phép các đội triển khai khi cần, CD giảm thời gian để sản phẩm sẵn sàng cho thị trường.
Trong phân phối liên tục, các thay đổi mã do các đội phát triển thực hiện được gỡ lỗi, thử nghiệm và tải lên một kho lưu trữ mã nguồn như GitHub. Mã này có thể được triển khai đến các môi trường sản xuất.
Triển khai liên tục xử lý việc tự động hóa các thay đổi mã từ kho lưu trữ chung đến sản xuất và giải quyết vấn đề phân phối ứng dụng chậm.
Các giai đoạn của một Pipeline CI/CD
Dưới đây là các giai đoạn chính trong một pipeline CI/CD:
Deliver: Đây là nơi các mã được chấp thuận được gửi đến sản xuất. Bước này được tự động hóa trong triển khai liên tục và chỉ sau khi được chấp thuận bởi nhà phát triển trong phân phối liên tục.
Deploy: Cuối cùng, sản phẩm cuối cùng được triển khai vào sản xuất. Bước này được tự động hóa và diễn ra trong triển khai liên tục. Với phân phối liên tục, một sản phẩm hoặc mã được đẩy vào một kho lưu trữ và sau đó, chuyển vào sản xuất hoặc triển khai bởi sự chấp thuận của con người.
Công cụ cho CI/CD
Ngày nay, CI/CD được coi là xương sống của phương pháp DevOps vì nó cho phép sự hợp tác giữa các nhà phát triển và đội ngũ vận hành IT để triển khai và phân phối phần mềm.
Có nhiều công cụ CI/CD sẵn có hiện nay cho phép các đội ngũ tự động hóa các nhiệm vụ phát triển, triển khai và thử nghiệm trong vòng đời phát triển ứng dụng. Các công cụ phổ biến bao gồm Jenkins, CircleCI, GitLab và Azure Pipelines.
Công cụ Azure cho CI/CD
Như một công cụ CD, Azure DevOps khá linh hoạt và cung cấp các pipelines có thể tùy chỉnh. Một nhược điểm của Azure DevOps Pipelines là nó yêu cầu một lượng lớn mã kịch bản trong quá trình thiết lập và cấu hình. Azure DevOps cung cấp hỗ trợ với các tài nguyên Azure, Kubernetes và dựa trên VM. Chức năng GitOps của chúng bị giới hạn ở các pipelines, không phải các bản phát hành. Không có khả năng xác thực và thời gian ngừng hoạt động không theo lịch trình được thực hiện thông qua một plugin. Các chỉ số phân phối phần mềm như lịch sử xây dựng và trạng thái triển khai có sẵn, nhưng chúng bị giới hạn trong việc xác định tốc độ triển khai. Azure DevOps hỗ trợ tạo hình ảnh Docker và làm cho việc triển khai và chạy các container Docker trên Azure trở nên đơn giản. Một artifact DevOps là một tài liệu, tệp, dịch vụ, mã hoặc thành phần được tạo ra như một phần của quá trình phát triển phần mềm. Artifacts hữu ích để cung cấp thông tin cho các bên liên quan và những người tham gia vào quá trình này. Chúng cũng có thể hữu ích trong quá trình phát triển liên tục. Microsoft và Google gần đây đã hợp tác với Codefresh để trở thành giải pháp CI/CD bên thứ ba ưu tiên và với việc mua lại GitHub gần đây, Microsoft đã bán hai sản phẩm cạnh tranh: GitHub Actions và Azure DevOps. Các tính năng của Azure DevOps bao gồm:
- Chức năng GitOps hạn chế
- RBAC chi tiết và SSO
- Nhà cung cấp hạ tầng hạn chế
- SaaS và On-Premise
- Hỗ trợ ứng dụng Cloud-Native và truyền thống
Đối với tích hợp, thử nghiệm và triển khai, các pipelines CI/CD hiệu quả sử dụng các công cụ nguồn mở. Quá trình CI/CD luôn được coi là để thực hiện hoàn hảo các dự án phát triển phần mềm. Jenkins là công cụ nguồn mở được sử dụng phổ biến nhất hỗ trợ xây dựng, triển khai và tự động hóa các dự án phát triển phần mềm. Khi làm việc trong môi trường đám mây, nhóm sử dụng container như Docker để đóng gói và phân phối ứng dụng, cũng như Kubernetes để điều phối. Mặc dù Kubernetes không được thiết kế đặc biệt cho pipeline CI/CD, nó được sử dụng trong nhiều workflows CI/CD. Bất kể công cụ CI/CD, plugin hay cấu hình nào được sử dụng trong pipeline, mục tiêu chính nên là đơn giản hóa và tự động hóa quy trình phát triển phần mềm.
Thiết lập và Cấu hình
Azure DevOps tạo ra một pipeline CI/CD trong Azure Pipelines. Bạn có thể tạo một tổ chức Azure DevOps mới hoặc sử dụng một tổ chức hiện có. Azure DevOps cũng tạo ra các tài nguyên Azure trong đăng ký Azure mà nhà phát triển lựa chọn.
Các nhà phát triển có thể thực hiện các bước sau để tạo một tổ chức DevOps mới:
- Truy cập vào Azure DevOps Services (dev.azure.com) và nhấp vào Start free như được hiển thị trong Hình bên dưới.
2. Đăng nhập bằng tài khoản Microsoft. Nếu không có tài khoản Microsoft, chọn “Create One!” và hoàn thành các bước. Sau đó, nhà phát triển sẽ được chuyển hướng đến trang “Get started” như được hiển thị trong Hình tiếp theo.
- Khi đăng nhập xong, trang tạo tổ chức sẽ xuất hiện. Tham khảo Hình bên dưới. Sau đó, nhập các thông tin sau:
- Nhập Tên của tổ chức DevOps
- Chọn vị trí gần nhất để lưu trữ dự án
- Hoàn thành captcha
4. Nhấp vào “Continue” và trang “Create a Project” sẽ xuất hiện như được hiển thị trong Hình bên dưới.
5. Điền các thông tin sau:
- Trong trường “Project Name“, nhập tên của dự án.
- Trong trường “Description“, nhập mô tả của dự án.
- Dưới mục “Visibility“, chọn xem dự án sẽ là công khai hay riêng tư.
Chọn Advanced như hình ở bên dưới
6. Trong phần quản lý phiên bản, chọn Git và trong quy trình công việc, chọn Basic như được hiển thị trong Hình bên trên. Sau đó, nhấp vào “Create project” và dự án sẽ được tạo. Tham khảo Hình tiếp theo.
7. Tạo hoặc tải lên một số tệp vào dự án.
Nếu nhà phát triển không có dự án hiện có thì nhà phát triển có thể chạy mẫu tạo dự án demo trong Azure DevOps.
Nhà phát triển có thể thực hiện các bước sau để tạo dự án demo:
- Truy cập vào Azure DevOps Demo Generator (azuredevopsdemogenerator.azurewebsites.net) và nhấp vào “Sign In” như được hiển thị trong Hình bên dưới.
- Đăng nhập bằng tài khoản Microsoft. Nếu không có tài khoản Microsoft, chọn “Create One!” và hoàn thành các bước. Sau đó, để tạo một dự án mới, nhấp vào “Choose template” và chọn một template phù hợp. Đặt tên cho dự án mới và chọn Tổ chức. Cuối cùng, nhấp vào “Create Project“. Tham khảo Hình tiếp theo. Trong ví dụ này, template eShopOnWeb đã được chọn để tạo dự án demo.
3. Nhấp vào “Navigate to project” và nhà phát triển sẽ được chuyển hướng đến dự án trong Azure DevOps.
Cấu hình Git và Sao chép Dự án
Bây giờ, để cấu hình Git và sao chép dự án với Azure DevOps để nhà phát triển có thể làm việc trên các tệp từ cloud một cách địa phương, nhà phát triển phải thực hiện các bước sau:
- Khởi động Visual Studio (VS) Code như được hiển thị trong Hình 13.9. Nếu nhà phát triển chưa cài đặt nó trên hệ thống của họ, họ phải cài đặt trước khi tiến hành các bước tiếp theo. Họ cũng phải đảm bảo rằng Git đã được tải xuống và cài đặt trên hệ thống địa phương. Liên kết để tải Git xuống là: https://git-scm.com/download/win.
2. Nhấp vào biểu tượng thả xuống bên cạnh thêm trong Terminal của VS Code và chọn tùy chọn Git Bash như trong Hình bên dưới.
- Để cấu hình Git:
- Đặt tên người dùng:
git config --global user.name "YOUR_USERNAME"
- Đặt địa chỉ email:
git config --global user.email "YOUR_EMAIL"
4. Tiếp theo, truy cập vào Azure DevOps Services (dev.azure.com) và đăng nhập với các thông tin tài khoản. Chọn dự án và Trang Chào mừng của Dự án sẽ xuất hiện. Sau đó, nhấp vào “Repos” và chọn “files” từ menu như được hiển thị trong Hình bên dưới.
5. Trong chế độ xem Files, chọn Clone ở bên phải để mở cửa sổ pop-up Clone Repository. Nhấp vào Generate Git Credentials và sao chép mật khẩu. Sau đó, nhấp vào Clone trong VS Code như được hiển thị trong Hình bên dưới.
Một hộp thoại thông báo sẽ xuất hiện như trong Hình 13.13.
- Nhấp vào Open Visual Studio Code.
7. Chọn vị trí đích nơi bạn muốn sao chép và chỉ định mật khẩu đã sao chép trước đó để quá trình xác thực có thể diễn ra. Quá trình sao chép dự án sẽ được bắt đầu. Sau khi sao chép hoàn tất, nhà phát triển sẽ có thể thấy các tệp dự án trong VS Code của họ. Sau đó, họ có thể làm việc địa phương trên những tệp này và sau đó đẩy chúng lên Azure DevOps thông qua các commit.
Tạo một Pipeline
Để tạo một pipeline, thực hiện các bước sau:
- Nếu nhà phát triển không có dự án hiện tại, họ có thể sử dụng một template đã có để tạo một dự án demo trong Azure DevOps (Xem phần Thiết lập và Cấu hình). Sau đó, truy cập vào cổng thông tin Azure DevOps và nhấp vào Pipelines từ menu. Phần Pipelines sẽ xuất hiện như được hiển thị trong Hình bên dưới.
- Nhấp vào Create Pipeline, và chọn nơi lưu trữ mã nguồn (ví dụ, Azure Repo, Bitbucket Cloud, GitHub, và còn nữa). Sau đó, chọn Azure Repos Git. Tham khảo Hình bên dưới.
Developers sẽ được yêu cầu đăng nhập vào tài khoản GitHub để cho phép sử dụng nó cho Azure Pipelines.
- Đăng nhập vào tài khoản GitHub và cấp quyền cho Pipelines. Nhà phát triển sẽ thấy một danh sách các kho lưu trữ hiện có trên GitHub của họ.
- Chọn kho lưu trữ mong muốn từ danh sách. Tham khảo Hình bên dưới.
- Trong phần Configure your pipeline, chọn cấu hình phù hợp với dự án. Ở đây, chúng ta chọn ASP.NET Core (.NET Framework).
6. Trong tab Review, đi đến Review your pipeline YAML và nhấp vào Save and run. Tham khảo Hình tiếp theo. Nhà phát triển có thể tuỳ chọn chỉ định một thông báo commit khi nhấp vào Save and run.
Sau khi chạy pipeline, chúng ta nhận được danh sách công việc cuối cùng như được hiển thị trong Hình tiếp theo. Pipeline đã được tạo thành công.
Lợi ích của Azure Pipelines
Azure Pipelines là một giải pháp hàng đầu cho DevOps cung cấp khả năng CI/CD cho bất kỳ ngôn ngữ, ứng dụng, hoặc nền tảng nào. Dưới đây là một số tính năng chính:
- Triển khai Tiến độ: Các pipeline Azure DevOps cho phép cấu hình nhiều giai đoạn để kiểm soát các giai đoạn dự án trong quá trình phát triển và kiểm thử, đảm bảo sự tiến triển được kiểm soát.
- Nhiều Đích Đến Triển khai: Các nhóm DevOps có thể triển khai các pipeline CI/CD của Azure đến các nền tảng trên nơi hoặc đám mây khác nhau, bao gồm máy ảo, cụm Kubernetes, dịch vụ Azure, container, và nhiều hơn nữa.
- Hỗ trợ Đa Ngôn ngữ Lập trình: Azure Pipelines hỗ trợ nhiều loại ngôn ngữ lập trình và loại ứng dụng, bao gồm PHP, JavaScript, Java, Python và các ngôn ngữ khác. Nó tương thích với các nền tảng Windows, Linux và macOS.
- Các Ưu đãi Miễn phí: Azure Pipelines hỗ trợ các sáng kiến mã nguồn mở bằng cách cung cấp miễn phí truy cập vào số phút xây dựng không giới hạn và tối đa mười công việc song song. Tích hợp với kho lưu trữ GitHub cho phép nhà phát triển dễ dàng thiết lập các pipeline CI/CD bằng ứng dụng Azure Pipelines.
Phát hành (Releases)
Trong Azure Pipelines, các pipeline phát hành giúp các nhóm cung cấp phần mềm liên tục đến khách hàng với tốc độ nhanh hơn và ít rủi ro hơn. Bạn có thể tự động hóa hoàn toàn quá trình kiểm thử và giao phần mềm ở các giai đoạn khác nhau cho đến khi sản phẩm được triển khai vào môi trường sản xuất. Hoặc có thể thiết lập các quy trình bán tự động với các phê duyệt và triển khai theo yêu cầu.
Các pipeline, giai đoạn, nhiệm vụ, phát hành và dữ liệu triển khai được lưu trữ qua các pipeline phát hành trong Azure Pipelines.
Quy trình từng bước để tạo một pipeline phát hành được mô tả như sau:
- Trong Azure DevOps, vào dự án sau đó, nhấp vào Pipelines từ menu. Sau đó, nhấp vào Release. Bạn sẽ được chuyển đến phần pipelines như được hiển thị trong Hình bên dưới.
- Nhấp vào New Pipeline và hộp thoại Chọn mẫu sẽ xuất hiện như trong Hình tiếp theo.
3. Nhấp vào Artifact. Một cửa sổ bật lên chọn Add an Artifact. Chọn loại Nguồn theo dự án. Sau đó, chọn Nguồn (xây dựng đường dẫn) và nhấp vào Add. Tham khảo Hình bên dưới.
4. Nhấp vào Add a stage và cửa sổ bật lên Chọn Select a template. Chọn một mẫu theo ứng dụng dự án và nhấp vào Áp dụng như trong Hình bên dưới.
5. Chọn Dev in Stages. Xem thêm hình bên dưới
6. Trong giai đoạn này, chọn tên, đặt tham số, đặt hành động, đặt Tên trang web và thêm liên kết. Tham khảo Hình tiếp theo.
7. Nhấp vào IIS Deployment. Một cửa sổ bật lên công việc của nhóm Deployment group job. Trong phần này, hãy chọn Tên hiển thị và nhóm Triển khai. Đặt Thời gian chờ và thời gian chờ hủy công việc, sau đó nhấp vào Artifact tải xuống phiên bản mới nhất như trong 2 hình ảnh bên dưới.
8. Nhấp vào + trong Triển khai IIS để thêm các tác vụ mới vào quy trình phát hành dựa trên yêu cầu như trong Hình bên dưới.
9. Nhấp vào Biến và phần biến sẽ xuất hiện. Ở đây, người ta có thể tạo một biến theo yêu cầu của họ. Tham khảo Hình tiếp theo.
10. Nhấp vào Lưu giữ và phần lưu giữ sẽ xuất hiện. Ở đây, người ta có thể đặt ngày để giữ lại bản phát hành và bản phát hành tối thiểu. Tham khảo Hình bên dưới.
11. Nhấp vào Lưu và chọn thư mục. Viết nhận xét về đường ống như trong Hình tiếp theo.
12. Nhấp vào Tạo bản phát hành và một cửa sổ bật lên để tạo bản phát hành mới sẽ xuất hiện. Tham khảo Hình tiếp theo.
13. Nhấp vào Tạo và đường dẫn sẽ được phát hành như trong Hình bên dưới.
Tích hợp Azure DevOps với LambdaTest
Việc tích hợp LambdaTest với Azure DevOps cho phép nhà phát triển tạo một mục công việc trực tiếp từ nền tảng LambdaTest. Nó cho phép thêm lỗi, epic, task, hoặc story vào dự án bất cứ lúc nào, ngay cả trong phiên kiểm thử. Các trường được phát triển bởi các chuyên gia khi đánh dấu lỗi với LambdaTest sẽ xuất hiện như thông tin trên mục công việc trong dự án Azure DevOps cho phiên kiểm thử đó.
Nhà phát triển có thể tuân theo các bước sau để tích hợp Azure DevOps vào tài khoản LambdaTest:
Bước 1: Đăng nhập vào tài khoản LambdaTest. Nhà phát triển phải có quyền truy cập cấp quản trị hoặc người dùng để xem và cài đặt tích hợp.
Bước 2: Từ thanh điều hướng bên trái, chọn Settings và nhấp vào Integrations. Điều này sẽ hiển thị một màn hình với danh sách các ứng dụng của bên thứ ba mà nhà phát triển có thể tích hợp vào tài khoản LambdaTest của họ. Sau đó, nhấp vào Connect, dưới phần mà nói là Azure DevOps như được hiển thị trong Hình bên dưới.
Bước 3: Khi nhà phát triển nhấp vào INSTALL, một cửa sổ pop-up sẽ xuất hiện yêu cầu họ nhập URL của Azure DevOps và Access Token của Azure DevOps như được hiển thị trong Hình bên dưới. Bằng cách làm như vậy, nhà phát triển sẽ cấp quyền truy cập cho LambdaTest vào các tài nguyên sở hữu bởi người dùng trên tài khoản Visual Studio Team Services của Microsoft. Điều này là cần thiết để xác thực giữa các API từ hai ứng dụng khác nhau. URL của Azure DevOps sẽ là tên miền. Sau khi nhà phát triển đăng nhập vào tài khoản Azure DevOps, họ sẽ có được URL dưới tổ chức của họ.
Bước 5: Nhà phát triển có thể thấy URL nếu họ đang ở trong một dự án trong tài khoản Azure DevOps của họ.
Azure DevOps Access Token Access token là chuỗi khóa cần thiết để truy cập vào một API. Chúng được cấp cho máy chủ khách và thường là một chuỗi không rõ ràng. Sử dụng access token để yêu cầu truy cập vào các tài nguyên được bảo vệ và có liên quan đến người dùng. Access token rất quan trọng từ góc độ bảo mật và có thể được tạo ra dưới nhiều định dạng khác nhau, tùy thuộc vào yêu cầu bảo mật được chỉ định trên máy chủ tài nguyên.
Nhà phát triển có thể tạo access token Azure DevOps của mình trong phần ‘Personal access tokens’. Điều này có thể được thực hiện bằng cách nhấp vào biểu tượng cài đặt gần góc phải trên cùng, nơi biểu tượng người dùng được hiển thị.
Bước 6: Sau khi nhấp vào + New Token, cung cấp một tên cho access token và thiết lập các thông số cho phép truy cập như được hiển thị trong Hình bên dưới. Bằng cách làm như vậy, nhà phát triển sẽ cấp cho bất kỳ API bên thứ ba nào mức độ truy cập cần thiết. Nhà phát triển phải chọn tùy chọn Full access và nhấp Create để tích hợp LambdaTest với Azure DevOps.
Khi một token được tạo, hãy sao chép nó vào clipboard và giữ trong một vị trí an toàn.
Access token không nên bị mất hoặc rơi vào tay nhầm lẫn vì chúng quan trọng như mật khẩu. Nếu bạn mất token trong tương lai hoặc nó được chia sẻ với người không đáng tin cậy, bạn luôn có thể hủy token hiện tại và tạo một token mới. Để hủy token, nhấp vào access token cá nhân và chọn Revoke.
Bước 7: Trong không gian được cung cấp, nhập URL của Azure DevOps và access token. Sau đó, nhấp vào Install.
Azure Artifacts
Azure Artifacts là một dịch vụ trong Azure DevOps giúp đơn giản hóa quản lý gói cho các nhà phát triển. Nó tạo ra, lưu trữ và phân phối các gói trong nhóm. Bạn có thể tích hợp artifacts một cách liền mạch vào các pipeline CI/CD chỉ với một cú nhấp chuột.
Kết nối với Feed trong Azure Artifacts
Quy trình từng bước để kết nối với feed được mô tả như sau:
- Trong Azure DevOps, truy cập vào dự án và nhấp vào Artifacts. Sau đó, một phần dự án artifacts sẽ xuất hiện như được hiển thị trong Hình bên dưới.
2. Nhấp vào Create feed. Nhập tên của feed, chọn mức độ hiển thị, sau đó, nhấp vào Create. Tham khảo Hình bên dưới.
3. Nhấp vào Connect to Feed và chọn nguồn cấp dữ liệu theo dự án. Sau đó, đưa tập lệnh vào mã dự án. Tham khảo Hình bên dưới.
Vai trò và tầm quan trọng của Azure Artifacts
Vai trò và tầm quan trọng của Azure Artifacts bao gồm:
- Quản lý Phụ thuộc: Azure Artifacts đơn giản hóa việc quản lý các phụ thuộc bằng cách cung cấp một vị trí tập trung để các nhà phát triển xử lý tất cả các thư viện, gói, hoặc các thành phần khác của họ. Sự hợp nhất này giúp các nhóm tránh trùng lặp, đảm bảo tính đồng nhất và tối ưu hóa quy trình phát triển của họ.
- Lưu trữ và Phân phối Gói:
- Các nhà phát triển có thể dễ dàng xuất bản các gói lên các feed được chỉ định trong Azure Artifacts, đóng vai trò như các kho lưu trữ cho các loại gói khác nhau.
- Các gói này có thể được chia sẻ trong các nhóm, giữa các tổ chức khác nhau, hoặc thậm chí công khai trên Internet.
- Các loại gói được hỗ trợ bao gồm NuGet, npm, Python, Maven, Cargo, và Universal Packages.
- Tiêu thụ Gói:
- Azure Artifacts cho phép các nhà phát triển lấy các gói từ các feed khác nhau và các registry công cộng.
- Khả năng thích ứng này cho phép các dự án tận dụng các gói hiện có và tránh trùng lặp công sức không cần thiết.
- Tính nhất quán và Hiệu quả:
- Artifacts đảm bảo tính nhất quán của các thành phần bằng cách duy trì tính bất biến của chúng sau khi được xuất bản, đảm bảo tính đồng nhất trên các bản build và triển khai.
- Nền tảng này cũng ưu tiên hiệu suất, đảm bảo việc truy xuất và giải quyết các gói được thực hiện một cách hiệu quả.
Khái niệm về Infrastructure as Code (IaC)
Infrastructure as Code (IaC) liên quan đến việc cấu hình hạ tầng thông qua mã thay vì thực hiện thủ công. Các quy trình thủ công yêu cầu các nhà điều hành và quản trị hệ thống phải cấu hình thủ công mọi thay đổi hạ tầng.
Với IaC, các nhóm phát triển có thể lưu trữ cả mã cấu hình hạ tầng và mã ứng dụng trong một kho lưu trữ tập trung. Phương pháp này đảm bảo triển khai nhất quán và an toàn hơn. Bằng cách tránh cấu hình và triển khai thủ công dễ gây lỗi, việc duy trì các tiêu chuẩn và chính sách bảo mật trở nên dễ dàng hơn. Ngoài ra, các nhà phát triển có thể tăng cường khả năng mở rộng và năng suất thông qua các triển khai nhanh chóng hơn.
Khi triển khai IaC, các nhà phát triển có nhiều công cụ để sử dụng cho Microsoft Azure như Azure Resource Manager (ARM) templates, HashiCorp Terraform và các ngôn ngữ kịch bản khai báo khác.
Cách tiếp cận triển khai IaC
Có hai cách tiếp cận khi triển khai IaC:
- Imperative Infrastructure as Code:
- Cách tiếp cận này liên quan đến việc viết các kịch bản trong các ngôn ngữ như Bash hoặc PowerShell. Các nhà phát triển chỉ định rõ các lệnh cần thực thi để đạt được kết quả mong muốn.
- Với các triển khai bắt buộc, các nhà phát triển chịu trách nhiệm quản lý thứ tự các phụ thuộc, kiểm soát lỗi và cập nhật tài nguyên.
- Declarative Infrastructure as Code:
- Với cách tiếp cận này, các nhà phát triển định nghĩa cách họ muốn môi trường của họ xuất hiện. Họ chỉ định kết quả mong muốn thay vì các bước cụ thể để đạt được nó.
- Công cụ sử dụng sẽ xác định cách đạt được kết quả mong muốn bằng cách kiểm tra trạng thái hiện tại, so sánh với trạng thái mong muốn, và sau đó áp dụng các thay đổi cần thiết.
ARM Template
Để triển khai IaC trong các giải pháp Azure của mình, các nhà phát triển có thể sử dụng các mẫu Azure Resource Manager (ARM templates). Các mẫu này là các tệp JavaScript Object Notation (JSON) mô tả hạ tầng và cấu hình cho một dự án. Sử dụng cú pháp khai báo, các mẫu ARM cho phép các nhà phát triển chỉ định những gì họ muốn triển khai mà không cần phải viết thứ tự các lệnh lập trình để tạo ra nó. Trong mẫu, các nhà phát triển định nghĩa các tài nguyên cần triển khai và các thuộc tính tương ứng của chúng.
Một mẫu ARM trống được hiển thị trong đoạn mã bên dưới:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
"parameters": {
},
"variables": {
},
"functions": [],
"resources": [
],
"outputs": {
}
}
Cấu trúc mẫu ARM trống bao gồm các phần sau:
- Parameters: Cho phép các nhà phát triển cung cấp các giá trị trong quá trình triển khai, giúp mẫu có thể được sử dụng trong các môi trường khác nhau.
- Variables: Định nghĩa các giá trị được sử dụng lại trong các mẫu và có thể được tạo ra từ các giá trị tham số.
- User-defined functions: Cho phép các nhà phát triển tạo ra các hàm tùy chỉnh để đơn giản hóa mẫu.
- Resources: Phần này chỉ định các tài nguyên cần triển khai.
- Outputs: Phần này trả về các giá trị từ các tài nguyên đã triển khai.
Terraform
Terraform là một công cụ tạo mẫu có phí có khả năng cung cấp các ứng dụng đám mây gốc trên các nền tảng đám mây hàng đầu như Azure, Google Cloud Platform, AWS và AliCloud. Không giống như JSON, Terraform sử dụng HashiCorp Configuration Language (HCL), ngôn ngữ này ngắn gọn hơn cho việc định nghĩa các mẫu.
Dưới đây là một mẫu Terraform ví dụ:
resource "azurerm_resource_group" "example" {
name = "example-resources"
location = "West Europe"
}
resource "azurerm_template_deployment" "example" {
name = "acctesttemplate-01"
resource_group_name = azurerm_resource_group.example.name
template_body = <<DEPLOY
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS", "Standard_GRS", "Standard_ZRS"
],
"metadata": {
"description": "Storage Account type"
}
}
},
"variables": {
"location": "[resourceGroup().location]",
"storageAccountName": "[concat(uniquestring(resourceGroup().id), 'storage')]",
"publicIPAddressName": "[concat('myPublicIp', uniquestring(resourceGroup().id))]",
"publicIPAddressType": "Dynamic",
"apiVersion": "2015-06-15",
"dnsLabelPrefix": "terraform-acctest"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageAccountName')]",
"apiVersion": "[variables('apiVersion')]",
"location": "[variables('location')]",
"properties": {
"accountType": "[parameters('storageAccountType')]"
}
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "[variables('apiVersion')]",
"name": "[variables('publicIPAddressName')]",
"location": "[variables('location')]",
"properties": {
"publicIPAllocationMethod": "[variables('publicIPAddressType')]",
"dnsSettings": {
"domainNameLabel": "[variables('dnsLabelPrefix')]"
}
}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('storageAccountName')]"
}
}
}
DEPLOY
parameters = {
storageAccountType = "Standard_GRS"
}
deployment_mode = "Incremental"
}
output "storageAccountName" {
value = azurerm_template_deployment.example.outputs["storageAccountName"]
}
Giải thích:
- resource “azurerm_resource_group” “example”: Tạo một nhóm tài nguyên mới trong Azure.
- resource “azurerm_template_deployment” “example”: Tạo một triển khai mẫu mới sử dụng ARM template.
Các cặp khóa-giá trị này được truyền vào khối tham số của ARM template, với giá trị storageAccountType
được đặt là “Standard_GRS”.