12.1 Thực hiện thay đổi trong mã
Như mình đã nói ở trên, mọi phát triển hiện đại là thực hiện các thay đổi nhỏ trong mã. Hàng triệu lập trình viên đã làm điều này trong nhiều thập kỷ, vì vậy quá trình này đã được điều chỉnh, tiêu chuẩn hóa và chính thức hóa bằng mọi cách có thể.
Đầu tiên, để lưu trữ mã, có một chương trình đặc biệt - Git. Git - là hệ thống quản lý phiên bản phân tán, được sử dụng để theo dõi các thay đổi trong mã và phối hợp công việc của lập trình viên trong các dự án chung.
Git cho phép các nhà phát triển tạo nhánh trong dự án, đồng thời lưu trữ đầy đủ lịch sử thay đổi và khả năng quay lại bất kỳ trạng thái nào của tệp. Điều này đảm bảo việc hợp nhất thay đổi được hiệu quả và giải quyết xung đột, làm cho Git trở thành công cụ chính cho công việc tập thể về mã trong phát triển phần mềm hiện đại.
Thứ hai, quá trình thực hiện thay đổi trong mã cũng đã được tiêu chuẩn hóa. Thông thường, cho mỗi tính năng mới, bạn tạo một nhánh mới trong git, thực hiện các thay đổi của bạn dưới dạng một loạt các commit, và sau đó gửi Pull Request cho team lead hoặc đồng nghiệp của bạn để họ thực hiện Code Review và xác nhận các thay đổi của bạn.
Nếu mọi thứ diễn ra tốt đẹp, thay đổi của bạn sẽ được hợp nhất vào nhánh dev, tự động kích hoạt việc build dự án và các bài kiểm tra. Nhiều bài kiểm tra.
12.2 Tập hợp dự án
Trước khi kiểm tra dự án hoặc tải lên server, nó cần được tập hợp.
Tập hợp dự án - là quá trình biên dịch mã nguồn của dự án thành các chương trình thực thi hoặc các định dạng có thể chạy khác, thường kèm theo kiểm tra và triển khai. Đây là một khía cạnh quan trọng trong phát triển phần mềm, đảm bảo chương trình sẵn sàng sử dụng.
Tập hợp không phải là biên dịch, nhưng biên dịch thường là một phần của quá trình tập hợp. Sau khi hoàn thành tập hợp, bạn thường có thể có hàng chục hoặc thậm chí hàng trăm tập tin cần tải lên các server khác nhau.
Các công cụ tập hợp có thể ở mức thấp:
Maven và Gradle - được sử dụng rộng rãi trong các dự án Java để quản lý phụ thuộc và tập hợp dự án.
Apache Ant - là một công cụ khác để tập hợp dự án Java, cung cấp sự linh hoạt lớn trong việc viết kịch bản tập hợp.
MSBuild - được sử dụng để tập hợp các dự án được tạo bằng Microsoft Visual Studio.
Make - công cụ tập hợp cổ điển, sử dụng Makefile để xác định quy tắc tập hợp, đặc biệt phổ biến trong các dự án C và C++.
Webpack - thường được sử dụng để tập hợp ứng dụng JavaScript, quản lý phụ thuộc và module.
Gulp và Grunt - công cụ giúp tự động hóa các tác vụ thường xuyên trong phát triển ứng dụng web, như nén file và biên dịch SCSS thành CSS.
Các công cụ tập hợp có thể ở mức cao và sẽ được nói về sau.
12.3 CI/CD
CI/CD (Continuous Integration/Continuous Delivery) - là phương pháp luận, cho phép hợp nhất liên tục các thay đổi từ tất cả các nhánh phát triển vào nhánh chính và tự động kiểm tra và triển khai những thay đổi này. Điều này cho phép nhanh chóng phát hiện và sửa lỗi, tăng hiệu quả và tốc độ phát triển.
Một trong những hệ thống CI/CD phổ biến nhất, mặc dù có phần lỗi thời - là Jenkins. Nếu bạn làm việc trong một công ty nhỏ, họ sẽ sử dụng với xác suất 80%.
Jenkins - hệ thống tự động hóa phổ biến, được sử dụng cho tích hợp liên tục và phân phối (CI/CD). Jenkins cho phép tự động hóa các giai đoạn khác nhau trong phát triển phần mềm, bao gồm tập hợp, kiểm tra và triển khai, cải thiện chất lượng mã và tăng tốc quá trình phát triển.
Nếu bạn vào một công ty lớn, có thể có thêm 5 lựa chọn khác:
TeamCity - hệ thống thương mại mạnh mẽ từ JetBrains, cung cấp tích hợp sâu với các môi trường phát triển và kiểm tra khác nhau.
GitLab CI - là một phần tích hợp của GitLab, cung cấp tích hợp liên tục và phân phối với khả năng cấu hình thông qua file YAML.
CircleCI - dịch vụ đám mây CI/CD, hỗ trợ tự động hóa kiểm tra và triển khai cho nhiều dự án.
Travis CI - một trong những dịch vụ CI đám mây đầu tiên, được sử dụng trong nhiều dự án mở, tích hợp tốt với GitHub.
Bamboo - sản phẩm từ Atlassian, tích hợp chặt chẽ với các công cụ khác của công ty, như Jira và Bitbucket.
Không cần phải biết và làm việc với chúng: thường thì công ty có nhân viên DevOps, người thiết lập tất cả các quá trình tập hợp này. Bạn chỉ cần biết rằng chúng tồn tại và hiểu rõ điều gì đang diễn ra khi có đề cập đến Jenkins, CI/CD hoặc 'tích hợp liên tục'.
12.4 Chuyển dự án lên server
Việc viết một dự án thôi chưa đủ, nó còn phải xuất hiện trên server của bạn. Triển khai (deploy) dự án lên server thực sự là quá trình đặt và kích hoạt ứng dụng web trên server để nó có thể truy cập được qua internet.
Điều này bao gồm việc chuyển tệp tin dự án lên server, cấu hình môi trường server, cơ sở dữ liệu, phụ thuộc, cũng như cấu hình cài đặt mạng và bảo mật.
Bạn nghĩ mã của bạn sẽ lên server như thế nào? Ai đó sẽ tải nó lên đó? Hay bạn sẽ kết nối qua SSH đến server từ xa, tải lên một vài file và cấu hình mọi thứ? Đừng lo lắng: không ai làm thế nữa. Bây giờ có Docker.
Docker - là nền tảng phát triển, cung cấp và chạy ứng dụng bằng cách sử dụng containerization. Docker làm cho việc tạo, triển khai và thực hiện ứng dụng dễ dàng hơn với việc sử dụng container, cho phép đóng gói ứng dụng với toàn bộ môi trường và phụ thuộc trong một đối tượng nhọn nhẹ, đảm bảo sự nhất quán môi trường qua các giai đoạn phát triển, kiểm tra và sản xuất.
Docker cho phép đóng gói dự án của bạn hoặc các dự án vào Docker container. Nó giống như một máy ảo nhẹ.
Và mặc dù trên bất kỳ diễn đàn nào về Docker, nếu bạn gọi nó là máy ảo, bạn sẽ bị chỉ trích, nhưng nếu bạn biết máy ảo là gì, bạn có thể nghĩ về Docker container như một máy ảo nhẹ.
Thực tế, Docker container là 'máy ảo' ảo. Máy ảo bao gồm bản sao đầy đủ hệ điều hành, kernel hệ điều hành và phần cứng ảo, trong khi Docker container chia sẻ kernel của host và có thể nhẹ hơn và nhanh hơn.
Và triển khai dự án bằng Docker đơn giản hóa rất nhiều quá trình triển khai ứng dụng, đảm bảo tốc độ và độ tin cậy. Dự án được đóng gói trong các Docker container, có thể dễ dàng di chuyển và chạy trên bất kỳ hệ thống nào hỗ trợ Docker.
Điều này loại bỏ các vấn đề liên quan đến sự khác biệt trong các môi trường server, và cho phép dễ dàng mở rộng ứng dụng, thêm hoặc xóa container theo tải. Tất cả đã chuyển sang Docker - nó rất tiện lợi và rất đơn giản.
GO TO FULL VERSION