Gitlab CI specific runner

Hôm nay nổi hứng chuyển từ mode shared runner qua specific runner trên GitLab. Hậu quả là build failed 7, 8 lần.
Mình tò mò đọc lại thử để xem mình đã làm sai gì. Thậm chí debug luôn bằng GitLab multi runner tool ở dưới máy local vẫn không thấy thêm gì. Quay lại đọc 18 lần cửu dương thần công từ documentation của GitLab và google lòng vòng. Giờ thì mình mới hiểu bản chất.
Thực chất GitLab CI specific runner là kiểu run auto build với cái instance docker được run trên máy của mình, chứ không phải nằm trên môi trường GitLab. Do đó, cách debug tốt nhất là chạy: gitlab-ci-multi-runner run trên máy mình đã đăng kí cái runner với GitLab xem nó bị gì.
Và sau khi thử chạy gitlab-ci-multi-runner run, thì nó quăng ra đống lỗi sau:
Dial unix /var/run/docker.sock: no such file or directory
Lý do nó quăng ra issue này là: gitlab-runner được chạy trong một container (trong ngữ cảnh của mình đang dùng là docker container). Tuy nhiên nó không tìm thấy config cần load lên để run. Follow theo guideline của https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/docker.md mình chỉ cần chạy lệnh này:
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest
Sau đó chỉ cần run lại lệnh: gitlab-ci-multi-runner run để kích hoạt lại runner là mọi thứ chạy ổn.
Note luôn: nếu dùng kiểu build với specific runner, phải kiếm 1 cái máy để install docker keep cái runner này chạy hoài. Nếu không, mỗi lần có source code commit lên thì không có runner để thực hiện build. Cách configure runner specific này được dùng khi bạn không tin tưởng vào môi trường shared-runner của Gitlab. Trên GitLab, họ đề cập rất rõ:
GitLab Runners do not offer secure isolation between projects that they do builds for. You are TRUSTING all GitLab users who can push code to project A, B or C to run shell scripts on the machine hosting runner X.
Đây chính là nguyên nhân mà đôi lúc mình thấy project mình build bị failed, trong khi unit testing ở local thì vẫn ổn.
Vì vật vã với cái vụ build failed này gần 2 h, nên mình post lên share lại và cũng để ghi chú cho không quên về sau.
Nếu bạn nào muốn tìm hiểu sâu hơn về TDD, CI và Gitlab thì sau này mình sẽ chia sẻ thêm khi có thời gian. Tất nhiên là cũng tuỳ theo số lượng bạn yêu thích chủ đề này nữa. Nếu bạn có hứng thú và muốn mình viết về chủ đề này thì comment dưới bài viết này :). Mình không câu comment đâu nhé, chỉ là do things Just In Time thôi.
Thân,