[CI/CD] Hướng dẫn triển khai với GitLab, Maven, Tomcat

Bài viết này hướng dẫn cách triển khai CI/CD đơn giản sử dụng GitLab, Maven và Tomcat chi tiết từng bước.

Xem thêm:

Hướng dẫn cài đặt và cấu hình GitLab trên Ubuntu

[CI/CD] Triển khai với Jenkins Pipeline, Agent, Docker

1. Mô Hình Triển Khai

Cấu trúc hệ thống bao gồm:

  • 1 GitLab Server: Dùng để lưu trữ mã nguồn và quản lý dự án.
  • 1 GitLab Runner: Register runner với GitLab, cài đặt Maven + Tomcat.

2. Tạo Group Và Project Trong GitLab

Bước 1: Tạo Nhóm (Group)

  1. Đăng nhập vào GitLab với tài khoản admin.
  2. Truy cập Admin Area (góc trên bên phải) → chọn Groups → nhấn New Group.
  3. Nhập các thông tin:
    • Group name: DevOps
    • Visibility Level: Chọn Private
  4. Nhấn Create Group để hoàn tất.

Tạo group GitLab

Tạo group GitLab

Bước 2: Tạo Dự Án Mới

  1. Truy cập mục Projects → chọn New Project.
  2. Chọn Create Blank Project.
  3. Nhập thông tin:
    • Project name: JavaProject
    • Project URL: Chọn nhóm DevOps làm chủ sở hữu.
    • Visibility Level: Chọn Private
  4. Nhấn Create Project để tạo dự án.

Tạo project GitLab

Tạo project GitLab

3. Tạo Tài Khoản Lập Trình Viên Và Gán Quyền

Bước 1: Tạo Tài Khoản Mới

  1. Truy cập Admin Area → chọn Users → nhấn New User.
  2. Nhập thông tin:
    • Username: dev
    • Email: dev@devops.com
    • Password: devops123
  3. Nhấn Create User để tạo tài khoản.

Bước 2: Thêm User Vào Dự Án

  1. Truy cập dự án JavaProject → vào mục Settings → chọn Members.
  2. Nhấn Invite Member.
  3. Tìm tài khoản dev, gán quyền Owner để đảm bảo có thể đẩy code.
  4. Nhấn Invite để thêm user vào dự án.

Bước 3: Tắt Tính Năng Auto DevOps

  1. Truy cập vào dự án JavaProject.
  2. Chọn SettingsCI/CD.
  3. Tìm mục Auto DevOps, nhấn Expand.
  4. Bỏ chọn mục Default to Auto DevOps pipeline để tắt tính năng này.

4. Khởi Tạo Git Và Push Code Lên GitLab

Bước 1: Clone Source Code Về Máy

Clone source từ GitHub về:

git clone https://github.com/ttnguyenblog/java.git
cd java
rm -rf .git

Bước 2: Khởi Tạo Remote Mới Từ GitLab

git init
git remote add origin https://gitlab-plus.southeastasia.cloudapp.azure.com/devops/javaproject.git
git branch -M main
git add .
git commit -m "first commit"
git pull origin main --rebase
git push origin main

5. Cài Đặt Maven Trên GitLab Runner

Trên máy GitLab Runner (Ubuntu), chạy các lệnh sau để cài Maven:

sudo apt update
sudo apt install maven -y
mvn -version

6. Cài Đặt Tomcat Trên Máy Deploy

Hướng dẫn cài đặt Tomcat: https://ttnguyen.net/trien-khai-ci-cd-java-voi-jenkins-tomcat-maven/#3_Cai_dat_Tomcat_tren_Web_Server

7. Tạo File Pipeline .gitlab-ci.yml

Cấp quyền truy cập:

  1. Xác định user đang chạy GitLab Runner, ví dụ:
    ps -aux | grep gitlab-runner
    
  2. Mở file sudoers:
    sudo visudo
    
  3. Thêm dòng này vào cuối (giả sử user là gitlab-runner):
    gitlab-runner ALL=(ALL) NOPASSWD: /bin/cp

Trong thư mục gốc của project, tạo file .gitlab-ci.yml với nội dung sau:

stages:
  - build
  - deploy

build_maven:
  stage: build
  script:
    - mvn -f pom.xml clean install
  artifacts:
    paths:
      - $CI_PROJECT_DIR/target/mywebapp-1.0.war

deploy:
  stage: deploy
  script:
    - sudo cp target/mywebapp-1.0.war /opt/tomcat10/webapps/

8. CI/CD Python

Cấp quyền truy cập:

  1. Xác định user đang chạy GitLab Runner, ví dụ:
    ps -aux | grep gitlab-runner
    
  2. Mở file sudoers:
    sudo visudo
    
  3. Thêm dòng này vào cuối (giả sử user là gitlab-runner):
    gitlab-runner ALL=(ALL) NOPASSWD: /bin/cp

Trong thư mục gốc của project, tạo file .gitlab-ci.yml với nội dung sau:

stages:
  - Remove Container
  - Remove Image
  - Build Image
  - Deploy Container

Remove Container:
  stage: Remove Container
  script:
    - sudo docker rm web -f || true

Remove Image:
  stage: Remove Image
  script:
    - sudo docker image remove flask:v1 -f || true

Build Image:
  stage: Build Image
  script:
    - sudo docker build -t flask:v1 .

Deploy Container:
  stage: Deploy Container
  script:
    - sudo docker run -dit --name web -p 80:5000 flask:v1

 

Sau khi hoàn tất các bước trên, bạn đã có một quy trình CI/CD cơ bản: code được push lên GitLab, Runner tự động build bằng Maven và deploy file .war vào thư mục của Tomcat để ứng dụng được chạy.

Bài viết cùng chủ đề:

[CI/CD] Triển khai ứng dụng Java với Jenkins, Ansible và Tomcat

[CI/CD] Hướng dẫn triển khai với Apache, Docker, Jenkins, Ansible

[CI/CD] Hướng dẫn triển khai với Apache, Jenkins

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em