0

GitLab và Quy trình làm việc CI/CD Cơ bản

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.

image.png

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

image.png

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

  1. Tạo nhánh feature/tên-tính-năng từ main hoặc develop.
  2. Merge nhánh feature vào develop qua Merge Request (MR).
  3. 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.
  4. 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:

  1. 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
  1. Đă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ặc shell):
        • 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
        
  2. Khởi động và kiểm tra Runner:

    sudo gitlab-runner start
    sudo gitlab-runner status
    
  3. 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>
      

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.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí