- vừa được xem lúc

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

0 0 5

Người đăng: TruongItt

Theo Viblo Asia

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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 110

- vừa được xem lúc

In calculus, love also means zero.

Mình nhớ hồi năm 2 đại học, thầy giáo môn calculus, trong một giây phút ngẫu hứng, đã đưa ra cái definition này. Lúc đấy mình cũng không nghĩ gì nhiều.

0 0 78

- vừa được xem lúc

Chuyện thay đổi

Thay đổi là một thứ gì đó luôn luôn đáng sợ. Cách đây vài tháng mình có duyên đi làm cho một banking solution tên là X.

0 0 63

- vừa được xem lúc

Pet vs Cattle - Thú cưng và gia súc

Khái niệm. Pets vs Cattle là một khái niệm cơ bản của DevOps. Bài viết này sẽ nói về sự phát triển của các mô hình dịch vụ từ cốt lõi Pets and Cattle. 1.

0 0 49

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 101

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 132