3.2 Phân tích và lựa chọn công nghệ
3.2.2 Máy chủ CI và máy chủ triển khai
Ngay khi nhà phát triển gửi yêu cầu hợp nhất vào nhánh develop, Git sẽ kích hoạt các tác vụ dịch được chuẩn bị trong máy chủ CI. Quá trình dịch sẽ bao gồm tiền hợp nhất (pre-merge) và hậu hợp nhất (post-merge), với các bài kiểm thử khác nhau
được thực hiện để đảm bảo chất lượng mã. Tất cả các bên liên quan đều có thể nhìn
thấy q trình dịch, thời gian thực hiện, trạng thái kết quả từ máy chủ CI. Nếu có vấn
đề xảy ra, sẽ có thơng báo gửi tới các bên liên quan thông qua kênh giao tiếp chung.
hiện nay như Git, Subversion, Mercurial ... và hỗ trợ các mã lệnh của nhiều loại ngôn ngữ kịch bản như Bash, Python, Groovy, Gradle ... Jenkins có kiến trúc plugin, cho phép thêm bớt các tính năng tùy theo yêu cầu. Một số plugin phổ biến cho Jenkins như phân quyền, Slack, Mail, ... Việc sử dụng Jenkins sẽ đảm tính mở rộng sau này do khả năng hỗ trợ đa dạng các cơng nghệ của nó. Do các đặc điểm linh hoạt, Jenkins cũng sẽ
được sử dụng làm máy chủ triển khai trong luận văn.
Hình 3.3: Máy chủ CI Jenkins
Jenkins có thể chạy ở chế độ một mình. Tuy nhiên, ở chế độ một mình, khi số
lượng các tác vụ build tăng lên, CPU và bộ nhớ sẽ không đáp ứng được. Để ngăn chặn
điều này, cách sử dụng Jenkins phổ biến là theo mơ hình chủ-nơ lệ (master-slave)
(Hình 3.4). Một máy nô lệ là một thiết bị được cấu hình để hành xử như một executor của máy chủ. Máy chủ sẽ phục vụ như giao diện chính, nhận các tác vụ và phân tán tải lên các executor/slave được đăng kí.
Hình 3.4: Kiến trúc master-slave của Jenkins [16]
Các máy nội bộ của mỗi đội có thể được cấu hình và tham giao vào Jenkins với vai trò slave. Các bản build mã của những đội này có thể được điều chỉnh để ln chạy trên các máy slave của đội. Điều này giúp hạn chế việc quản lý slave cho đội vận hành và phân phối tải tùy theo nhu cầu sử dụng về mỗi đội, phù hợp với mơ hình phát triển vi dịch vụ.