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 nhận biết repository cần áp dụng CI, cần khi báo 1 file .gitlab-ci.yml nằm ở thư mục gốc. File này phải được đặt đúng tên và có định dạng hợp lệ, khi ấy gitlab mới xác định và áp dụng CI cho  repository của bạn. 
 

 

 
Bất cứ khi nào bạn commit gì đó lên repository , GitLab sẽ tìm kiếm file .gitlab-ci.yml  và bắt đầu công việc trên Runners theo những nhiệm vụ được định nghĩa trên file ".yml". Nội dung file gồm những section, lệnh thực thi, biến,  ... mà bạn muốn thực hiện trong quá trình triển khai.

Lưu ý rằng: ".gitlab-ci.yml" là một tệp YAML vì vậy bạn cần chú ý đến thụt đầu dòng. Luôn sử dụng dấu cách, không phải tab.

 

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