Bạn đang tìm kiếm một giải pháp toàn diện để quản lý mã nguồn, theo dõi dự án và tự động hóa quy trình phát triển phần mềm? GitLab chính là câu trả lời. Đây không chỉ là một kho chứa Git đơn thuần mà còn là một nền tảng DevOps mạnh mẽ, tích hợp mọi thứ từ CI/CD, quản lý sự cố đến bảo mật. Tầm quan trọng của GitLab trong thế giới công nghệ hiện đại là không thể phủ nhận, giúp các nhóm làm việc cộng tác hiệu quả và tăng tốc độ đưa sản phẩm ra thị trường.
Để GitLab hoạt động ổn định, nó cần một nền tảng vững chắc. Ubuntu 20.04, với sự ổn định và hỗ trợ dài hạn (LTS), đã trở thành hệ điều hành được tin dùng hàng đầu cho các máy chủ. Việc cài đặt Ubuntu trên phiên bản này là sự kết hợp hoàn hảo giữa hiệu suất và độ tin cậy. Hướng dẫn này sẽ đưa bạn qua từng bước, từ cập nhật hệ điều hành, cài đặt các gói phụ thuộc, cấu hình chi tiết cho đến cách quản lý và khắc phục các sự cố thường gặp, đảm bảo bạn có thể tự tay triển khai một máy chủ GitLab hoàn chỉnh.
Giới thiệu
Cập nhật hệ điều hành Ubuntu trước khi cài đặt
Trước khi bắt đầu cài đặt bất kỳ phần mềm quan trọng nào, việc đảm bảo hệ điều hành của bạn được cập nhật là bước đi đầu tiên và quan trọng nhất. Điều này giúp hệ thống được vá các lỗ hổng bảo mật mới nhất và đảm bảo tính tương thích của các gói phần mềm. Một hệ thống lỗi thời có thể gây ra những xung đột không mong muốn trong quá trình cài đặt GitLab.
Kiểm tra phiên bản Ubuntu và cập nhật hệ thống
Đầu tiên, hãy chắc chắn rằng bạn đang làm việc trên đúng phiên bản Ubuntu. Bạn có thể kiểm tra phiên bản hiện tại của mình bằng một lệnh đơn giản trong terminal.
Để kiểm tra, hãy mở terminal và gõ lệnh sau: lsb_release -a Lệnh này sẽ hiển thị thông tin chi tiết về phiên bản Ubuntu bạn đang sử dụng, bao gồm tên mã và số phiên bản.

Sau khi xác nhận bạn đang dùng Ubuntu 20.04, bước tiếp theo là cập nhật danh sách các gói phần mềm và nâng cấp chúng lên phiên bản mới nhất. Quá trình này đảm bảo mọi thành phần trên hệ thống đều được làm mới.
Sử dụng các lệnh sau: sudo apt update Lệnh này sẽ tải xuống thông tin gói từ tất cả các kho lưu trữ đã được cấu hình.
Sau đó, chạy lệnh nâng cấp: sudo apt upgrade -y Lệnh này sẽ cài đặt các phiên bản mới nhất của tất cả các gói hiện có trên hệ thống của bạn. Tùy chọn -y sẽ tự động xác nhận mọi lời nhắc, giúp quá trình diễn ra nhanh hơn.
Khởi động lại hệ thống nếu cần thiết
Trong một số trường hợp, các bản cập nhật quan trọng như cập nhật nhân (Kernel) của hệ điều hành sẽ yêu cầu bạn phải khởi động lại máy chủ. Việc này là cần thiết để các thay đổi có hiệu lực hoàn toàn. Nếu bạn không chắc chắn, khởi động lại là một lựa chọn an toàn để đảm bảo hệ thống bắt đầu với một trạng thái sạch sẽ.
Lý do chính cần khởi động lại là để áp dụng các bản vá kernel. Nếu không khởi động lại, hệ thống vẫn sẽ chạy trên kernel cũ, tiềm ẩn các rủi ro bảo mật hoặc vấn đề về hiệu suất.
Để khởi động lại hệ thống, bạn chỉ cần thực hiện lệnh: sudo reboot Sau khi máy chủ khởi động lại, bạn đã sẵn sàng để chuyển sang bước cài đặt các gói phụ thuộc cần thiết cho GitLab.
Cài đặt các phụ thuộc cần thiết cho GitLab
GitLab là một ứng dụng phức tạp và nó cần một số công cụ và thư viện hỗ trợ để có thể hoạt động chính xác. Trước khi cài đặt GitLab, chúng ta cần đảm bảo rằng tất cả các “mảnh ghép” này đã được chuẩn bị sẵn sàng trên máy chủ Ubuntu của bạn. Việc này giống như chuẩn bị nguyên liệu trước khi nấu ăn, giúp quá trình cài đặt chính diễn ra suôn sẻ.
Cài đặt các gói phần mềm cần thiết
Các gói phụ thuộc chính bao gồm curl để tải xuống các tệp từ internet, openssh-server để quản lý truy cập an toàn qua SSH, và ca-certificates để xác thực các kết nối SSL/TLS. Ngoài ra, Postfix cũng thường được cài đặt để xử lý việc gửi email thông báo từ GitLab, mặc dù bạn cũng có thể cấu hình một dịch vụ SMTP bên ngoài sau này.
Bạn có thể cài đặt tất cả các gói cần thiết này bằng một lệnh duy nhất. Điều này tiết kiệm thời gian và đảm bảo không bỏ sót bất kỳ thành phần nào.

Mở terminal và chạy lệnh sau: sudo apt install -y curl openssh-server ca-certificates tzdata perl Trong quá trình cài đặt, nếu bạn cài Postfix, một cửa sổ cấu hình có thể xuất hiện. Hãy chọn ‘Internet Site’ và nhập tên miền của bạn khi được yêu cầu.
Thiết lập môi trường cho GitLab
Sau khi đã có đủ các công cụ, bước tiếp theo là chuẩn bị môi trường mạng cho GitLab. Quan trọng nhất là cấu hình tường lửa (firewall Linux) để cho phép các kết nối đến máy chủ GitLab. Nếu không mở các cổng cần thiết, bạn sẽ không thể truy cập giao diện web của GitLab từ bên ngoài.
Chúng ta sẽ sử dụng UFW (Uncomplicated Firewall), công cụ quản lý tường lửa mặc định và rất dễ sử dụng trên Ubuntu. Bạn cần mở các cổng cho dịch vụ web (HTTP và HTTPS) và SSH để duy trì quyền truy cập từ xa vào máy chủ.
Thực hiện các lệnh sau để cấu hình tường lửa: sudo ufw allow http sudo ufw allow https sudo ufw allow ssh
Sau khi thêm các quy tắc, bạn cần kích hoạt tường lửa nếu nó chưa chạy: sudo ufw enable Hệ thống sẽ hỏi xác nhận, hãy nhập y và nhấn Enter. Bây giờ, máy chủ của bạn đã được bảo vệ và sẵn sàng cho việc cài đặt GitLab.
Các bước cài đặt GitLab trên Ubuntu 20.04
Khi hệ thống đã được cập nhật và các gói phụ thuộc đã sẵn sàng, chúng ta sẽ tiến hành phần chính: cài đặt GitLab. Quá trình này bao gồm việc thêm kho lưu trữ chính thức của GitLab vào hệ thống của bạn, sau đó sử dụng trình quản lý gói apt để cài đặt phiên bản Community Edition (CE).
Thêm repository GitLab chính thức
GitLab không có sẵn trong kho lưu trữ mặc định của Ubuntu. Vì vậy, chúng ta cần thêm kho lưu trữ do chính GitLab cung cấp. Điều này đảm bảo rằng chúng ta luôn nhận được phiên bản mới nhất và các bản cập nhật bảo mật trực tiếp từ nhà phát triển.
Để thực hiện việc này, GitLab cung cấp một kịch bản (script) tiện lợi giúp tự động hóa toàn bộ quá trình, bao gồm cả việc nhập khóa GPG để xác thực các gói phần mềm.

Hãy chạy lệnh sau trong terminal: curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash Lệnh này sẽ tải xuống kịch bản và thực thi nó với quyền quản trị. Kịch bản sẽ tự động phát hiện hệ điều hành của bạn và cấu hình kho lưu trữ apt tương ứng.
Cài đặt GitLab Community Edition (CE)
Sau khi kho lưu trữ đã được thêm thành công, việc cài đặt GitLab CE trở nên đơn giản như cài đặt bất kỳ gói phần mềm nào khác bằng apt. Tuy nhiên, có một bước cấu hình quan trọng bạn cần thực hiện ngay trong lệnh cài đặt: đó là thiết lập EXTERNAL_URL.
EXTERNAL_URL là địa chỉ web mà người dùng sẽ sử dụng để truy cập vào GitLab của bạn. Đây có thể là một tên miền (ví dụ: http://gitlab.yourdomain.com) hoặc địa chỉ IP của máy chủ. Việc thiết lập đúng URL này ngay từ đầu là rất quan trọng để GitLab tự động cấu hình chính xác.
Chạy lệnh cài đặt sau, thay http://gitlab.example.com bằng URL của bạn: sudo EXTERNAL_URL="http://gitlab.example.com" apt install gitlab-ce Quá trình cài đặt có thể mất vài phút vì GitLab là một ứng dụng lớn. apt sẽ tải xuống và cài đặt tất cả các thành phần cần thiết.
Khởi động và kiểm tra dịch vụ GitLab
Sau khi lệnh cài đặt hoàn tất, trình cài đặt sẽ tự động chạy lệnh gitlab-ctl reconfigure. Lệnh này sẽ thiết lập tất cả các dịch vụ con của GitLab (như Nginx, PostgreSQL, Redis) dựa trên tệp cấu hình. Quá trình này có thể mất một lúc trong lần chạy đầu tiên.

Khi quá trình reconfigure hoàn tất, GitLab sẽ tự động khởi động. Để chắc chắn rằng mọi thứ đang hoạt động ổn định, bạn có thể kiểm tra trạng thái của tất cả các dịch vụ GitLab.
Sử dụng lệnh sau để kiểm tra: sudo gitlab-ctl status Lệnh này sẽ liệt kê tất cả các dịch vụ và trạng thái của chúng (run, down). Nếu tất cả đều ở trạng thái run, xin chúc mừng, bạn đã cài đặt GitLab thành công! Bây giờ bạn có thể mở trình duyệt và truy cập vào EXTERNAL_URL đã cấu hình để xem trang đăng nhập của GitLab.
Cấu hình GitLab để hoạt động hiệu quả
Cài đặt thành công GitLab chỉ là bước khởi đầu. Để nền tảng này hoạt động hiệu quả, an toàn và phù hợp với nhu cầu của bạn, việc tinh chỉnh cấu hình là vô cùng cần thiết. Mọi tùy chỉnh quan trọng của GitLab đều được quản lý tập trung trong một tệp duy nhất, giúp bạn dễ dàng kiểm soát toàn bộ hệ thống.
Thiết lập cấu hình cơ bản trong file gitlab.rb
Tệp tin /etc/gitlab/gitlab.rb là “trái tim” của hệ thống cấu hình GitLab. Bất kỳ thay đổi nào bạn muốn thực hiện, từ việc đổi URL, cấu hình email, cho đến việc tinh chỉnh hiệu suất, đều bắt đầu từ đây.
Để chỉnh sửa tệp này, hãy sử dụng trình soạn thảo văn bản bạn quen thuộc, ví dụ như nano: sudo nano /etc/gitlab/gitlab.rb
Một số cấu hình cơ bản bạn nên xem xét:
external_url: Đảm bảo đây là URL chính xác mà người dùng sẽ truy cập. Nếu bạn muốn sử dụng HTTPS, hãy đổihttpthànhhttps(ví dụ:https://gitlab.yourdomain.com).- Cấu hình Email (SMTP): Đây là phần cực kỳ quan trọng để GitLab có thể gửi email thông báo, xác nhận tài khoản, và đặt lại mật khẩu. Bạn cần tìm đến mục GitLab NGINX và điền thông tin SMTP của nhà cung cấp dịch vụ email của bạn.
- Timezone: Thiết lập múi giờ cho phù hợp với khu vực của bạn để các ghi nhận về thời gian được chính xác.
Sau khi thực hiện bất kỳ thay đổi nào trong tệp gitlab.rb, bạn phải chạy lại lệnh sau để áp dụng cấu hình: sudo gitlab-ctl reconfigure

Tối ưu hiệu suất và bảo mật
Vận hành một máy chủ GitLab an toàn và hiệu quả đòi hỏi sự quan tâm đến các yếu tố bảo mật và tối ưu hóa.
- Cài đặt SSL/TLS với Let’s Encrypt: Đây là bước không thể bỏ qua. Việc mã hóa kết nối (HTTPS) bảo vệ dữ liệu người dùng. GitLab tích hợp sẵn tính năng tự động cấu hình SSL với Let’s Encrypt. Bạn chỉ cần đảm bảo
external_urlbắt đầu bằnghttps://và bỏ ghi chú các dòng cấu hình Let’s Encrypt trong tệpgitlab.rb. - Backup dữ liệu định kỳ: Rủi ro mất dữ liệu luôn hiện hữu. GitLab cung cấp công cụ để tạo bản sao lưu toàn bộ hệ thống. Bạn nên thiết lập một cron job để tự động chạy lệnh backup hàng ngày.
- Cấu hình Firewall chặt chẽ: Chỉ mở những cổng thực sự cần thiết. Ngoài HTTP (80), HTTPS (443) và SSH (22), hãy đảm bảo các cổng khác đều bị chặn từ bên ngoài.
- Giới hạn truy cập: Sử dụng các tính năng bảo mật tích hợp của GitLab như xác thực hai yếu tố (2FA), giới hạn số lần đăng nhập sai, và theo dõi nhật ký truy cập để phát hiện các hành vi bất thường.
Kiểm tra và khắc phục lỗi thường gặp sau cài đặt
Ngay cả khi bạn đã làm theo hướng dẫn một cách cẩn thận, đôi khi vẫn có những sự cố bất ngờ xảy ra. Đừng lo lắng, hầu hết các vấn đề sau khi cài đặt GitLab đều có nguyên nhân phổ biến và có thể khắc phục được. Việc hiểu rõ cách chẩn đoán lỗi sẽ giúp bạn nhanh chóng đưa hệ thống trở lại hoạt động.
Lỗi dịch vụ GitLab không khởi động
Một trong những lỗi phổ biến nhất là một hoặc nhiều dịch vụ của GitLab không thể khởi động, thường biểu hiện qua lỗi 502 Bad Gateway trên trình duyệt.
Nguyên nhân phổ biến:
- Không đủ tài nguyên hệ thống: GitLab yêu cầu khá nhiều RAM. Nếu máy chủ của bạn có ít hơn 4GB RAM, các dịch vụ như Puma hoặc Sidekiq có thể bị hệ điều hành tắt do thiếu bộ nhớ. Để hiểu rõ hơn về RAM, bạn có thể tham khảo bài viết Ram là gì.
- Cấu hình sai trong
gitlab.rb: Một lỗi cú pháp nhỏ trong tệp cấu hình cũng có thể khiến GitLab không thể khởi động. - Xung đột cổng: Một dịch vụ khác trên máy chủ của bạn có thể đang sử dụng cổng mà GitLab cần (ví dụ: cổng 80 hoặc 8080).
Cách xử lý:
- Kiểm tra tài nguyên: Sử dụng lệnh
free -hđể xem dung lượng RAM còn trống vàtopđể kiểm tra CPU. Nếu tài nguyên cạn kiệt, hãy cân nhắc nâng cấp máy chủ. - Kiểm tra nhật ký (logs): Đây là công cụ chẩn đoán mạnh mẽ nhất. Chạy lệnh
sudo gitlab-ctl tailđể xem nhật ký thời gian thực của tất cả các dịch vụ. Các thông báo lỗi sẽ cho bạn biết chính xác dịch vụ nào đang gặp vấn đề. - Xác thực lại cấu hình: Chạy lệnh
sudo gitlab-rake gitlab:checkđể GitLab tự kiểm tra các cấu hình phổ biến và báo cáo sự cố.

Lỗi kết nối web hoặc đăng nhập
Nếu bạn có thể thấy trang lỗi 502 hoặc không thể truy cập trang web GitLab, vấn đề thường liên quan đến mạng hoặc cấu hình web server.
Nguyên nhân phổ biến:
- Tường lửa (Firewall) chặn kết nối: Đây là nguyên nhân hàng đầu. Có thể bạn đã quên mở cổng 80 (HTTP) và 443 (HTTPS).
- Cấu hình
external_urlkhông chính xác: Nếu URL trong tệpgitlab.rbkhông khớp với địa chỉ bạn đang truy cập, GitLab sẽ không hoạt động đúng. - Sự cố DNS: Tên miền của bạn có thể chưa được trỏ đúng vào địa chỉ IP của máy chủ GitLab.
Cách xử lý:
- Kiểm tra lại UFW: Dùng lệnh
sudo ufw statusđể đảm bảo các cổng 80 và 443 đang ở trạng tháiALLOW. - Xác minh
external_url: Mở lại tệp/etc/gitlab/gitlab.rbvà kiểm tra kỹ lưỡng giá trị củaexternal_url. Sau khi sửa, đừng quên chạysudo gitlab-ctl reconfigure. - Kiểm tra DNS: Sử dụng lệnh
ping gitlab.yourdomain.comtừ một máy tính khác để xem nó có phân giải ra đúng địa chỉ IP của máy chủ hay không. Nếu không, bạn cần kiểm tra lại cấu hình DNS tại nhà cung cấp tên miền.
Quản lý và triển khai GitLab trên server Ubuntu
Sau khi GitLab đã được cài đặt và chạy ổn định, công việc của một người quản trị hệ thống mới thực sự bắt đầu. Quản lý người dùng, phân quyền, sao lưu dữ liệu và lên kế hoạch phục hồi là những nhiệm vụ cốt lõi để duy trì một môi trường GitLab an toàn, có tổ chức và bền vững.
Quản lý người dùng và phân quyền trong GitLab
GitLab cung cấp một hệ thống phân quyền rất linh hoạt, cho phép bạn kiểm soát chặt chẽ ai có thể làm gì trong từng dự án hoặc nhóm.
Tạo và quản lý người dùng:
Bạn có thể tạo người dùng mới qua giao diện quản trị (Admin Area). Tại đây, bạn có thể đặt mật khẩu ban đầu, thiết lập giới hạn dự án, và cấp quyền quản trị nếu cần.
Tổ chức với Nhóm (Groups) và Dự án (Projects):
- Dự án: Là nơi chứa mã nguồn, issues, merge requests, và các pipeline CI/CD.
- Nhóm: Là một tập hợp các dự án và người dùng. Bạn có thể cấp quyền ở cấp độ nhóm, và tất cả các dự án trong nhóm đó sẽ kế thừa quyền này. Đây là cách hiệu quả để quản lý quyền truy cập cho cả một phòng ban hoặc một đội phát triển.
Các cấp độ phân quyền (Roles):
GitLab có nhiều vai trò với các quyền hạn khác nhau, từ thấp đến cao:
- Guest: Chỉ có thể xem các issue và bình luận.
- Reporter: Có thể xem mã nguồn, tạo issue.
- Developer: Có thể push code lên các nhánh (branch), tạo merge request.
- Maintainer: Có thể quản lý thành viên dự án, push lên các nhánh được bảo vệ.
- Owner: Có toàn quyền trên dự án hoặc nhóm.

Backup và phục hồi dữ liệu GitLab
Không có gì quan trọng hơn việc sao lưu dữ liệu. Một sự cố phần cứng, lỗi phần mềm hoặc sai lầm của con người đều có thể dẫn đến mất mát dữ liệu không thể phục hồi nếu không có bản sao lưu.
Tạo backup thủ công:
GitLab cung cấp một công cụ dòng lệnh đơn giản để tạo một bản sao lưu toàn diện, bao gồm cơ sở dữ liệu, tất cả các kho chứa Git, và các tệp đính kèm.
Chạy lệnh sau để bắt đầu quá trình sao lưu: sudo gitlab-backup create Theo mặc định, các tệp sao lưu sẽ được lưu trong thư mục /var/opt/gitlab/backups. Các tệp này là các file tar được nén.
Tự động hóa việc backup:
Để đảm bảo an toàn, bạn nên tự động hóa việc này bằng cách sử dụng cron. Bạn có thể tạo một cron job để chạy lệnh gitlab-backup create mỗi đêm. Đừng quên di chuyển các tệp backup này đến một nơi lưu trữ khác (như một server khác hoặc dịch vụ lưu trữ đám mây) để phòng trường hợp máy chủ chính gặp sự cố toàn bộ.
Phục hồi dữ liệu:
Quá trình phục hồi phức tạp hơn một chút và đòi hỏi phải dừng các dịch vụ của GitLab. Bạn cần chuyển tệp backup vào thư mục backup và chạy lệnh phục hồi. Luôn tham khảo tài liệu chính thức của GitLab trước khi tiến hành để đảm bảo thực hiện đúng các bước.
Những lưu ý và thực hành tốt nhất
Để đảm bảo máy chủ GitLab của bạn luôn hoạt động ổn định, an toàn và hiệu quả trong dài hạn, việc tuân thủ các nguyên tắc và thực hành tốt nhất là điều cần thiết. Dưới đây là những lưu ý quan trọng mà bất kỳ quản trị viên GitLab nào cũng nên ghi nhớ.
- Luôn sao lưu dữ liệu trước khi cập nhật: Trước khi thực hiện bất kỳ nâng cấp phiên bản GitLab hoặc cập nhật hệ điều hành nào, hãy tạo một bản sao lưu đầy đủ. Điều này là “bảo hiểm” của bạn, cho phép bạn quay trở lại trạng thái ổn định nếu có sự cố xảy ra trong quá trình nâng cấp.
- Giữ hệ thống và GitLab ở phiên bản mới nhất: Các bản cập nhật không chỉ mang lại tính năng mới mà còn vá các lỗ hổng bảo mật quan trọng. Hãy lên kế hoạch cập nhật GitLab và hệ điều hành Ubuntu của bạn một cách định kỳ để bảo vệ hệ thống khỏi các mối đe dọa.
- Không mở các cổng không cần thiết trên tường lửa: Nguyên tắc bảo mật cơ bản là “tối thiểu hóa bề mặt tấn công”. Chỉ cho phép truy cập vào các cổng thực sự cần thiết như SSH (22), HTTP (80), và HTTPS (443). Mọi cổng khác nên được chặn mặc định.
- Định kỳ kiểm tra và tối ưu tài nguyên server: GitLab có thể tiêu tốn nhiều tài nguyên, đặc biệt là RAM và CPU, khi có nhiều người dùng và các pipeline CI/CD hoạt động. Sử dụng các công cụ như
htop,glanceshoặc các hệ thống giám sát chuyên dụng để theo dõi việc sử dụng tài nguyên. Nếu thấy hệ thống thường xuyên quá tải, hãy cân nhắc nâng cấp phần cứng hoặc tối ưu hóa cấu hình GitLab. - Sử dụng kết nối HTTPS: Luôn luôn cấu hình GitLab để chạy trên HTTPS. Việc này mã hóa tất cả dữ liệu truyền đi giữa người dùng và máy chủ, bảo vệ thông tin nhạy cảm như mật khẩu và mã nguồn khỏi bị nghe lén.
- Bảo mật tài khoản quản trị: Tài khoản
rootcủa GitLab có quyền lực cao nhất. Hãy bảo vệ nó bằng một mật khẩu cực mạnh và bật xác thực hai yếu tố (2FA). Hạn chế sử dụng tài khoản này cho các công việc hàng ngày.

Kết luận
Qua hướng dẫn chi tiết này, chúng ta đã cùng nhau đi qua toàn bộ hành trình triển khai GitLab trên một máy chủ Ubuntu 20.04. Từ việc chuẩn bị và cập nhật hệ điều hành, cài đặt các gói phụ thuộc, cho đến các bước cài đặt và cấu hình GitLab cốt lõi, bạn đã nắm được những kiến thức nền tảng vững chắc nhất. Chúng ta cũng đã tìm hiểu cách xử lý các sự cố thường gặp, quản lý người dùng, và tầm quan trọng của việc sao lưu dữ liệu.
Việc tự host GitLab mang lại cho bạn và đội nhóm của mình quyền kiểm soát tuyệt đối đối với môi trường phát triển, bảo mật dữ liệu và tùy chỉnh quy trình làm việc. Bằng cách áp dụng những kiến thức trong bài viết này và điều chỉnh các cấu hình cho phù hợp với nhu cầu thực tế, bạn hoàn toàn có thể xây dựng một nền tảng DevOps mạnh mẽ, ổn định và an toàn.
Đây chỉ là điểm khởi đầu. Từ đây, bạn có thể khám phá sâu hơn về các tính năng nâng cao của GitLab, đặc biệt là việc thiết lập các quy trình Tích hợp liên tục và Triển khai liên tục (CI/CD) để tự động hóa việc kiểm thử và phát hành phần mềm. Chúc bạn thành công trên con đường làm chủ công cụ DevOps tuyệt vời này!
