Khái niệm CI/CD không còn mới, việc tự động hóa quá trình triển khai và kiểm tra code trở thành nhu cầu thiết yếu với mọi project. Những công cụ tuyệt vời như Travis, Jenkin, Gitlab CI đã hỗ trợ rất nhiều cho lập trình viên trong toàn bộ các quá trình ấy.
Bài viết xin giới thiệu về Gitlab CI và cách hoạt động của nó, cùng với đó là một vài tùy chỉnh giúp tăng tốc và tối ưu việc tích hợp.
Gitlab CI hoạt động thế nào
Gitlab runner
Các nhiệm vụ được định nghĩa trong tệp ".gitlab-ci.yml" nhưng để thực hiện chúng cần tới Gitlab runner
Runner có thể là một chương trình, 1 container, nó thực thi những câu lệnh và báo kết quả trả về cho gitlab. Runner có nhiều loại, phân biệt dựa vào executor. Khi khởi tạo runner, việc chọn executor nào sẽ quyết định môi trường thực thi các câu lệnh trong file yml kể trên. Xêm thêm tại https://docs.gitlab.com/runner/executors
Để liên kết runner với gitlab, cần thực hiện đăng ký với mỗi repository áp dụng CI, token được lấy tại Settings ➔ CI / CD trong từng repo
Sau khi đăng ký thành công, runner sẽ thực hiện các câu lệnh được khai báo thành các pipeline, trong đó gồm các jobs được định nghĩa trong tệp ".gitlab-ci.yml"
Tăng tốc việc thực thi
Quá trình biên dịch , xử lý, test, ... có thể mất hàng chục phút để hoàn thành, thậm chí hàng giờ, một số cấu hình dưới đây sẽ giúp rút ngắn thời gian đó.
1. Cài đặt Gitlab Local
Thay vì quản lý và triển khai dự án trên gitlab global, bạn có thể cài đặt gitlab và gitlab runner trên local. Cụ thể bạn có thể sử dụng docker cho quá trình đó, nó sẽ giúp việc thực hiện nhanh hơn do sử dụng tài nguyên trên chính các máy chủ của bạn.
2. Sử dụng trình điều khiển overlay2
Theo mặc định, khi sử dụng docker: dind, Docker sử dụng trình điều khiển vfs trên mọi lần chạy. Thay vào đó, sử dụng trình điều khiển overlay2 sẽ giúp quá trình thực thi nhanh hơn, việc cấu hình cũng rất đơn giản, dễ dàng khai báo trong tệp ".gitlab-ci.yml"
3. Tối ưu hóa source code
Thay vì sử dụng quá nhiều cài đặt phụ thuộc, hay biên dịch lại Dockerfile mỗi lần thực thi, bạn có thể tối ưu việc cài đặt thêm những thư viện trong quá trình biên dịch, hoặc sử dụng cache cho việc build docker image nhằm rút ngắn thời gian.
Xem thêm tại https://docs.docker.com/edge/engine/reference/commandline/build/#options
4. Sử dụng các job song song thay vì lần lượt các job
Điều đó thực sự hữu ích với các công việc có thể độc lập thực hiện mà không phải chờ kết quả của công việc khác
5. Hạn chế chia câu lệnh ra quá nhiều job
Bởi, trước mỗi job thực hiện sẽ có khoảng thời gian pending cho việc đó. Chính vì vậy, hãy gộp những câu lệnh có thể vào chung job, thời gian pending rút ngắn cũng không phải là ít. Lưu ý, không gộp chung quá nhiều câu lệnh, khi biên dịch 1 câu lệnh có lỗi, sẽ khiến cả job phải chạy lại.
6. Sử dụng cache của gitlab
Giả sử mỗi lần thực thi lại cần cài đặt đầy đủ nodee module cho một project nodejs, quá trình đó sẽ tốn rất nhiều thời gian, thay vào đó, Gitlab cho phép bạn sử dụng cache nhằm rút ngắn thời gian. Xem thêm tại https://docs.gitlab.com/ee/ci/yaml/#cache
Bình luận