Traffic Count

Nhiều người cùng viết một phần mềm mà không "giẫm chân" nhau: Git, nhánh mã và Azure Pipelines

Một phần mềm quản lý khách sạn có thể có nhiều lập trình viên cùng sửa mỗi ngày. Làm sao để mã của người này không phá mã của người kia, còn mỗi thay đổi đều được kiểm tra trước khi đến tay người dùng?

Hãy nghĩ đến một bài thuyết trình nhóm. Năm bạn cùng sửa một file, bạn này vừa lưu thì bạn kia ghi đè mất. Ai sửa gì, bản nào mới nhất, không ai rõ. Lập trình viên gặp đúng chuyện này, chỉ có điều quy mô lớn hơn nhiều. Tác giả Antonio Liccardi, kỹ sư DevOps, kể trong lời mở đầu cuốn Azure Pipelines Succinctly rằng năm 2007, lần đầu làm phần mềm cho công ty, việc chia sẻ và quản lý mã với đồng nghiệp là điều rất khó khăn đối với ông.

Git và "nhánh": mỗi người một bản nháp riêng

Công cụ giải quyết chuyện này là hệ thống quản lý phiên bản, phổ biến nhất hiện nay là Git. Git lưu lại toàn bộ lịch sử thay đổi, ai sửa dòng nào, lúc nào. Khái niệm quan trọng nhất là nhánh (branch): mỗi người tách ra một nhánh riêng để làm tính năng của mình, xong việc mới gộp lại vào nhánh chính.

Sách giới thiệu vài chiến lược chia nhánh. Cách đơn giản là GitHub flow: một nhánh chính, mỗi tính năng một nhánh phụ, làm xong thì gửi "yêu cầu gộp" (pull request) để đồng nghiệp xem lại. Cách bài bản hơn là GitFlow do Vincent Driessen đề xuất, phù hợp dự án lớn có lịch phát hành rõ ràng.

 Hình 1. Mô hình GitFlow: nhánh develop chứa tính năng mới, các nhánh feature, release, hotfix tách ra rồi gộp về, nhánh master chỉ chứa các bản phát hành

Trong GitFlow, mỗi loại nhánh có ý nghĩa riêng: develop cho bản đang phát triển, feature cho từng tính năng, release để chuẩn bị phát hành, hotfix để vá lỗi gấp trên bản đang chạy. Nhìn sơ đồ có vẻ rối, nhưng chính sự rõ ràng này giúp cả đội làm việc song song mà không loạn.

Azure Pipelines: dây chuyền tự động của phần mềm

Khi mã được gộp vào, ai kiểm tra nó có chạy được không? Đó là việc của Azure Pipelines, một phần của bộ công cụ Azure DevOps. Theo sách, ý tưởng cơ bản là mỗi thay đổi trong kho mã sẽ kích hoạt một đường ống (pipeline) tự động biên dịch và kiểm thử phần mềm. Kết quả là các gói sản phẩm, rồi tiếp tục được đưa qua nhiều giai đoạn triển khai.

Azure Pipelines hỗ trợ nhiều ngôn ngữ lập trình, chạy được trên Windows, Linux, macOS và triển khai lên đám mây hay máy chủ riêng. Đường ống có thể tạo bằng giao diện kéo thả hoặc viết bằng YAML, một dạng file cấu hình dễ đọc.

Học qua dự án khách sạn GalaxyHotel

Để học sát thực tế, sách xây dựng hệ thống quản lý khách sạn GalaxyHotel viết bằng C# trên .NET Core. Hệ thống gồm một website cho khách đặt phòng, một ứng dụng cho bộ phận hỗ trợ và vài thư viện dùng chung. Các phần được tách thành nhiều kho mã riêng, mô phỏng tình huống ngoài đời khi nhiều đội làm nhiều ứng dụng, mỗi phần có số phiên bản riêng.

Mỗi ứng dụng có đường ống riêng: biên dịch, chạy kiểm thử tự động, đóng gói, rồi đưa lên môi trường thử nghiệm và môi trường thật. Kể cả kiểm thử giao diện, tức là máy tự bấm thử trên trang web như người dùng thật, cũng được chạy tự động.

 Hình 2. Báo cáo kiểm thử tự động sau một lần chạy đường ống: 1 bài kiểm thử, đạt 100%

Những nghề cần kỹ năng này

Git là công cụ mà gần như mọi lập trình viên đều dùng hằng ngày. Biết chia nhánh, gộp mã, xem lại mã cho đồng nghiệp là yêu cầu cơ bản khi đi làm. Còn thiết kế đường ống tự động là công việc chính của kỹ sư DevOps, kỹ sư CI/CD, kỹ sư kiểm thử tự động. Bản thân tác giả cuốn sách làm kỹ sư DevOps kiêm giảng viên đào tạo.

Người học rèn được tính kỷ luật trong làm việc nhóm: mỗi thay đổi phải có lý do, có người xem lại, có kiểm thử. Bạn cũng quen với tư duy tự động hóa, để máy làm những việc lặp lại còn con người tập trung vào việc sáng tạo.

Làm việc nhóm là kỹ năng nghề

Nhiều bạn nghĩ lập trình là ngồi một mình gõ mã. Thực tế, phần mềm lớn nào cũng là sản phẩm của cả đội. Các công cụ như Git, Azure Pipelines chính là "luật chơi chung" giúp đội ấy phối hợp. Làm quen với chúng sớm, bạn sẽ tự tin bước vào môi trường làm việc chuyên nghiệp của ngành công nghệ thông tin.

Trường Cao đẳng Công nghệ thông tin TP.HCM

  • Website: itc.edu.vn - Email tuyển sinh: tuyensinh@itc.edu.vn
  • Điện thoại: (028) 386 050 03 - Hotline: 093 886 1080 / 097 500 5356
  • Địa chỉ: 12 Trịnh Đình Thảo, P. Tân Phú, TP.HCM

ThS. Trương Châu Long - Trưởng bộ môn CNTT & HTTT