4.1 Cài đặt
4.1.2 Cách thức tổ chức mã nguồn và quá trình build ảnh docker
Mã nguồn của của các vi dịch vụ nêu trên được tổ chức trên kho quản lý mã
gitlab như sau (Hình 4.3):
Hình 4.3: Cách tổ chức mã nguồn
Tầng tiếp theo là thư mục java, resources, … để chứa mã nguồn và các tài nguyên khác của ứng dụng.
• Tạo thư mục docker-build ở cùng mức với thư mục mã nguồn src, chứa
Dockerfile dùng để build ảnh docker, các tệp script để sử dụng như tài nguyên cho ảnh. Ngồi ra, các script để tự động hóa q trình build và đẩy ảnh lên kho chứa ảnh cũng được đặt trong thư mục này.
Để có tồn quyền cấu hình, luận văn cài đặt hệ thống quản lý mã Gitlab và máy
chủ CI Jenkins như các ứng dụng nội bộ. Jenkins cần sử dụng các plugin để cung cấp các chức năng tự động hóa cụ thể. Trong bài, scm-plugin được sử dụng để tải mã từ
gitlab về máy chủ Jenkins và gitlab-plugin sẽ được sử dụng để giúp Jenkins nhận được thông báo về các sự kiện thay đổi mã trên Gitlab, từ đó kích hoạt q trình build và
cập nhật kết qủa lên chính commit đã kích hoạt đó.
Hình 4.5: Cấu hình Gitlab plugin trên Jenkins cho tiền hợp nhất
Có hai q trình build được sử dụng trong luồng triển khai được cài đặt: build
tiền hợp nhất và build hậu hợp nhất.
Build tiền hợp nhất (premerge-build) được kích hoạt khi nhà phát triển gửi yêu
cầu hợp nhất vào nhánh chính trên gitlab. Gitlab sẽ được cấu hình để gửi sự kiện tới Jenkins khi yêu cầu hợp nhất được tạo ra (Open Merge Request Event) thơng qua web hook, cịn Jenkins sẽ được cấu hình để chỉ lắng nghe sự kiện này, từ đó tải mã mới về máy, chạy shell script để thực hiện q trình build. Các bài kiểm thử, phân tích tĩnh có thể được sử dụng trong q trình build này. Tuy nhiên, để đơn giản hoá hệ thống nhằm mục đích đánh giá thiết kế, luận văn chỉ sử dụng lệnh build đơn giản của Maven trong bước này.
Build hậu hợp nhất (postmerge-build) được kích hoạt khi yêu cầu hợp nhất được
chấp nhận. Khi yêu cầu hợp nhất từ nhánh nguồn tới nhánh đích được phê duyệt,
Gitlab sẽ tạo ra một sự kiện đẩy mã lên nhánh đích (Push Event). Gitlab sẽ được cấu hình để gửi sự kiện này tới Jenkins như bước tiền hợp nhất. Quá trình build trên
Jenkins được thực hiện bằng việc sử dụng shell script. Đồng thời trong bước này,
Jenkins sẽ sử dụng các script được cung cấp trong chính thư mục mã nguồn của vi
Hình 4.6 Trạng thái build tiền hợp nhất được cập nhật theo thời gian thực trên Gitlab
Hình 4.7: Build tiền hợp nhất chạy thành cơng
Slack được sử dụng trong luận văn như kênh giao tiếp chính. Slack-plugin được cài đặt trong Jenkins để gửi thông báo tới Slack dựa vào trạng thái của quá trình build (Hình 4.8). Tất cả trạng thái của các quá trình build này sẽ được cập nhật trực tiếp lên Gitlab, cung cấp thông tin trực quan cho nhà phát triển.
Hình 4.8: Thơng báo từ Jenkins tới Slack
Sau khi build tiền hợp nhất thực hiện thành công, luận văn sử dụng API được
cung cấp bởi Jenkins để kích hoạt tiếp q trình triển khai, từ đó cập nhật ứng dụng
vào môi trường sản phẩm (production environment).
Hầu hết các tác vụ trong Jenkins đều được cấu hình thơng qua mã Groovy DSL một cách tự động. Điều này giúp cho việc cấu hình trở nên đơn giản, nhanh chóng và
quan trọng nhất là có thể kiểm thử được từ trước khi thực sự chạy (Hình 4.9)
Hình 4.10: Các tác vụ trong Jenkins