Giới thiệu #
Việc tạo Docker image có lẽ đã không còn quá xa lạ đối với mọi người trong thời buổi hiện nay. Với Docker image, người dùng có thể triển khai phần mềm của mình ở bất cứ nơi đâu, miễn là nơi đó đã được cài đặt Docker. Người dùng có thể sử dụng Gitlab-CI để tự động hóa quá trình tạo và lưu trữ Docker image của mình một cách dễ dàng.
Để thao tác với Docker trên Gitlab-CI, người dùng có 3 sự lựa chọn như sau:
- Shell executor
- Docker-in-Docker (dind)
- “Bind” Docker socket
Trong trường hợp bạn không muốn runner sử dụng chế độ đặc quyền (privileged mode), nhưng vẫn muốn sử dụng cậu lệnh “docker build” thì có thể sử dụng kaniko hoặc buildah.
Các bước thực hiện #
Để sử dụng cách câu lệnh của Docker cho các job “CI/CD”, người dùng có thể cấu hình runner của mình sử dụng “shell executor” trên các server đã được cài đặt Docker và cấp quyền cho “gitlab-runner” có thể sử dụng Docker để tạo Docker image. Các bước chi tiết bao gồm:
- Cài đặt Gitlab runner (Ubuntu, Centos, Windows, macOS)
- Đăng ký runner với executor là “shell”. Ví dụ:
sudo gitlab-runner register -n \ --url <Gitlab Domain> \ --registration-token <Token> \ --executor shell \ --description "Tel4vn runner"
- Cài đặt Docker trên server
- Thêm “gitlab-runner” vào group được sử dụng Docker:
sudo usermod -aG docker gitlab-runner
- Kiểm tra “gitlab-runner” đã có thể sử dụng Docker hay chưa bằng câu lệnh sau:
sudo -u gitlab-runner -H docker info
- Khởi tạo job tạo Docker image trong file “.gitlab-ci.yml”:
build_image: stage: build // Khai báo job này thuộc stage "build" (có thể xóa nếu muốn) before_script: // Câu lệnh dùng để đăng nhập vào Container Registry trên Gitlab - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: // Tạo và lưu Docker image trên Container Registry - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest after_script: // Xóa các Docker image đã tạo sau khi đã thực thi các câu lệnh trong "script" (có thể xóa nếu muốn) - docker rmi -f $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest
Trong đó:
- $CI_COMMIT_SHA: mã băm SHA-1 của commit kích hoạt CI/CD job
- $CI_REGISTRY: Domain của Container Registry trên Gitlab
- $CI_REGISTRY_IMAGE: Domain của Container Registry của repository/project trên Gitlab
- $CI_REGISTRY_PASSWORD: mật khật dùng để đăng nhập vào Container Registry của Runner. Giá trị này tương đương với CI_JOB_TOKEN, và có thể sử dụng khi “job” vẫn còn đang xử lý. Nếu như job đã dừng vì bất kỳ lý do nào thì “mật khẩu” này sẽ không còn sử dụng được nữa
- $CI_REGISTRY_USER: user mặc định của gitlab-runner sử dụng để đăng nhập vào Gitlab Registry
Các giá trị này được lấy từ biến môi trường của Gitlab runner, người dùng có thể thay đổi các thông tin nếu không muốn sử dụng Container registry của Gitlab.
Xem thêm #
- Phần 1: Giới thiệu tổng quan về Gitlab Runner
- Phần 2: Các loại Runner Executor trong Gitlab CI
- Phần 3: Hướng dẫn cài đặt Gitlab Runner trên Ubuntu / Centos / Windows / macOS
- Phần 4: Các thành phần cơ bản trong file “.gitlab-ci.yml”
- Phần 5: Tạo Docker Image với Gitlab runner – Docker in Docker (DinD)
- Phần 5: Tạo Docker Image với Gitlab runner – Bind Docker socket
- Phần 6: Deploy AWS Lambda với Gitlab-CI và Serverless Framework
Nguồn tham khảo: Gitlab
Trung tâm đào tạo Viễn thông và Công nghệ thông tin TEL4VN (TEL4VN) chuyên đào tạo các khóa học về DevOps như: Docker, Kubernetes, Ansible, Jenkins, Linux…….Ngoài ra, TEL4VN còn là Trung tâm đào tạo duy nhất về VoIP mã nguồn mở. 🌐Website: https://tel4vn.edu.vn/ |