Giới thiệu về Các phương pháp hay nhất về CI / CD
Tích hợp, phân phối và triển khai liên tục , được gọi chung là CI / CD, là một phần không thể thiếu của phát triển hiện đại nhằm giảm lỗi trong quá trình tích hợp và triển khai đồng thời tăng tốc độ dự án. CI / CD là một triết lý và tập hợp các thực hành thường được tăng cường bằng cách sử dụng công cụ mạnh mẽ nhấn mạnh vào kiểm tra tự động ở mỗi giai đoạn của quy trình phần mềm. Bằng cách kết hợp những ý tưởng này vào thực tiễn của bạn , bạn có thể giảm thời gian cần thiết để tích hợp các thay đổi cho một bản phát hành và kiểm tra kỹ từng thay đổi trước khi chuyển nó vào production .CI / CD có nhiều lợi ích tiềm năng, nhưng việc thực hiện thành công thường đòi hỏi phải cân nhắc kỹ . Quyết định chính xác cách sử dụng các công cụ và những thay đổi nào bạn có thể cần trong môi trường hoặc quy trình của bạn có thể là một thách thức nếu không có thử nghiệm và sai sót rộng rãi. Tuy nhiên, mặc dù tất cả các cách triển khai sẽ khác nhau, nhưng việc tuân theo các phương pháp hay nhất có thể giúp bạn tránh được các vấn đề thường gặp và cải thiện nhanh hơn.
Trong hướng dẫn này, ta sẽ giới thiệu một số hướng dẫn cơ bản về cách triển khai và duy trì hệ thống CI / CD để phục vụ tốt nhất nhu cầu của tổ chức bạn. Ta sẽ đề cập đến một số phương pháp sẽ giúp bạn cải thiện hiệu quả của dịch vụ CI / CD của bạn . Vui lòng đọc qua như đã viết hoặc chuyển sang các lĩnh vực mà bạn quan tâm.
Giữ các đường ống dẫn của bạn nhanh chóng
Các đường ống CI / CD giúp kiểm soát các thay đổi thông qua các chu kỳ kiểm tra tự động, ra môi trường dàn dựng và cuối cùng là production . Đường ống thử nghiệm của bạn càng toàn diện, bạn càng có thêm sự đảm bảo những thay đổi sẽ không gây ra các tác dụng phụ không lường trước được khi triển khai production của bạn. Tuy nhiên, vì mỗi thay đổi phải trải qua quá trình này, nên việc giữ cho đường ống của bạn nhanh và tin cậy là điều cực kỳ quan trọng để không kìm hãm tốc độ phát triển.
Sự căng thẳng giữa hai yêu cầu này có thể khó cân bằng. Có một số bước đơn giản mà bạn có thể thực hiện để cải thiện tốc độ, như mở rộng cơ sở hạ tầng CI / CD và tối ưu hóa các bài kiểm tra. Tuy nhiên, khi thời gian trôi qua, bạn có thể buộc phải đưa ra các quyết định quan trọng về giá trị tương đối của các thử nghiệm khác nhau và giai đoạn hoặc thứ tự mà chúng được chạy. Đôi khi, chia nhỏ bộ thử nghiệm của bạn bằng cách loại bỏ các thử nghiệm có giá trị thấp hoặc có kết luận không xác định là cách thông minh nhất để duy trì tốc độ yêu cầu của đường ống được sử dụng nhiều.
Khi đưa ra những quyết định quan trọng này, hãy đảm bảo bạn hiểu và ghi lại những đánh đổi mà bạn đang thực hiện. Tham khảo ý kiến của các thành viên trong group và các bên liên quan để điều chỉnh các giả định của group về những gì bộ thử nghiệm chịu trách nhiệm và các lĩnh vực trọng tâm chính nên là gì.
Cô lập và bảo mật môi trường CI / CD của bạn
Từ quan điểm bảo mật hoạt động, hệ thống CI / CD của bạn đại diện cho một số cơ sở hạ tầng quan trọng nhất cần bảo vệ. Vì hệ thống CI / CD có toàn quyền truy cập vào cơ sở mã và thông tin đăng nhập của bạn để triển khai trong các môi trường khác nhau, nên điều cần thiết là phải bảo mật nó để bảo vệ dữ liệu nội bộ và đảm bảo tính toàn vẹn của trang web hoặc sản phẩm của bạn. Do mục tiêu có giá trị cao, điều quan trọng là phải cách ly và khóa CI / CD của bạn càng nhiều càng tốt.
Hệ thống CI / CD nên được triển khai tới các mạng nội bộ, được bảo vệ, không bị tiếp xúc với các bên ngoài.Nên cài đặt VPN hoặc công nghệ kiểm soát truy cập mạng khác đảm bảo rằng chỉ những nhà khai thác đã được xác thực mới có thể truy cập vào hệ thống của bạn. Tùy thuộc vào độ phức tạp của cấu trúc liên kết mạng của bạn, hệ thống CI / CD của bạn có thể cần truy cập vào một số mạng khác nhau để triển khai mã cho các môi trường khác nhau. Nếu không được bảo mật hoặc cô lập đúng cách, những kẻ tấn công giành được quyền truy cập vào một môi trường có thể đảo hop , một kỹ thuật được sử dụng để mở rộng quyền truy cập bằng cách tận dụng các luật mạng nội bộ khoan dung hơn, để truy cập vào các môi trường khác thông qua các điểm yếu trong CI / CD của bạn may chủ.
Các chiến lược cách ly và bảo mật được yêu cầu sẽ phụ thuộc nhiều vào cấu trúc liên kết mạng, cơ sở hạ tầng cũng như các yêu cầu quản lý và phát triển của bạn. Điểm quan trọng cần ghi nhớ là hệ thống CI / CD của bạn là những mục tiêu có giá trị cao và trong nhiều trường hợp, chúng có quyền truy cập rộng rãi vào các hệ thống quan trọng khác của bạn. Che chắn tất cả các truy cập bên ngoài vào server và kiểm soát chặt chẽ các loại truy cập nội bộ được phép sẽ giúp giảm nguy cơ hệ thống CI / CD của bạn bị xâm phạm.
Biến đường ống CI / CD thành cách duy nhất để triển khai vào production
Một phần của điều khiến CI / CD có thể cải thiện các phương pháp phát triển và chất lượng mã của bạn là công cụ thường giúp thực thi các phương pháp hay nhất để kiểm tra và triển khai. Việc quảng bá mã thông qua các đường ống CI / CD của bạn yêu cầu mỗi thay đổi phải chứng minh rằng nó tuân theo các tiêu chuẩn và quy trình được hệ thống hóa của tổ chức bạn. Các lỗi trong đường ống CI / CD có thể nhìn thấy ngay lập tức và ngăn cản quá trình phát hành bị ảnh hưởng đến các giai đoạn sau của chu kỳ. Đây là một cơ chế bảo vệ cổng nhằm bảo vệ các môi trường quan trọng hơn khỏi mã không tin cậy .
Tuy nhiên, để nhận ra những lợi thế này, bạn cần phải có kỷ luật đảm bảo rằng mọi thay đổi đối với môi trường production của bạn đều đi đúng hướng của bạn. Đường ống CI / CD phải là cơ chế duy nhất mà mã đi vào môi trường production . Điều này có thể tự động xảy ra khi kết thúc thử nghiệm thành công với các phương pháp triển khai liên tục hoặc thông qua quảng bá thủ công các thay đổi đã thử nghiệm được hệ thống CI / CD của bạn chấp thuận và cung cấp.
Thông thường, các group bắt đầu sử dụng các đường ống của họ để triển khai, nhưng bắt đầu đưa ra các ngoại lệ khi sự cố xảy ra và có áp lực phải giải quyết chúng nhanh chóng. Mặc dù thời gian chết và các vấn đề khác cần được giảm thiểu càng sớm càng tốt, điều quan trọng là phải hiểu rằng hệ thống CI / CD là một công cụ tốt đảm bảo rằng các thay đổi không tạo ra các lỗi khác hoặc phá vỡ hệ thống. Đặt bản sửa lỗi của bạn thông qua đường ống (hoặc chỉ sử dụng hệ thống CI / CD để khôi phục) cũng sẽ ngăn việc triển khai tiếp theo xóa một hotfix đặc biệt đã được áp dụng trực tiếp vào production . Quy trình bảo vệ tính hợp lệ của các triển khai của bạn dù đây là bản phát hành thường xuyên, theo kế hoạch hay bản sửa lỗi nhanh để giải quyết sự cố đang diễn ra. Việc sử dụng hệ thống CI / CD này là một lý do khác để làm việc để giữ cho đường dẫn của bạn nhanh chóng .
Duy trì tính ngang bằng với production ở bất cứ đâu có thể
Các đường ống CI / CD thúc đẩy các thay đổi thông qua một loạt các bộ thử nghiệm và môi trường triển khai.Các thay đổi vượt qua các yêu cầu của một giai đoạn được triển khai tự động hoặc được xếp hàng đợi để triển khai thủ công vào các môi trường hạn chế hơn. Các giai đoạn đầu nhằm chứng minh rằng việc tiếp tục thử nghiệm và thúc đẩy các thay đổi gần hơn với quá trình production là rất đáng giá.
Đặc biệt, đối với các giai đoạn sau, việc tái tạo môi trường production càng gần càng tốt trong môi trường thử nghiệm giúp đảm bảo các thử nghiệm phản ánh chính xác cách thức thay đổi sẽ diễn ra trong production . Sự khác biệt đáng kể giữa dàn dựng và production có thể cho phép phát hành những thay đổi có vấn đề mà chưa bao giờ được phát hiện là có lỗi trong quá trình thử nghiệm. Càng có nhiều khác biệt giữa môi trường sống của bạn và môi trường thử nghiệm, thì các thử nghiệm của bạn càng ít đo lường cách mã sẽ hoạt động khi được phát hành.
Dự kiến sẽ có một số khác biệt giữa dàn dựng và production , nhưng việc quản lý chúng và đảm bảo chúng được hiểu rõ là điều cần thiết. Một số tổ chức sử dụng triển khai xanh lam-xanh lục để swap lưu lượng production giữa hai môi trường gần như giống hệt nhau xen kẽ giữa việc được chỉ định production và dàn dựng. Các chiến lược ít khắc nghiệt hơn liên quan đến việc triển khai cùng một cấu hình và cơ sở hạ tầng từ production đến môi trường dàn dựng của bạn, nhưng ở quy mô nhỏ hơn. Các mục như điểm cuối mạng có thể khác nhau giữa các môi trường của bạn, nhưng việc tham số hóa loại dữ liệu biến này có thể giúp đảm bảo mã nhất quán và sự khác biệt về môi trường được xác định rõ ràng.
Xây dựng chỉ một lần và thúc đẩy kết quả thông qua đường ống
Mục tiêu chính của kênh CI / CD là xây dựng lòng tin vào những thay đổi và giảm thiểu khả năng bị ảnh hưởng không mong muốn. Ta đã thảo luận về tầm quan trọng của việc duy trì tính ngang bằng giữa các môi trường, nhưng một thành phần của điều này đủ quan trọng đảm bảo sự chú ý thêm. Nếu phần mềm của bạn yêu cầu bước xây dựng, đóng gói hoặc gói, thì bước đó chỉ nên được thực hiện một lần và kết quả kết quả sẽ được sử dụng lại trong toàn bộ quy trình.
Hướng dẫn này giúp ngăn ngừa các vấn đề phát sinh khi phần mềm được biên dịch hoặc đóng gói nhiều lần, cho phép đưa vào các phần mềm tạo ra những điểm không nhất quán nhỏ. Việc xây dựng phần mềm một cách riêng biệt ở mỗi giai đoạn mới có thể nghĩa là các thử nghiệm trong môi trường trước đó không nhắm đến đến cùng một phần mềm sẽ được triển khai sau đó, làm mất hiệu lực của kết quả.
Để tránh vấn đề này, các hệ thống CI nên bao gồm một quy trình xây dựng như là bước đầu tiên trong quy trình tạo và đóng gói phần mềm trong một môi trường sạch. Phần mềm kết quả phải được tạo version và tải lên hệ thống lưu trữ phần mềm để được kéo xuống trong các giai đoạn tiếp theo của đường ống, đảm bảo bản dựng không thay đổi khi nó tiến triển qua hệ thống.
Chạy các bài kiểm tra nhanh nhất của bạn sớm
Mặc dù giữ cho toàn bộ đường dẫn của bạn nhanh chóng là một mục tiêu chung tuyệt vời, nhưng các phần của bộ thử nghiệm của bạn chắc chắn sẽ nhanh hơn những phần khác. Vì hệ thống CI / CD đóng role như một đường dẫn cho tất cả các thay đổi xâm nhập vào hệ thống của bạn, việc phát hiện ra các lỗi càng sớm càng tốt là điều quan trọng để giảm thiểu tài nguyên dành cho các bản dựng có vấn đề. Để làm điều này, hãy ưu tiên và chạy các bài kiểm tra nhanh nhất của bạn trước. Lưu các thử nghiệm phức tạp, chạy dài cho đến khi bạn đã xác thực bản dựng bằng các thử nghiệm nhỏ hơn, chạy nhanh.
Chiến lược này có một số lợi ích có thể giúp giữ cho quá trình CI / CD của bạn khỏe mạnh. Nó khuyến khích bạn hiểu tác động hiệu suất của các bài kiểm tra riêng lẻ, cho phép bạn hoàn thành sớm hầu hết các bài kiểm tra của bạn và tăng khả năng thất bại nhanh chóng, nghĩa là các thay đổi có vấn đề có thể được hoàn nguyên hoặc sửa trước khi chặn công việc của các thành viên khác.
Ưu tiên kiểm tra thường nghĩa là chạy các bài kiểm tra đơn vị của dự án của bạn trước tiên vì chúng có xu hướng nhanh chóng, riêng biệt và tập trung vào thành phần. Sau đó, các bài kiểm tra tích hợp thường đại diện cho mức độ phức tạp và tốc độ tiếp theo, tiếp theo là các bài kiểm tra trên toàn hệ thống và cuối cùng là các bài kiểm tra chấp nhận, thường yêu cầu mức độ tương tác của con người.
Giảm thiểu sự phân nhánh trong Hệ thống kiểm soát version của bạn
Một trong những nguyên tắc chính của CI / CD là tích hợp các thay đổi vào repository chia sẻ chính sớm và thường xuyên. Điều này giúp tránh các vấn đề tích hợp tốn kém khi nhiều nhà phát triển cố gắng hợp nhất các thay đổi lớn, khác nhau và xung đột vào nhánh chính của repository để chuẩn bị phát hành. Thông thường, các hệ thống CI / CD được cài đặt để theo dõi và kiểm tra các thay đổi chỉ được commit cho một hoặc một vài nhánh.
Để tận dụng những lợi ích mà CI cung cấp, cách tốt nhất là giới hạn số lượng và phạm vi của các nhánh trong repository lưu trữ của bạn. Hầu hết các triển khai đề xuất rằng các nhà phát triển commit trực tiếp với chi nhánh chính hoặc hợp nhất các thay đổi từ các chi nhánh local của họ ít nhất một lần mỗi ngày.
Về cơ bản, các nhánh không được theo dõi bởi hệ thống CI / CD của bạn chứa mã chưa được kiểm tra nên được coi là trách nhiệm đối với sự thành công và động lực của dự án của bạn. Giảm thiểu phân nhánh để khuyến khích tích hợp sớm mã của các nhà phát triển khác nhau giúp tận dụng các điểm mạnh của hệ thống và ngăn các nhà phát triển phủ nhận những lợi thế mà nó cung cấp.
Chạy thử nghiệm local trước khi commit với đường ống CI / CD
Liên quan đến điểm trước đó về việc phát hiện sớm các lỗi, các nhà phát triển nên được khuyến khích chạy càng nhiều thử nghiệm local trước khi commit với repository được chia sẻ. Điều này giúp bạn có thể phát hiện một số thay đổi có vấn đề nhất định trước khi chúng chặn các thành viên khác trong group . Mặc dù môi trường nhà phát triển local sẽ không thể chạy toàn bộ bộ thử nghiệm trong một môi trường giống như production , nhưng bước bổ sung này giúp các cá nhân tự tin hơn rằng những thay đổi họ đang thực hiện đã vượt qua các thử nghiệm cơ bản và đáng để cố gắng tích hợp với cơ sở mã lớn hơn.
Để đảm bảo các nhà phát triển có thể tự kiểm tra hiệu quả, bộ thử nghiệm của bạn phải chạy được bằng một lệnh duy nhất có thể chạy từ bất kỳ môi trường nào. Cùng một lệnh được các nhà phát triển sử dụng trên các máy local của họ nên được sử dụng bởi hệ thống CI / CD để bắt đầu các thử nghiệm trên mã được hợp nhất vào repository . Thông thường, điều này được điều phối bằng cách cung cấp tập lệnh shell hoặc makefile để tự động chạy các công cụ kiểm tra theo cách có thể lặp lại, có thể dự đoán được.
Chạy thử nghiệm trong môi trường phù du khi có thể
Để giúp đảm bảo các bài kiểm tra của bạn chạy giống nhau ở các giai đoạn khác nhau, bạn thường nên sử dụng các môi trường kiểm tra ngắn hạn, sạch sẽ khi có thể. Thông thường, điều này nghĩa là chạy các bài kiểm tra trong các containers để tìm ra sự khác biệt trừu tượng giữa các hệ thống server và để cung cấp một API tiêu chuẩn để kết nối các thành phần với nhau ở các quy mô khác nhau.Vì các container chạy ở trạng thái tối thiểu, các tác dụng phụ còn lại từ quá trình thử nghiệm không được kế thừa bởi các lần chạy tiếp theo của bộ thử nghiệm, điều này có thể làm hỏng kết quả.
Một lợi ích khác của môi trường thử nghiệm được đóng gói là tính di động của cơ sở hạ tầng thử nghiệm của bạn. Với containers , các nhà phát triển có thời gian dễ dàng hơn trong việc sao chép cấu hình sẽ được sử dụng sau này trong đường ống mà không phải cài đặt và duy trì cơ sở hạ tầng theo cách thủ công hoặc hy sinh tính trung thực của môi trường. Vì các container có thể dễ dàng xoay tròn khi cần và sau đó bị phá hủy, user có thể thực hiện ít thỏa hiệp hơn về độ chính xác của môi trường thử nghiệm của họ khi chạy các thử nghiệm local . Nói chung, việc sử dụng các khóa container trong một số khía cạnh của môi trường thời gian chạy để giúp giảm thiểu sự khác biệt giữa các giai đoạn đường ống.
Kết luận
Mặc dù việc triển khai mỗi CI / CD sẽ khác nhau, nhưng việc tuân theo một số nguyên tắc cơ bản này sẽ giúp bạn tránh được một số cạm bẫy phổ biến và củng cố các phương pháp kiểm tra và phát triển của bạn. Như với hầu hết các khía cạnh của tích hợp liên tục, sự kết hợp giữa quy trình, công cụ và thói quen sẽ giúp thay đổi phát triển thành công và có tác động hơn.
Để tìm hiểu thêm về các thông lệ chung về CI / CD và cách cài đặt các dịch vụ CI / CD khác nhau, hãy xem các bài viết khác có thẻ CI / CD .
Các tin liên quan