Trong bài viết này mình giới thiệu về GitLab là một nền tảng CI CD phổ biến, hỗ trợ quản lý mã nguồn, tích hợp (CI), triển khai (CD). Chúng ta sẽ cùng tìm hiểu về quy trình CI/CD cơ bản, cấu trúc dự án, vai trò của GitLab Runner, thiết lập Runner, các lệnh liên quan đến clone và token, cũng như các cấu hình và lệnh cơ bản trong .gitlab-ci.yml
.
1. GitLab và CI/CD là gì?
GitLab
GitLab là một nền tảng cung cấp các công cụ để quản lý mã nguồn (Git repository), theo dõi lỗi, tích hợp và triển khai liên tục (CI/CD), giám sát, và cộng tác nhóm một cách đầy đủ nhất.
CI/CD
- CI (Continuous Integration): Dev đẩy mã lên kho chung, hệ thống tự động chạy kiểm thử để đảm bảo mã không gây lỗi có thể hiểu đơn giản là triển khai hoàn toàn tự động commit là chạy .
- CD (Continuous Delivery/Deployment): Tự động triển khai mã lên các môi trường như staging hoặc production sau khi qua kiểm thử cần các bước xác nhận trước.
FIle .gitlab-ci.yml
là cấu hình CI/CD trong GitLab, định nghĩa pipeline tự động hóa các bước như build, test, và deploy.
2. Quy trình làm việc với các nhánh trong GitLab
Mô hình phân nhánh phổ biến (như Gitflow) giúp quản lý mã nguồn hiệu quả. Một ví dú điển hình trúc nhánh cơ bản bao gồm:
- main/master: Nhánh chính, chứa mã nguồn ổn định cho môi trường production (môi trường cuối mà người dùng sử dụng). Mỗi lần merge lên main thường được gắn tag phiên bản (ví dụ:
v1.0.0
) và thiết lập quyền để kiểm soát truy cập. - develop: Nhánh tích hợp mã từ các nhánh feature, dùng trong quá trình phát triển.
- feature: Nhánh tính năng, tạo từ main hoặc develop, dành cho từng tính năng cụ thể mà mỗi nhà phát triển làm việc (ví dụ:
feature/login-page
). - staging/release: Nhánh để tester kiểm tra sản phẩm trước khi merge vào main.
- hotfix: Nhánh tạo từ main để sửa lỗi khẩn cấp trên production, sau đó merge lại vào main và develop để đồng bộ mã.
Quy trình mẫu
- Tạo nhánh
feature/tên-tính-năng
từ main hoặc develop. - Merge nhánh feature vào develop qua Merge Request (MR).
- Tester kiểm tra trên nhánh
staging/release
. Nếu đạt yêu cầu, merge vào main và gắn tag phiên bản. - Sửa lỗi khẩn cấp bằng nhánh
hotfix/tên-lỗi
từ main, sau đó merge lại vào main và develop.
3. Cấu trúc dự án cơ bản khi làm việc với CI/CD
Cấu trúc dự án mẫu:
project-root/
├── src/ # Mã nguồn chính
├── tests/ # Bài kiểm thử (unit test, integration test)
├── scripts/ # Script hỗ trợ CI/CD (build, deploy)
├── .gitlab-ci.yml # Tệp cấu hình pipeline CI/CD
├── README.md # Tài liệu dự án
├── Dockerfile # (Tùy chọn) Container hóa ứng dụng
└── package.json # (Tùy chọn) Phụ thuộc dự án (nếu dùng Node.js)
.gitlab-ci.yml
: Định nghĩa pipeline CI/CD.- src/: Chứa mã nguồn ứng dụng.
- tests/: Chứa các bài kiểm thử tự động.
- scripts/: Chứa các script tự động hóa (build, deploy).
4. Giới thiệu và thiết lập GitLab Runner
GitLab Runner là gì?
GitLab Runner là ứng dụng thực thi các job trong pipeline CI/CD được định nghĩa trong .gitlab-ci.yml
. Mỗi job (như build, test, deploy) cần một Runner để chạy các lệnh liên quan. Runner có thể được cài đặt trên các máy chủ hoặc máy local, có thể hiểu đơn giản Runner đại diện cho GitLab để làm các việc mong muốn trên server đó, thực hiện các tác vụ như kéo mã nguồn, chạy kiểm thử, hoặc triển khai ứng dụng.
Nếu không có GitLab Runner?
Nếu không có GitLab Runner được cấu hình và đăng ký với dự án GitLab, pipeline sẽ không thể chạy. Khi bạn đẩy mã lên repository hoặc kích hoạt pipeline, GitLab sẽ báo lỗi hoặc pipeline sẽ ở trạng thái "pending" vì không có Runner nào khả dụng để xử lý các job. Để sử dụng CI/CD, bạn phải thiết lập ít nhất một Runner.
Cài đặt GitLab Runner trên server nào?
GitLab Runner có thể được cài đặt trên chính server gitlab hoặc các server chứa src code cần thiết để hoạt động thực hiện cho việc chạy project tự động.
Thiết lập GitLab Runner
Dưới đây là các bước cơ bản để cài đặt và cấu hình GitLab Runner:
- Cài đặt GitLab Runner:
- Trên Ubuntu:
sudo apt update sudo curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | bash sudo apt install gitlab-runner sudo apt-cache madison gitlab-runner
gitlab-runner -version
usermod -aG sudo gitlab-runner
-
Đăng ký Runner với GitLab:
- Lấy token đăng ký từ GitLab:
- Vào dự án trên GitLab, truy cập Settings > CI/CD > Runners.
- Tìm token trong phần "Specific Runners" hoặc "Group Runners".
- Chạy lệnh đăng ký:
sudo gitlab-runner register
- Nhập URL GitLab (ví dụ:
https://gitlab.com/
). - Nhập token từ bước trên.
- Đặt tên và mô tả cho Runner.
- Chọn executor (thường là
docker
hoặcshell
):docker
: Chạy job trong container.shell
: Chạy trực tiếp trên máy chủ.
- Ví dụ cấu hình Docker executor:
Enter the default Docker image (e.g., ruby:2.7, node:16): node:16
- Nhập URL GitLab (ví dụ:
- Lấy token đăng ký từ GitLab:
-
Khởi động và kiểm tra Runner:
sudo gitlab-runner start sudo gitlab-runner status
-
Quản lý Runner:
- Kiểm tra danh sách Runner:
sudo gitlab-runner list
- Dừng hoặc xóa Runner:
sudo gitlab-runner stop sudo gitlab-runner unregister --name <runner-name>
- Kiểm tra danh sách Runner:
Lưu ý
- Shared Runners: Nếu dùng GitLab.com, bạn có thể bật Shared Runners trong Settings > CI/CD > Runners mà không cần cài đặt.
- Executor: Chọn executor phù hợp (Docker cho tính linh hoạt, Shell cho đơn giản).
- Bảo mật: Đảm bảo token Runner được bảo mật, vì nó cho phép truy cập vào dự án.
5. Các lệnh và cấu hình cơ bản trong .gitlab-ci.yml
Tệp .gitlab-ci.yml
định nghĩa pipeline CI/CD, bao gồm các giai đoạn (stages) và công việc (jobs). Dưới đây là các cấu hình/lệnh cơ bản, bao gồm gắn tag và tùy chọn clone.
Ví dụ tệp .gitlab-ci.yml
stages: - build - test - deploy - tag
Job xây dựng ứng dụng
build_job: stage: build image: node:16 script: - npm install - npm run build artifacts: paths: - dist/ only: - main - develop - /^feature\/.*$/ - /^hotfix\/.*$/
Job kiểm thử
test_job: stage: test image: node:16 script: - npm install - npm run test only: - develop - /^feature\/.*$/ - /^hotfix\/.*$/
Job triển khai staging
deploy_staging: stage: deploy image: alpine script: - echo "Deploying to staging" - ./scripts/deploy-staging.sh only: - staging environment: name: staging url: https://staging.example.com variables: GIT_STRATEGY: clone # Clone toàn bộ repository
Job triển khai production
deploy_production: stage: deploy image: alpine script: - echo "Deploying to production" - ./scripts/deploy-production.sh only: - main when: manual environment: name: production url: https://production.example.com variables: GIT_STRATEGY: none # Không clone, dùng artifacts
Job gắn tag phiên bản
tag_version: stage: tag image: alpine script: - apk add git - git config --global user.email "ci@gitlab.com" - git config --global user.name "GitLab CI" - git tag -a "v${CI_COMMIT_REF_NAME}-${CI_PIPELINE_ID}" -m "Version for commit ${CI_COMMIT_SHA}" - git push origin "v${CI_COMMIT_REF_NAME}-${CI_PIPELINE_ID}" only: - main
6 Hoàn thành
Mong rằng qua bài viết bạn sẽ hiểu được thế nào là một quy trình CI CD bằng Gitlab một công cụ hữu ích trong quản lí dự án.