Mong muốn:
- Tích hợp CI/CD vào máy chủ mạnh và chủ động hơn shared runners của Github CI/CD.
- Công ty bạn có thể muốn bảo mật hơn do bạn có thể đang dùng gitlab tự dựng, máy chủ gitlab không cho truy cập ra/vào bên ngoài.
Yêu cầu:
- Có repo gitlab.
- Có máy chạy Ubuntu hoặc Debian.
Setup trong repo gitlab như sau
- Vào trang tạo runner
- Chọn Linux, tick ô Run untagged jobs và nhấn Create runner
- Tới trang này bạn lưu token đang hiện ra lại và nhấn Go to runners page
Cài trong máy chủ như sau
- Cài gitlab-runner
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt-get install gitlab-runner
- Chạy lệnh gitlab-runner register --url https://gitlab.com --token <YOUR_TOKEN> như bước cuối của mục trước và điền các thông tin cần thiết.
- Sửa file /etc/gitlab-runner/config.toml
- sửa privileged = true
- thêm volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock"]
concurrent = 1
check_interval = 0
shutdown_timeout = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "debian"
url = "https://gitlab.com"
id = 24616229
token = "glrt-k7yNhiQgVcK_CTgsAjMu"
token_obtained_at = 2023-06-23T16:29:14Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
[runners.cache]
MaxUploadedArchiveSize = 0
[runners.docker]
tls_verify = false
image = "ruby:2.7"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock"]
- Chạy các lệnh sau
gitlab-runner stop
gitlab-runner start
gitlab-runner run
- Vào mục Setting -> CI/CD sẽ thấy đã có runner sẵn sàng.
Setup để chạy gitlab-runner mỗi khi máy khởi động
- chạy lệnh crontab -e và thêm dòng sau vào cuối cùng
@reboot sudo gitlab-runner run&
Tận hưởng thành quả
Ví dụ tôi muốn mỗi lần nhánh main có commit thì build lại file docker tag latest có thể thêm file .gitlab-ci.yml vào thư mục gốc của repo với nội dung như sau
stages:
- push-to-registry
registry-job:
stage: push-to-registry
image: docker:latest
services:
- docker:18-dind
script:
- docker build -t <DOCKER_REPO>:latest .
- docker push <DOCKER_REPO>:latest
only:
- main
- Ăn ngay
Article Categories:
config