Cũng từ đây, những bài toán mới đã được đặt ra trong việchợp tác giữa hai giai đoạn, cũng như nâng cao khả năng mở rộng và tăng hiệu suấtlàm việc.Vì vậy, khái niệm DevOps ra đời nhằm tối
Trang 1TRƯỜNG ĐẠI HỌC THỦ DẦU MỘT
VIỆN KỸ THUẬT – CÔNG NGHỆ
BÁO CÁO TIỂU LUẬN
GAME ENGINE
UNITY ENGINE IN A NUTSHELL
GVHD: Th.S HỒ ĐẮC HƯNG SVTH: NGUYỄN NGỌC SÂM MSSV: 1924801030248
BÌNH DƯƠNG – 07/2023
Trang 2LỜI MỞ ĐẦU
Sự ra đời và phát triển của công nghệ thông tin là một trong những thành tựu
vĩ đại nhất của con người Nhập đà phát triển công nghệ thông tin đang là một xuhướng được các ngành khoa học, giáo dục, kinh tế,… quan tâm Nó hiện đang pháttriển mạnh mẽ, to lớn và không ngừng phát triển
Khoản thời gian gần đây, trước nhu cầu phát triển và cải tiến sản phẩm liên tục
để đáp ứng thị trường, sẽ chia tách giữa giai đoạn phát triển và giai đoạn vân hànhđang dần thể hiện rõ ràng Cũng từ đây, những bài toán mới đã được đặt ra trong việchợp tác giữa hai giai đoạn, cũng như nâng cao khả năng mở rộng và tăng hiệu suấtlàm việc
Vì vậy, khái niệm DevOps ra đời nhằm tối ưu chu trình phát triển phần mềm,giúp sản phẩm công nghệ thông tin được phát triển nhanh và thường xuyên hơn.Trong đồ án này, em sẽ triển khai giới thiệu về quy trình CI/CD Pipeline, một quytrình đang được áp dụng rộng rãi ngày nay
Để hoàn thành đồ án này, ngoài việc cố gắng học hỏi cũng như được sự giúp
đỡ tận tình của thầy Hồ Đắc Hưng Em xin bày tỏ lòng cảm ơn đến thầy
Tuy nhiên, trong quá trình nghiên cứu đề tài, do kiến thức và thời gian thựchiện đồ án còn hạn chế nên bài báo cáo của em còn khá nhiều thiếu sót Mong nhậnđược góp ý của thầy
Em xin chân thành cảm ơn
Trang 3MỤC LỤC
CHƯƠNG I GIỚI THIỆU VỀ CI/CD PIPELINE 4
1.1 Khái niệm CI/CD Pipeline 4
1.1.1 Khái niệm CI 4
1.1.2 Khái niệm CD 4
1.1.3 CI/CD 5
1.1.4 Pipeline trong CI/CD 5
1.2 Lợi ích của CI/CD Pipeline 6
1.3 Hạn chế của CI/CD Pipeline 8
1.4 Các thành phần chính của CI/CD Pipeline 8
1.5 Nguyên tắc và tiêu chí lựa chọn service khi triển khai mô hình CI/CD Pipeline 9
1.6 Kiến trúc CI/ CD Pipeline 10
1.7 Ứng dụng của CI/CD Pipeline trong thực tế 11
CHƯƠNG II TRIỂN KHAI DỰ ÁN THEO QUY TRÌNH CI/CD PIPELINE 12
2.1 Giới thiệu công cụ và phần mềm hỗ trợ thực hiện 12
2.1.1 GitHub 12
2.1.2 Jenkins 12
2.2 Quy trình triển khai dự án thực tế theo CI /CD Pipeline 14
2.3 Các bước thực hiện chi tiết 14
CHƯƠNG III KẾT LUẬN 23
3.1 Kết quả đạt được 23
3.2 Thuận lợi và khó khăn khi thực hiện triển khai 23
Trang 4CHƯƠNG I GIỚI THIỆU VỀ CI/CD PIPELINE 1.1 Khái niệm CI/CD Pipeline
1.1.1 Khái niệm CI
CI hay\Continuous Integration\đây là một phương pháp pháttriển phần mềm, yêu cầu các thành viên trong team cần tích hợpcông việc với nhau thường xuyên, mỗi ngày cần có tối thiểu một lầntích hợp
Qua đó, nhằm phát hiện ra những lỗi sai nhanh nhất có thể.Khi sử dụng CI sẽ giúp giảm những vấn đề về tích hợp và cho phépcác nhà phát triển phần mềm làm việc nhanh hơn, hiệu quả hơn
CI có quy trình làm việc như sau:
Các developer sẽ commit code (mã cam kết) có thể lên repo(repository - kho)
Tiếp theo, CI server sẽ thực hiện giám sát trên repo và kiểmtra xem có bất kỳ sự thay đổi nào trên repo hay không
Khi xảy ra những thay đổi, CI server sẽ phải hiện ra code mớinhất từ repo và sau đó sẽ build, chạy các unit test và integrationtest Tiếp sau đó, CI server sẽ tạo ra những phản hồi và gửi đến chocác thành viên trong dự án Và CI server lại tiếp tục chờ đợi nhữngthay đổi từ repo.Mỗi lần mà Dev làm xong các task của mình, họ sẽchạy trên local trước để kiểm tra trước khi commit code lên repo.Đây là một công đoạn thường xuyên diễn ra tại bất cứ thời điểm nàotrong ngày Việc xây dựng tích hợp sẽ không xảy ra nếu chúngkhông ảnh hưởng đến repo
1.1.2 Khái niệm CD
Trang 5CD được viết tắt từ cụm\Continuous Delivery\– chuyển giaoliên tục Quá trình này kiểm tra tất cả những thay đổi về code đãđược build và code trong môi trường kiểm thử Continuous Deliverycho phép các Dev – lập trình viên tự động hóa phần mềm testing,kiểm tra phần mềm qua nhiều thước đo trước khi đưa vào triển khai.
Các bài kiểm tra bao gồm: UI testing,\Integration testing, v.v.Quy trình chuyển giao được CD sử dụng Deployment Pipeline chiathành các giai đoạn Mỗi giai đoạn sẽ có một mục tiêu để xác minhchất lượng của các tính năng từ một góc độ khác nhằm kiểm địnhchức năng và hạn chế những lỗi phát sinh có thể gây ảnh hưởng tớitrải nghiệm người dùng
Ngoài ra, CI/CD cũng trở thành thông lệ tốt nhất trong ngànhcông nghệ thông tin để giữ cho ứng dụng có thể được triển khai bất
cứ lúc nào cũng như đẩy mã triển khai đó vào kho sản xuất khi có
Trang 6chuyên gia vận hành (Operation) cộng tác để xây dựng và triển khaicode cho môi trường production.
Sự ra đời của tự động hóa trong quy trình triển khai cho phépcác nhóm phát triển tập trung nhiều hơn vào việc đổi mới và cảithiện sản phẩm cuối cho người dùng Bằng cách giảm thiểu các tác
vụ thủ công, các team có thể triển khai các bản cập nhật code mớinhanh hơn nhiều và giảm thiểu lỗi do con người
Trang 71.2 Lợi ích của CI/CD Pipeline
Hạn chế rủi ro
Nhờ việc phát hiện và sửa lỗi sớm cho phép giảm thiểu các rủi
ro, qua đó giúp nâng cao chất lượng sản phẩm thông qua khả năng
tự động kiểm tra và quan sát
Đồng thời, các quy trình thủ công lặp đi lặp lại hàng ngày cũng đượcgiảm thiểu và được thay bằng xây dựng và kiểm thử tự động.\Thêm nữa CI/CD có thể deploy, triển khai phần mềm tại bất kỳ thờigian nào
Thay đổi code nhỏ
CI/CD cho phép tích hợp nhiều loại mã nhỏ cùng một lúc Sựthay đổi này được thực hiện một cách đơn giản và xử lý nhanhchóng không giống như những đoạn mã khổng lồ Điều này giúp hạnchế các vấn đề phát sinh liên quan đến việc thay đổi về sau
Sau khi được tích hợp vào kho mã, các mã này có thể thựchiện kiểm tra ngay Nhờ đó, các lập trình viên có thể nhận ra vấn đềngay từ sớm trước khi khối lượng công việc tăng lên Có thể thấyđây là một lợi thế tuyệt vời cho các nhóm phát triển lớn hoặc nhữngngười\làm việc từ xa\giao tiếp hiệu quả hơn
Hạn chế những ảnh hưởng của lỗi hiệu quả
CI/CD được thiết kế với hệ thống sao cho khi có lỗi nào đó xảy
ra thì những kết quả tiêu cực sẽ bị giới hạn trong phạm vi ảnhhưởng nhất định nào đó Việc hạn chế các vấn đề này giúp làm giảmkhả năng hư hỏng từ đó làm cho hệ thống được bảo trì và xử lý mộtcách dễ dàng hơn.Với hệ thống CI CD, có thể đảm bảo cho việc cách
ly lỗi sẽ được phát hiện một cách nhanh chóng và dễ dàng thực hiện
Trang 8hơn Chính vì vậy, hậu quả của các lỗi trong ứng dụng sẽ được giớihạn trong phạm vi ảnh hưởng của nó.
Đảm bảo tính logic
Quy trình CI/CD có phần kiểm tra tự động, do đó khi lập trìnhviên phát triển tính năng mới sẽ không gây ảnh hưởng tới tính năngcũ
Tập trung công việc hơn
Các lập trình viên sẽ phải thực hiện build và deploy phần mềmtrên cả máy tính cá nhân, do quy trình CI/CD mang tính tự động hóacao
Nâng cao chất lượng Code thông qua quy trình
Các lập trình viên có thể cài đặt những ràng buộc ngay từ đâu,chẳng hạn như pull request khi tạo ra thì không được quá lớn khôngđược quá xa sự thay đổi, v.v Qua đó giúp lượng pull request đượctốt hơn
Phát triển kỹ năng unit test cho Developer
Thông qua các chỉ số ràng buộc về code coverage được cài đặttrong quy trình của CI/CD, các lập trình viên cần ý thức được tầmquan trọng của các unit test để không làm giảm chỉ số codecoverage khi phát triển tính năng mới
Tối ưu tốc độ phát triển của sản phẩm
Thông qua các chỉ số ràng buộc về code coverage được cài đặttrong quy trình của CI/CD, các lập trình viên cần ý thức được tầmquan trọng của các unit test để không làm giảm chỉ số codecoverage khi phát triển tính năng mới
Trang 91.3 Hạn chế của CI/CD Pipeline
Bên cạnh những lợi ích kể trên CI/CD vẫn có một vài hạn chếcần phải lưu ý như:
Một dự án có sự tham gia của nhiều Developer sẽ có nhiều pullrequest được merge vào branch Khi đó, các thành viên phảichờ pull request của người trước hoàn thành, sau đó thực hiệncập nhật lại source code (nếu có thông báo conflict từ Gitrepository) và cần trải qua các bước test lại từ đầu Điều nàygây ra gián đoạn thời gian phát triển sản phẩm
Khi sử dụng dịch vụ CI/CD của bên dịch vụ thứ 3 nếu dịch đóphát sinh vấn đề và bị crash, bị khai tử thì các dự án đang ápdụng CI/CD cũng bị ảnh hưởng tương đối nghiêm trọng
1.4 Các thành phần chính của CI/CD Pipeline
Một CI/CD pipeline hoàn chỉnh sẽ bao gồm đầy đủ các bước màthành viên trong nhóm phát triển phần mềm cần phải tuân thủ vàthực hiện nhằm triển khai một phiên bản sản phẩm mới
Lập trình viên sẽ bắt đầu phát triển lần lượt từng bước một đểhoàn thiện chương trình Nếu có một bước nào đó xảy ra lỗi sẽ đượcgửi về email hoặc tin nhắn để thông báo cho dev nắm được và sửalỗi một cách nhanh nhất
Các bước đầy đủ trong CI/CD Pipeline:
Source stage: Đây là bước đầu tiên trong quy trình Các lập
trình viên sẽ thay đổi code trên kho tài nguyên code Khi đó,các pipeline tương ứng với từng thay đổi sẽ được tiến hành
Build stage: Code sẽ được biên dịch và triển khai qua nền
tảng Docker Nếu trong trường hợp có lỗi xảy ra, lập trình viên
Trang 10sẽ sửa lỗi ngay trước khi chuyển sang bước tiếp theo của CI/CD
pipeline
Test stage: Đây là một bước quan trọng cần được thực hiện
sau khi nhận code để chạy thử chương trình Phần test giúp
đảm bảo chương trình chạy theo đúng như thiết kế mô tả
Deploy stage: Sau khi test các lỗi trong chương trình xong,
phần code sẽ được tiến hành triển khai chạy thử và công khai
tới người dùng cuối sử dụng
1.5 Nguyên tắc và tiêu chí lựa chọn service khi triển khai
mô hình CI/CD Pipeline
Nguyên tắc:
Không cần tới toàn bộ cả team trong tổ chức phải ứng dụng
CI/CD pipeline Có thể tiến hành triển khai dần dần tùy vào
mức độ phù hợp của dự án
Quy trình được ứng dụng càng sớm càng tốt, vào lúc team quy
mô còn nhỏ hoặc khi dự án vừa mới bắt đầu
Hiện nay, có nhiều nhà cung cấp dịch vụ để bạn lựa chọn Hãy
chọn ra service phù hợp nhất cho nhóm của bạn Chẳng hạn,
với team Mobile, bạn cần xác định những service CI/CD
pipeline là gì, những loại có thể hỗ trợ build trên các hệ điều
hành iOS/Android Trong khi đó, team backend sẽ có yêu cầu
riêng khác
Service không chỉ tốt nhất mà còn phải phù hợp cho nhiều
team để có thể chia sẻ tài nguyên, giúp tối ưu chi phí nhất
Tìm hiểu chi tiết các điểm cần lưu ý trong phần tiếp theo
Tiêu chí lựa chọn service CI/CD Pipeline phù hợp
Các yếu tố lựa chọn service CI/CD Pipeline phù hợp:
Trang 11Service CI/CD pipeline cần đáp ứng đầy đủ nhu cầu cần
thiết
Service cần được thiết kế trực quan, dễ sử dụng nhằm
đáp ứng được cho các team không chuyên
Cấu hình là một yếu tố quan trọng trong CI/CD pipeline vì
nó có liên quan mật thiết tới build time Thời gian build
càng nhanh thì càng hiệu quả
Mức độ phổ biến của service càng cao càng tốt vì nhiều
người biết cách sử dụng Một số cho bạn lựa chọn như:
Jenkins, Docker, Gitlab, Circle CI, Bitrise, TeamCity,
TravisCI,…
1.6 Kiến trúc CI/ CD Pipeline
Một CI/CD Pipeline (Continuous Integration/Continuous Delivery Pipeline) làmột hệ thống tự động để phát triển, kiểm tra và triển khai phần mềm Kiến trúc củamột CI/CD Pipeline có thể được phân thành các thành phần chính sau:
Source Control Management (SCM): Đây là nơi lưu trữ mã nguồn và theo dõi
lịch sử thay đổi SCM phổ biến bao gồm Git, Subversion và Mercurial Nhóm pháttriển làm việc với mã nguồn trong SCM và tạo các nhánh để làm việc trên các tínhnăng hoặc sửa lỗi
Continuous Integration (CI) Server: CI Server là một phần quan trọng của
kiến trúc CI/CD Pipeline Nó theo dõi SCM để phát hiện bất kỳ thay đổi nào trong mãnguồn và kích hoạt quá trình CI
Build Automation: Bước này liên quan đến xây dựng mã nguồn thành các gói
cài đặt hoặc các tài liệu thực thi hợp lệ Công cụ xây dựng phổ biến bao gồm ApacheMaven và Gradle cho Java, npm cho JavaScript và MSBuild cho NET
Automated Testing: Một phần quan trọng của CI là việc thực hiện kiểm tra tự
động Điều này đảm bảo rằng mã nguồn mới không gây ra lỗi khi được tích hợp vào
mã nguồn hiện có Kiểm tra tự động có thể bao gồm kiểm tra đơn vị, kiểm tra tích
Trang 12hợp và kiểm tra giao diện người dùng Các công cụ phổ biến bao gồm JUnit, NUnit,Selenium và Cucumber.
Artifact Repository: Khi quá trình xây dựng hoàn thành, các file kết quả được
lưu trữ trong Artifact Repository Đây là nơi lưu trữ các gói cài đặt, mã nguồn đãđược biên dịch và các tài liệu thực thi khác Các công cụ quản lý Artifact phổ biếnbao gồm Nexus và Artifactory
Deployment Automation: Quá trình tự động triển khai giúp thực hiện việc triển
khai mã nguồn đã qua kiểm tra vào môi trường sản phẩm Các công cụ triển khai nhưAnsible, Docker, Chef hoặc Kubernetes được sử dụng để tự động hóa quá trình triểnkhai và cấu hình môi trường
Continuous Delivery (CD): Môi trường Continuous Delivery chịu trách nhiệm
triển khai tự động mã nguồn đã qua kiểm tra lên môi trường thử nghiệm hoặc môitrường sản phẩm Quá trình này có thể được kích hoạt bằng cách thông báo từ CIServer hoặc bằng sự can thiệp của người quản trị
Monitoring and Feedback: Hệ thống giám sát giúp theo dõi hiệu suất và khả
năng sẵn sàng của mã nguồn đã triển khai Sự cố và lỗi được ghi lại và thông báo chonhóm phát triển để khắc phục và cải thiện hệ thống
1.7 Ứng dụng của CI/CD Pipeline trong thực tế
CI/CD PIPELINE được áp dụng cho nhiều loại ứng và dự án phần mềm, từwebsite, mobile, game, IoT, AI, đến cloud
Một số công ty lớn đã áp dụng CI/CD Pipeline cho công nghệ của họ bao gồm:Amazon, Google, Microsoft, IBM, Facebook, Netflix, và nhiều công ty khác Cáccông ty này sử dụng CI/CD để tự động hóa quy trình phát triển và kiểm thử ứng dụngcủa họ, giúp giảm thời gian cung cấp sản phẩm và tăng hiệu suất Họ đều có các bộcông cụ CI/CD Pipeline hoàn chỉnh để tăng tốc các chu kỳ phát triển và phát hànhphần mềm Ví dụ, AWS CodePipeline của Amazon tự động hóa các giai đoạn xâydựng, kiểm tra và triển khai của quá trình phát hành mỗi khi có thay đổi mã, dựa trên
mô hình phát hành được xác định
Trang 13CHƯƠNG II TRIỂN KHAI DỰ ÁN THEO QUY TRÌNH CI/CD PIPELINE 2.1 Giới thiệu công cụ và phần mềm hỗ trợ thực hiện
2.1.1 GitHub
GitHub\là một nền tảng phát triển hợp tác, còn được gọi là rèn
Đó là, một nền tảng tập trung vào sự hợp tác giữa các nhà phát
triển để phổ biến và hỗ trợ phần mềm của họ (mặc dù từng chút
một nó đã được sử dụng cho các dự án khác ngoài phần mềm)
Như tên gọi của nó, nó nằm trên\Hệ thống kiểm soát phiên bản
Git Vì vậy, nó có thể hoạt động trên mã nguồn của các chương trình
và thực hiện một sự phát triển có trật tự Ngoài ra, nền tảng này
được viết bằng Ruby on Rails
Nó không phải là hoàn toàn mở
Nó có giới hạn về dung lượng, vì bạn không thể vượt quá
100MB trong một tệp duy nhất, trong khi kho lưu trữ được giới
hạn ở 1GB trong phiên bản miễn phí
2.1.2 Jenkins
Jenkins là một mã nguồn mở có khả năng thực hiện tích hợp liên
tục (Continuous Integration, viết tắt là CI), và xây dựng những tác
vụ tự động hóa Jenkins được định nghĩa là một opensource được sử
dụng để thực hiện các chức năng được tích hợp liên tục (nó còn
Trang 14được gọi là CI- Continuous Integration) và có thể xây dựng các tác
dữ liệu Plugin của mình
Công cụ Jenkins cũng hỗ trợ kiến trúc đám mây để bạn cóthể triển khai Jenkins trên các nền tảng dựa trên đám mây.Tích hợp với nhiều nền tảng CI/CD và giúp cho team đượcđồng bộ hóa
Rất dễ dàng để tìm ra các lỗi trong Jenkins Nhà phát triển
có thể kiểm tra lỗi và giải quyết chúng nhanh chóng
Rút ngắn thời gian bàn giao dự án và linh hoạt trong côngviệc
Jenkins hỗ trợ các loại kho mã nguồn khác nhau như SVN,Git, v.v Nhà phát triển có thể đặt các trình kích hoạt khácnhau sau khi thực hiện các thay đổi trong mã
Gặp một số khó khăn trong việc cài đặt và cấu hình Jenkins