1. GitLab CICD là gì ?
GitLab CI/CD (Continuous Integration and Continuous Deployment/Delivery) là một phần của GitLab, một nền tảng DevOps mã nguồn mở tích hợp cung cấp các công cụ để quản lý toàn bộ vòng đời của một dự án phần mềm (software development life cycle). GitLab CI/CD giúp tự động hóa quy trình xây dựng (Build), kiểm thử (Test) và triển khai mã nguồn (Deploy), giúp cải thiện chất lượng phần mềm và tăng cường hiệu quả làm việc.
Các thành phần chính của GitLab CICD
- Pipeline: Là một tập hợp các Jobs (công việc) được thực thi theo một thứ tự xác định. Mỗi pipeline có thể có nhiều stages (giai đoạn), và mỗi stage có thể có nhiều jobs.
- Job: Là một đơn vị công việc cụ thể, ví dụ như biên dịch mã nguồn, chạy kiểm thử, hoặc triển khai ứng dụng. Các jobs trong cùng một stage được thực thi song song, còn các stages được thực thi tuần tự.
- Runner: Là các agent chịu trách nhiệm thực thi các jobs. GitLab Runner có thể được cài đặt trên máy chủ riêng hoặc sử dụng các runners được cung cấp bởi GitLab.
- .gitlab-ci.yml: Là tệp cấu hình được lưu trữ trong kho mã nguồn (repository) của bạn. Tệp này xác định các pipelines, stages và jobs cần thực thi. Đây là nơi bạn định nghĩa logic CI/CD cho dự án của mình.
2. Hướng dẫn triển khai CICD trên GitLab
- Không dùng máy sử dụng chip của Apple để thực hành ví dụ này vì sẽ không thành công, image gitlab có những lỗi nghiêm trọng với loại chip này.
- Không sử dụng máy hệ điều hành windows do khó khăn trong việc map docker.sock vào trong container để chạy các câu lệnh docker trong một container, mình chưa tìm ra hướng giải quyết, nào tìm ra mình sẽ update lại bài này
2.1 Cài đặt GitLab & GitLab Runner
Pull về image GitLab phiên bản community edition và chạy lệnh tạo mới container,
Truy cập vào link localhost, với tên đăng nhập là root và password đã lấy được ở bên trên
Pull về Image GitLab runner và khởi tạo container
2.2 Tạo mới một GitLab Repository
- Đăng nhập vào Gitlab và click chọn vào Create a Project trên màn hình Project như hình phía trên.
- Chọn Create blank project: mọi người điền tên project, group của project (thường căn cứ theo team, project, phòng ban), mình chọn group tên demo ứng với tên dự án và ở chế độ Private, chỉ những ai trong nhóm mới thấy được.
- Chọn nút Create project.
4. Tạo mới 2 file index.html
và Dockerfile
có nội dung như bên dưới và push vào branch main
<html>
<body>
<h1>200Lab Website</h1>
</body>
</html>
FROM nginx:1.18
COPY index.html /usr/share/nginx/html
2.3 Cấu hình Gitlab Runner
Các bạn vào mục Setting trong trang project gitlab-cicd-example và chọn CI/CD
Tới phần runner thì chọn New project runner, nhớ tick chọn cho phép run untagged job, không thì nó sẽ không hoạt động đâu, điểm dễ nhận ra là job của các bạn luôn trong trạng thái pending, sau đó các bạn sẽ lấy được url và token ở phần Step 1 bên dưới
Đăng kí GitLab runner với các thông tin được cung cấp, đổi url lại thành gitlab (tên container) do container gitlab-runner không hiểu được localhost là gì nhưng có thể ping đến container gitlab bằng tên do chung một network bridge với nhau, màn hình sẽ hiển thị ra các câu hỏi về tham số bạn chỉ cần confirm lại bằng cách nhấn phím Enter là được
# Thêm winpty đằng trước nếu dùng máy windows
docker exec -it gitlab-runner gitlab-runner register \
--url http://gitlab \
--registration-token glrt-1EjYDJRNbjFzvzrtAs3Q \
--executor docker \
--docker-image "docker:stable" \
--description "local-docker-runner" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock
Dấu chấm màu xanh cho biết đã thiết lập runner thành công
2.4 Cấu hình file Gitlab CI
Tạo mới file .gitlab-ci.yml
trong project và push lên branch main với nội dung như sau, ở đây mình đang mô phỏng bước build docker image và push image đó lên docker registry, việc mà mình nghĩ các bạn devops làm hằng ngày.
Thực tế thì Pipeline sẽ có nhiều stage nữa, tuy nhiên mình chỉ làm demo nên để một stage duy nhất
stages:
- publish
variables:
TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA
publish:
image: docker:latest
stage: publish
services:
- docker:dind
script:
- docker build -t $TAG_COMMIT -t $TAG_LATEST .
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker push $TAG_COMMIT
- docker push $TAG_LATEST
Kết quả chạy của từng Commit sẽ được tìm thấy ở phần Pipeline
3. Kết luận
Mong rằng bài hướng dẫn trên đây của mình có thể cung cập một vài thông tin hữu ích khi các bạn cấu hình CICD trên Gitlab, tuy rằng còn khá nhiều hạn chế do mình đang dùng máy Chip M1, không chạy được phiên bản docker của gitlab, sau khi chuyển qua Windows thì lại gặp vấn đề về docker sock, nên có thể bài tutorial của mình chưa thật sự hoàn chỉnh, mong mọi người thông cảm mình sẽ lưu ý cải thiện, nếu các bạn gặp lỗi thì có thể search google thử nhé.
Các bài viết liên quan:
Bài viết liên quan
Vercel là gì? Hướng dẫn deploy dự án Next.js bằng Vercel
Dec 07, 2024 • 14 min read
Grafana Loki là gì? So sánh Loki và Elasticsearch
Nov 16, 2024 • 6 min read
Webhook là gì? So sánh Webhook và API
Nov 15, 2024 • 8 min read
Two-Factor Authentication (2FA) là gì? Vì sao chỉ Mật khẩu thôi là chưa đủ?
Nov 13, 2024 • 7 min read
ELK là gì? So sánh hiệu suất giữa ELK và PLG
Nov 06, 2024 • 9 min read
Docker Best Practices: Tối ưu Dung lượng Docker Image
Oct 30, 2024 • 8 min read