1.2 Mục tiêu nghiên cứu Thông qua khóa luận này, nhóm tác giả muốn thực hiện được các mục tiêu sau: * Nghiên cứu về mô hình DevOps, mô hình DevSecOps, các công cụ hỗ trợ tíchhợp liên tục
Trang 1ĐẠI HỌC QUOC GIA TP HO CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA MẠNG MÁY TÍNH VÀ TRUYÈN THÔNG
LÊ THANH HONG NHUT
CHÂU THỊ NGUYỆT
KHÓA LUẬN TÓT NGHIỆP
THIET KE VÀ TRIEN KHAI HỆ THONG PHÁT TRIEN
PHAN MEM TU DONG VA AN TOAN THEO MO HINH
DEVSECOPS
Design and deployment of an automatic and secure software
development system based on the devsecops model
KY SU NGANH AN TOAN THONG TIN
TP HO CHi MINH, 2021
Trang 2ĐẠI HỌC QUÓC GIA TP HÒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA MẠNG MÁY TÍNH VÀ TRUYÈN THÔNG
LÊ THANH HONG NHUT - 16520901
CHAU THỊ NGUYET - 16520859
KHÓA LUẬN TÓT NGHIỆP
THIET KE VÀ TRIEN KHAI HỆ THONG PHÁT TRIEN
PHAN MEM TU DONG VA AN TOAN THEO MO HINH
DEVSECOPS
Design and deployment of an automatic and secure software
development system based on the devsecops model
KY SU NGANH AN TOAN THONG TIN
GIANG VIEN HUONG DAN
THS.NGUYEN THANH HOA
Trang 3DANH SÁCH HỘI ĐÒNG BẢO VỆ KHÓA LUẬN
Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số
-Ti8ầy của Hiệu trưởng Trường Đại học Công nghệ Thông tin.
AT ~ Chủ tịch.
PA =— eee e eee c cece eee eeseee nessa eee een eee ~ Ủy viên
Trang 4ĐẠI HỌC QUOC GIA TP HCM CONG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC Độc Lập - Tự Do - Hạnh Phúc
CÔNG NGHỆ THÔNG TIN
TP HCM, ngay thang 01 năm 2021
NHAN XÉT KHÓA LUẬN TOT NGHIỆP
Tên khóa luận:
CỦA CÁN BỘ HƯỚNG DẪN
Tên tiếng Việt: Thiết kế và triển khai hệ thống phát triển phần mềm tự động va an toàn theo
mô hình DevSecOps.
Tên tiếng Anh: Design and deployment of an automatic and secure software development
system based on the DevSecOps model.
Nhóm SY thực hiện:
Lê Thanh Hồng Nhựt
Châu Thị Nguyệt
Đánh giá Khóa luận
1 Về cuốn báo cáo:
Trang 5Một số nhận xét về hình thức cuốn báo cáo:
Trang 63 Về chương trình ứng dụng:
Trang 7Người nhận xét
(Ký tên và ghi rõ họ tên)
Trang 8ĐẠI HỌC QUOC GIA TP HCM CONG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC Độc Lập - Tự Do - Hạnh Phúc
CÔNG NGHỆ THÔNG TIN
TP HCM, ngay thang 01 năm 2021
NHAN XÉT KHÓA LUẬN TOT NGHIỆP
Tên khóa luận:
CUA CÁN BO PHAN BIEN
Tên tiếng Việt: Thiết kế và triển khai hệ thống phát triển phần mềm tự động va an toàn theo
mô hình DevSecOps.
Tên tiếng Anh: Design and deployment of an automatic and secure software development
system based on the DevSecOps model.
Nhóm SY thực hiện:
Lê Thanh Hồng Nhựt
Châu Thị Nguyệt
Đánh giá Khóa luận
1 Về cuốn báo cáo:
Trang 9Một số nhận xét về hình thức cuốn báo cáo:
Trang 103 Về chương trình ứng dụng:
Trang 11Người nhận xét
(Ký tên và ghi rõ họ tên)
Trang 12LỜI CÁM ƠN
Hoàn thành khóa luận tốt nghiệp này ngoài công sức và sự cố gắng của
nhóm tác giả thì còn có sự hỗ trợ và giúp đỡ của các thầy cô, các anh chị,bạn bè và gia đình Nhóm tác giả xin bày tỏ lòng biết ơn đến mọi người
Nhóm tác giả xin gửi lời cảm ơn chân thành và lòng biết ơn sâu sắc đến
các thầy, cô trường Đại học Công nghệ Thông tin và các thầy, cô KhoaMạng máy tính và Truyền thông của trường đã tận tình hướng dẫn, truyềnđạt kiến thức trong những năm học tập Với vốn kiến thức được tiếp thutrong quá trình học tập không chỉ là nền tảng cho quá trình hoàn thànhkhóa luận tốt nghiệp mà còn là hành trang quý báu để sau này bước vào.đời một cách vững chắc và tự tin Bên cạnh đó, nhóm tác giả cũng gửilời cảm ơn chân thành đến phòng Lab E3.1 và phòng thí nghiệm An toànthông tin InsecLab đã tạo điều kiện cung cấp cơ sở vật chất để dé tài củanhóm tác giả có thể hoàn thiện đến ngày hôm nay
Đặc biệt, xin gửi lời cảm ơn đến Ths.Nguyễn Thanh Hòa đã tạo mọi điềukiện, giúp đỡ tận tình và nhiệt tình hướng dẫn chúng tôi hoàn thành tốt
khóa luận này.
Cuối cùng, chúng tôi xin cảm ơn đến gia đình, người thân và bạn bè đã tạotiền dé, điều kiện thuận lợi, cũng như khích lệ, động viên chúng tôi hoànthành dé tài này
Chúng tôi xin chân thành cảm ơn!
Trang 1322.1 Nguéngéchinhthanh 12
2.2.2 LợiíchcủaDevOps ẶẶ 15
223 QuytrìnhDevOps 16
Trang 14MỤC LỤC
2.4
2.5
2.6
2.2.4 Tình hình nghiên cứu - 19
Mô hình DevSecOps 20
23.1 Nguồngốchìnhthành - 20
2.3.2 Các nguyên tắc đặc trưng cho DevSecOps 22
2.3.3 TriénkhaiDevSecOps - 22-20005 24 2.34 Tình hình nghiên cứu 25
Tích hợp và triển khai liên tục 26
2.4.1 Phát triển phần mềm liên tục - 26
2.4.2 Tíchhợpliêntục 27
2.43 Phân phối liêntục cà 28 2.44 Triển khai lêntục ẶẶỐẶ 31 2.45 Jenkin⁄ gy « x« - À 33
Hệ thống quản lý phiên bản mã nguồn 35
2.5.1 Tổn hang Me 4 \p§m.j _ 35
2.5.2 Hệ thống quản lý phiênbản 36
2.5.2.1 Hệ thống quản lý phiên bản tập trung 36
2.5.2.2 _ Hệ thống quản lý phiên ban phântán 37
2.5.2.3 Lợi ích của hệ thống quản lý mã nguồn 39
Pa adal 40 2.5.4 Githab 2 LH HQ HH HH ha 44 Container hóa và quản lý ha tầng container 45
2.6.1 AohOa 2 .“.ẽ Ha 45
2.6.2 Containerhéa 2.2 QQ S 46 2.6.3 Docker “6a -.( 47
2.6.4 Quản lý và điềuphối 49
2.6.5 Kubernetes Ặ Q Q Q Q Q Q Q ee 49
2.6.6 Rancher Q Q Q Q ee ee 52
Trang 153 PHAN TÍCH VA THIET KẾ HỆ THONG 61
3.1 Phân tích và thiết kế hệthống - 61
3.1.1 Môhìnhtổngthể 613.1.2 M@Ohinhchitiét 2.0 0 eee 633.2 Các thành phằnhệthống - 64
3.2.1 Trang web quản trị hệthống - 643.2.2 Quản lý phiên bản mã nguồn - Kho lưu trữ mã nguồn (GitLab) 68
3.2.3 Tíchhợpliêntục 70
3.2.3.1 GilabRunnr 70
3.2.3.2 lenkins ee eee 70 3.2.4 Quản lý Dockerlmage 76
3.25 Triển khai lêntục ẶẶSẶ T1
3.2.6 Các công cụbảomật cẶ 823.2.7 Giám sát tích hợp và triển khai liên tục - ELK Stack 86
4 TRIEN KHAI HE THONG VA DANH GIA KET QUA 88
4.11 Théngtinphancting 2.2 2.0.0 eee 88
4.1.2 Giới thiệu du an thửnghệm 89
4.1.3 Kichbảnthửnghệm 90
Trang 16MỤC LỤC
4.1.3.1 Kịch ban 1 - Triển khai DevSecOps cho dự án quản
trị hệ thống (Administration Dashboard)_ 90
4.1.3.2 Kịch ban 2 - Phát triển tính năng mới trên Dashboard có tôn tại lỗ hống tại mã nguồn 95
4.1.3.3 Kịch ban 3 - Phát triển tính năng mới trên Dashboard có tồn tại lỗi cơ bản của ngôn ngữ lập trinh 97
4.1.3.4 Kịch ban 4 - Triển khai DevSecOps cho dự án thương mại Kmarket 102
4.2 Đánh giá hệ thống đã triển khai - 108
421 Uudiém Z7 ,Ø5ZV11ộmM.ốỔÖ Ö —4d 108 42.2 Hanché 20g eee 109 5 KẾT LUẬN VA HƯỚNG PHAT TRIEN 110 5.1 Kétluan 4” gop ` cca |Jj À 110 5.2 Hướngpháttriển ee 111 TÀI LIỆU THAM KHẢO 112 PHỤ LỤC A 118 1 Nội dung tập tin Jenkinsfile 118
2 Nội dung tập tin Dockerfile 124
3 Nội dung tập tin buildsh 125
4 Nội dung tập tindeploysh 127
5 Nội dung tập tin giab-ci.yml 128
PHỤ LỤC B 129
Trang 17Danh sách hình vẽ
21
2.2
2.3
24
2.5
2.6
2.7
2.8
2.9
2.10
211
2.12
2.13
2.14
2.15
2.16
»
Các giai đoạn của mô hình Waterfall 9
Mô hình Scrum «gore .x.ấ ` lại Sự hình thành DevOps 14
DevSecOps tích hợp các phương thức bảo mật vào toàn bộ các giai đoạn của DeVOps SH ee 21 Mối quan hệ giữa tích hợp liên tục, phân phối liên tục và triển khai liên tục trong phát triển phần mềm .- 27
Mô hình tích hợp liên tục 28
Mô hình phân phối liên tục 29
Mô hình triển khai liên tục - 32
Hệ thống quản lý phiên bản tập trung 37
Hệ thống quản lý phiên bản phân tín 38
Thu mục Git, thư mục làm việc và khu vực tổ chức 43
Mô hình ảo hóa Ốc Ặ 46 Mô hình containerhóa 47
Kiến trúc Kubernetes Ặ cà 50 Các thành phần của Rancher 52
Cơ chế hoạt động của ELK Stack 60
Mô hình tổng thể 62
Trang 18DANH SÁCH HÌNH VẼ
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
3.17
3.18
3.19
3.20
3.21
3.22
3.24
3.25
3.26
3.27
Luéng xử lý của hệ thống 63
Giao diện đăng nhập hệ thống 65
Giao diện Mô hình trang quản trị 65
Giao diện trong menu Development 66
Giao diện trong menu Securty 66
Giao diện trong menu Operations 67
Giao diện quản lý tài khoản truy cập Dashboard Administration 67
Giao diện xem thông tin cá nhân người dùng 68
Tạo mới lem Ặ ee ee 71 Đặt tên và tích vào Multibranch Pipleline 72
Điền tên hiển thị và mô tả cho dựán 72
Chọn tên ứng dụng lưu trữ mã nguồn .- 73
Nhập tên đường dẫn tới mã nguồn và chọn tài khoản chứng thực mã nguồn fay N/ GIẢ 7 —З — Ẵ- 73 Kết quả của Jenkins sau khi quét tat cả các nhánh mã nguồn 74
Tiền hành quá trình Cl trên nhánh dev 74
Các giai đoạn được hiển thị từ Jenkinsfile 76
Giai đoạn build được biểu diễn trong Jenkinsfile T1 Triển khai dự án mới - 78
Nhập thông tin tạo project mới 79
Nhấn ’Add Record’ để thêm mới record 80
Điền tên, namespace và các thông tin khác của Record 2 81
Điền thông tin port của Record 81
Dự án k-market đã được triển khai thành công 82
Kết quả của SonarQube sau khi quét toàn bộ manguén 83
Doan mã thực thi OWASP Dependency Check trong Jenkinsfile 84
Kết quả Owasp depedency check quét toàn bộ mã nguồn dy dn 84
Trang 19DANH SÁCH HÌNH VẼ
3.28
3.29
3.30
41
42
43
44
45
46
47
48
4.9
4.10
411
4.12
4.13
4.14
4.15
4.16
4.17
4.18
4.19
4.20
421
4.22
4.23
4.24
Kết quả sau khi Arachni quét toàn bộ dự án da deploy dựa vào URL 85
Kết quả sau khi quét toàn bộ images §6
Kết quả hiển thị log khi hệ thống ELK nhận được 87
Tao mới repository cho du án Gitlab 90
Jenkins tiến hành build dự án trên nhánh Dev 91
Kết qua log Kibana thông báo Jenkins da build thành céng 92
Kết quả sau khi SonarQube quét mã nguồn 92
Kết quả sau khi Owasp Dependency Check quét mã nguồn 93
Kết quả sau khi Arachni quét toàn bộ dự án đã được triển khai 93
Kết quả sau khi Kubei tiền hành quét Containers 94
Kết quả sau khi triển khai dự án thành công - 94
Kết quả sau khi quét mã nguồn bằng SonarQube 96
Lỗ hổng alert từ nhà phát triển 96
Lỗ hổng debugger từ nhà phát triển 97
Kết quả sau khi quét mã nguồn bằng SonarQube 98
Lỗi cơ bản sử dụng phép so sánh khi lập trình 99
Lỗi cơ bản Error ee 100 Lỗi cơ bản Duplicate co 101 Lỗi cơ bản unreachable code 102
Tao mới repository cho dự án Giab 103
Jenkins tiến hành build dự án trên nhánh Dev 104
Kết quả log Kibana thông báo Jenkins đã build thành công 104
Kết quả sau khi SonarQube quét mã nguồn 105
Kết quả sau khi Owasp Dependency Check quét manguén 106
Kết quả sau khi Arachni quét toàn bộ dự án đã được triển khai 106
Kết quả sau khi Kubei tiền hành quét Containers 107
Kết qua sau khi triển khai dự án thành công - 107
Trang 20Application Programming Interface
Culture, Automation, Measurement Sharing
Continuous Deployment
Continuous Delivery
Continuous Integration
Công nghệ thông tin
Continuous Software Engineering
Domain Name System
Software Development Life Cycle
Version Control Systems
Virtual Machine
Tri tuệ nhân tạo
Giai diện lập trình ứng dụng
Văn hóa, tự động, đánh giá, chia sẻ
Triển khai liên tụcPhân phối liên tục
Hệ thống quản lý phiên bản
Máy ao
Trang 21TÓM TẮT
DevOps là một văn hóa kết hợp giữa phát triển va vận hành, được áp dụngngày càng phổ biến trong quá trình phát triển phần mềm Mục đích chính
của DevOps nhằm giúp tổ chức có thể phát triển, triển khai và đưa sản
phẩm tới khách hàng - người tiêu dùng một cách nhanh nhất có thể Tuynhiên, trong văn hóa DevOps vẫn chưa chú trọng đến van dé bảo mật và antoàn thông tin, bên cạnh đó, các phương pháp bảo mật truyền thống không
thể theo kịp DevOps Vì vậy, DevSecOps là một hướng để nhóm tác giả có
thể nghiên cứu, thử nghiệm và đánh giá nó Trong bài khóa luận này, nhómtác giả sẽ cung cấp cái nhìn tổng quan về DevOps và DevSecOps, cùng vớicác cơ sở lý thuyết liên quan Từ đó, nhóm tác giả sẽ xây dựng một mô hìnhphát triển phần mềm tự động và an toàn theo mô hình DevSecOps với các
công cụ tích hợp Sau đó, mô hình sẽ được thử nghiệm với các dự án thực
tế để đánh giá ưu nhược điểm của hệ thống và khả năng ứng dụng hệ thông
vào quá trình phát triển phần mềm của các doanh nghiệp vừa và nhỏ.
Trang 221.1 Đặt van đề
Phát triển phần mềm là một lĩnh vực trong ngành công nghiệp máy tính đang càngngày phổ biến rộng rãi ở hầu hết các công ty liên quan đến công nghệ thông tin Từnhững năm 1990 cho đến nay, các phương pháp phát triển phần mềm đang càng ngàyđược cải tiền với mục đích rút ngắn thời gian phát triển — đưa sản phẩm tới tay người sửdụng nhanh nhất mà vẫn đảm bảo chất lượng sản phẩm [1] Phương pháp Agile ra đời
là bước ngoặc đánh dấu nhằm đưa sản phẩm tới người tiêu dùng một cách nhanh nhất.Phương pháp Agile tập trung vào việc cảm nhận và đáp ứng các yêu cầu của ngườidùng để đưa ra những thay đổi phù hợp [2]
DevOps là một phương pháp tiếp cận mới hơn nhằm mục đích kết hợp phát triển
phần mềm (software development) và vận hành phần mềm (software operation) [3]
DevOps hiện nay dang được ứng dụng rộng rãi, bởi nó đã giúp cho quá trình phát triển
phan mềm nhanh hơn và tốt hơn Tuy nhiên, vấn dé bảo mật trong DevOps là một tháchthức vì các phương pháp bảo mật truyền thống đã không thể theo kịp với tốc độ phát
Trang 23triển nhanh chóng của DevOps [4] Chính vì thế, việc ứng dụng các công nghệ, kỹthuật, công cụ bảo mật trong DevOps đang được các công ty, tổ chức đặc biệt quan
tâm.
DevSecOps tập trung vào việc tích hợp bảo mật sớm hơn trong quá trình phát triển
phần mềm và bằng cách đó, nó có thể giảm thiểu rủi ro từ các lỗ hổng bảo mật Tóm
lại, DevSecOps là một mô hình phát triển phần mềm tương đối toàn diện, có khả nănggiảm thời gian phát triển và phát hành phần mềm, đồng thời đảm bảo chất lượng vàtính bảo mật cao cho hệ thống và ứng dụng [5]
1.2 Mục tiêu nghiên cứu
Thông qua khóa luận này, nhóm tác giả muốn thực hiện được các mục tiêu sau:
* Nghiên cứu về mô hình DevOps, mô hình DevSecOps, các công cụ hỗ trợ tíchhợp liên tục và triển khai liên tục trong phát triển phần mềm và các công cụ hỗ
trợ kiểm thử được sử dụng để kiểm tra tính bảo mật của ứng dụng trong quá trình
phát triển phần mềm
* Thiết kế và triển khai hệ thống phát triển phần mềm theo mô hình DevSecOps
Hệ thống này sẽ tích hợp liên tục (Continuous Integration - Cl) và triển khai liêntục (Continuous Delivery - CD) phần mềm, đồng thời kết hợp với việc kiểm tratính bảo mật trong quá trình phát triển
5 Thực hiện kiểm tra và đánh giá được các ưu điểm và hạn chế của hệ thống cũng
như khả năng ứng dụng hệ thống vào quá trình phát triển phần mềm của các
doanh nghiệp vừa và nhỏ.
w
Trang 241.3 Đôi tượng nghiên cứu
Trong khóa luận này, nhóm tác giả sẽ nghiên cứu:
* Mô hình DevSecOps.
* Các công cụ hỗ trợ cho quá trình tích hợp liên tục và triển khai liên tục (CI/CD)
* Các công cụ hỗ trợ kiểm thử được sử dụng để kiểm tra tinh bảo mật của ứng
dụng trong quá trình phát triển phần mềm
1.4 Phạm vi nghiên cứu
Xây dựng mô hình tập trung các giải pháp mã nguồn mở có thể triển khai trên nền
tảng container hóa (Docker, Kubernetes), có thể được ứng dụng cho các doanh nghiệp
vừa và nhỏ trong quá trình phát triển phần mềm
1.5 Những đóng góp của khóa luận
1.5.1 Tính mới của đề tài
Trong vài năm gần đây, một phương pháp mới kết hợp phát triển phần mềm và vậnhành phần mềm để cho phép phát hành sản phẩm nhanh hơn ra đời Phương pháp nàyđược gọi là DevOps Phương pháp DevOps đang được áp dụng rộng rãi trong cộng đồngphát triển phần mềm [4] Tuy nhiên, từ quan điểm bao mật, phương pháp DevOps thiếu
sự tích hợp bảo mật trong bat kì giai đoạn nào của nó [6] Để đảm bảo các biện phápbảo mật thích hợp được áp dụng trong suốt quá trình phát triển phần mềm, DevSecOps
Trang 25đã được tạo ra Phương pháp này áp dụng bảo mật vào quy trình phát triển sản phẩm,
loại bỏ các lỗi có thể xảy ra và đảm bảo các hệ thống và mạng hoạt động ổn định, phùhợp với xu hướng phát triển phần mềm trong tương lai gần [5]
1.5.2 Khả năng ứng dụng thực tế của đề tai
Các lỗ hổng phần mềm thường là nguyên nhân của các sự cố về bảo mật thông tin,
do vậy việc đảm bảo bảo mật thông tin là một trong những van dé cốt lõi của doanhnghiệp Trong thực tế, chi phí xử lý sự cố khi xảy ra các van đề về bảo mật thông tin làrất lớn Ngoài việc tốn thời gian và nguồn luc để xử lý thì van dé quan trọng hơn là có
thể làm mit đi sự tin tưởng của khách hàng.
Trong các doanh nghiệp chỉ sử dụng DevOps thì việc kiểm tra bảo mật và kiểm thửứng dụng thường được đặt ở vị trí cuối cùng cho đến khi kết thúc quá trình phát triểnsản phẩm Điều này dẫn đến tình trạng phải sữa lỗi ở thời điểm cuối cùng và có thể làm
chậm trễ đáng kể trong quá trình chuyển giao sản phẩm
Tuy nhiên với DevSecOps, quá trình bảo mật được tích hợp và tiến hành song hànhvới quá trình phát triển (developement) và quá trình vận hành (operation) [6] Điều nàyđảm bảo các lỗ hổng bảo mật được phát hiện sớm nhất có thể và mã nguồn phát triểnđược bảo mật [5] Do vậy, sản phẩm vừa đảm bảo tính bảo mật thông tin, vừa đảm bảothời gian chuyển giao sản phẩm cho khách hàng
Từ đó, nhóm tác giả quyết định nghiên cứu và xây dựng hệ thống phát triển phầnmềm tự động và an toàn theo mô hình DevSecOps Hệ thống này có thể được mở rộng
và sử dụng cho các doanh nghiệp phát triển phần mềm vừa và nhỏ trong thực tế
Trang 261.6 Cấu trúc của khóa luận
Ngoài phần mục lục, danh mục các từ viết tắt, danh mục hình ảnh và tài liệu thamkhảo, khóa luận được bố cục thành 5 chương như sau:
Chương 1 - Mở đầu
Đặt vấn dé và trình bày sơ lược về mục dich, đối tượng, phạm vi nghiên cứu vanhững đóng góp của đề tài
Chương 2 - Cé sở lý thuyết
Trình bày và giải thích các cơ sở lý thuyết, định nghĩa và giải thích nguyên tắc hoạt
động của DevOps, DevSecOps và các công nghệ được nhóm tác giả sử dụng trong đềtài như: Tích hợp và triển khai liên lục, công nghệ container hóa, hệ thống quản lýphiên bản mã nguồn và bảo mật quy trình phát triển phần mềm, cùng với các công
cụ như: Jenkins, Gitlab, Rancher, SonarQube, Kubei, ELK Stack, Bên cạnh đó, trình
bày về tình hình nghiên cứu của DevOps và DevSecOps ở trong và ngoài nước
Chương 3 - Phân tích và thiết kế hệ thống
Tién hành phân tích và thiết kế sơ đồ hệ thống, trình bày về luồng xử ly (workflow)của hệ thống Giải thích các thành phần và cách hoạt động của hệ thống mà nhóm
nghiên cứu: Thực hiện tích hợp và triển khai liên tục quy trình phát triển ứng dụng web
bằng việc kết hợp Jenkins và Gitlab, triển khai ứng dụng web trên nền tảng Kubernetes,kiểm tra tính bảo mật của mã nguồn, container Kubernetes và ứng dụng web đã được
triển khai với các công cụ được tích hợp vào hệ thống, quan lý quá trình hoạt động của
toàn bộ hệ thống
Chương 4 - Triển khai hệ thống và đánh giá kết quả
Trinh bày các thông tin phần cứng của hệ thống, các kịch bản thử nghiệm hệ thống
Trang 27thông qua việc mô phỏng các dự án thực tế Từ đó, đánh giá ưu điểm và hạn chế của hệthống đã triển khai.
Chương 5 - Kết luận và hướng phát triển
Tổng kết các nội dung đã nghiên cứu trong dé tài Từ đó đề xuất các hướng pháttriển của đề tài có thể tiếp tục thực hiện trong tương lai
Trang 28Chương 2
CƠ SỞ LÝ THUYET
2.1 Các mô hình phát triển phần mềm truyền thống
Sự phát triển nhanh chóng của thị trường phát triển phần mềm đã và đang đặt ranhững thách thức cho việc xây dựng một quy trình phát triển phần mềm nhanh chóng
và mang lại hiệu quả cao nhất Những mô hình phát triển phần mềm cũ không đáp ứngđược yêu cầu của thị trường đang dan bị thay thế bởi những mô hình mới phù hợp hơn
2.1.1 Waterfall
Mô hình phát triển phần mềm thác nước (Waterfall) được nhắc đến lần đầu tiên
vào năm 1970 trong một bài báo của Winston W Royce Trong bài báo này, đây là một
mô hình phát triển phần mềm khả thi, hạn chế những rủi ro trong quá trình phát triểnphần mềm và cung cấp được các sản phẩm theo yêu cầu Tuy nhiên, Winston W Royce
không sử dụng thuật ngữ waterfall để gọi tên mô hình lúc này [7]
Mô hình Waterfall là quá trình phát triển phần mềm tuần tự, các bước để phát triển
Trang 29phan mềm được tiền hành tuần tự từ trên xuống dưới, tương tự như dòng chảy của mộtthác nước Mô hình này mô tả các giai đoạn phải được thực hiện để phát triển thànhcông một phần mềm [8] Các giai đoạn của mô hình Waterfall được thể hiện trong hình
2.1.
Implementation
Hình 2.1: Các giai đoạn của mô hình Waterfall.
Trong mô hình Waterfall, giai đoạn phía sau chỉ có thể được tiến hành khi giai đoạntrước nó hoàn thành Tuy nhiên, trong một số mô hình Waterfall đã được sửa đổi thìnếu phát hiện sai sót xảy ra 6 giai đoạn sau mà nguyên nhân gây ra nó nằm ở giai đoạntrước đó thì có thể quay lại giai đoạn trước đó để sửa đối cho phù hợp Day là mô hình
tiêu chuẩn để phát triển phần mềm.
2.1.2 Agile
Vào khoảng những năm 1990, sự thiéu linh hoạt trong mô hình Waterfall đã dẫnđến sự thất bại của một số dự án phát triển phần mềm sử dụng mô hình này Với sựphát triển ngày càng nhanh chóng của thị trường phát triển phần mềm thì việc làm sao
Trang 30đưa sản phẩm đến tay người tiêu dùng càng nhanh càng tốt ngày càng được chú trọng.Nhưng mô hình Waterfall lại không đáp ứng được điều này cho nên đã dẫn đến sự rađời của mô hình phát triển phần mềm linh hoạt (Agile) [9].
Mô hình Agile thực chất là một tập hợp các nguyên lý, kỹ thuật dành cho phát triểnphần mềm tập trung vào khả năng đáp ứng được những thay đổi khi có yêu cau [1]
“Tuyên ngôn Agile [10] được xuất bản năm 2001 đã hệ thống hóa các nguyên tắc của môhình này Một trong số các nguyên tắc trong Tuyên ngôn Agile nói rang: "Our highest
priority is to satisfy the customer through early and continuous delivery of valuable
software." Nguyên tắc này có thé được hiểu là: "Uw tiên cao nhất của chúng tôi là lamhài lòng khách hàng thông qua việc phân phối sớm và liên tục các phần mém có giá
Đầu những năm 1990, mô hình phát triển phần mềm Scrum được sử dụng để quản
lý quá trình phát triển những sản phẩm phức tạp hay những dự án lớn Mô hình Scrumcho phép sử dụng nhiều quy trình và kỹ thuật khác nhau để con người có thể xác địnhcác van dé đang diễn ra và đưa ra giải pháp phù hợp, đảm bảo được năng suất và chấtlượng sản phẩm tốt nhất để đưa đến tay khách hàng
'Vào năm 2002, một quyển sách mang tên "Agile Software Development with Scrum"
[11] mô tả chỉ tiết về Scrum đã được xuất bản Mô hình phát triển phần mềm Scrum
được minh họa trong hình 2.2.
Trang 31Product Backlog Sprint Backlog vong lap Cac phần tăng trưởng
có thể chuyển giao.
Hình 2.2: Mô hình Scrum.
Mô hình Scrum chia toàn bộ dự án thành các quá trình nhỏ hơn kéo dài từ 2-4 tuần.Quá trình nhỏ này được lặp đi lặp lại và được gọi là Sprint Sprint là thành phần quan
trọng nhất của mô hình Serum Một Sprint mới sẽ được bắt đầu ngay khi Sprint trước
đó kết thúc [12] Day là sự khác biệt cơ bản giữa mô hình Scrum và mô hình Waterfall
2.1.4 Lean
Quy trình phát triển phần mềm tinh gon (Lean) là quy trình ứng dung các nguyên
tắc sản xuất tinh gọn của Hệ thóng sản xuất Toyota - Toyota Production System [13] vào lĩnh vực phát triển phần mềm Phát triển phần mềm Lean bao gồm bay nguyên tắc
chính được trình bay chỉ tiết trong quyến sách "Lean software development: an agiletoolkit” [L4] xuất bản năm 2003:
* Hạn chế lãng phí
* Nâng cao kiến thức
* Quyết định càng muộn càng tốt
11
Trang 32* Cung cấp càng nhanh càng tốt
Trao quyền quyết định cho nhóm phát triển
Xây dựng chất lượng sản phẩm
Có cái nhìn bao quát toàn bộ
Cốt lõi của quy trình phát triển phần mềm tinh gọn là hạn chế sự lãng phí - nhữngyêu tố làm ảnh hưởng đến lợi nhuận thu được từ khách hàng - một cách tối đa
Quy trình phát triển phần mềm Lean tập trung vào cách sử dụng CNTT để tạo ra
các giá trị cho khách hàng chứ không tập trung vào quy trình phát triển phần mềm [15] Lean là sự tổng hợp của một hệ thống các nguyên tắc và triết lý dùng để xây dựng hệ
điều phối, phát hành phần mềm trong công ty) không thể làm việc nhịp nhàng với
nhóm phát triển sản phẩm, tạo ra một "nit that cổ chai" trong quá trình phát triển sảnphẩm [16] Với cách làm việc truyền thống, nhóm phát triển làm việc riêng và nhómvận hành phần mềm làm việc riêng, họ sẽ có mục tiêu công việc khác nhau Nếu nhưmục tiêu của nhóm phát triển là xây dựng các tính năng (function) đúng với yêu cầu(requirement) và phát hành (release) cho khách hàng càng nhanh càng tốt thì mục tiêu
Trang 33của nhóm vận hành phần mềm là tạo ra một hệ thống ổn định Trong một hoàn cảnhnào đó, hai mục tiêu này sẽ đối lập nhau, và các nhóm thì chỉ quan tâm đến công việccủa mình, dẫn đến sản phẩm dễ xảy ra vấn dé làm kéo dài thời gian phát triển và làmkhách hàng không hài lòng Vì thé, DevOps được sinh ra với ý tưởng là kết hợp Dev vàOps để thực hiện một mục tiêu chung là “Speed and Stability” - tốc độ và 6n định.
Phong trào DevOps bắt đầu hình thành trong khoảng thời gian từ năm 2007 đến
năm 2008, khi các công ty và cộng đồng phát triển phần mềm nhận ra những vấn
đề có hậu quả nghiêm trong trong quá trình phát triền phần mềm Năm 2009, tại hội
nghị Velocity, hai kỹ sư của Flickr là John Allspaw và Paul Hammond đã có một bài
thuyết trình nổi tiếng với tiêu đề "/0 Deploys per Day: Dev and Ops Cooperation at
Flickr" [L7] Trong bài thuyết trình này, Allspaw và Hammond đã thể hiện được cácmâu thuẫn và tranh cãi giữa nhóm phát triển và nhóm vận hành Bài thuyết trình của họcho thấy cách hợp lý nhất để quy trình phát triển phần mềm đáp ứng được nhu cầu ngày
càng cao của thị trường là thực hiện các hoạt động phát triển và vận hành ứng dụng
một cách liền mạch, minh bạch và được tích hợp hoàn toàn với nhau Cũng trong năm
này, được truyền cảm hứng sau khi xem bài thuyết trình của Allspaw và Hammond,
Patrick Debois đã tổ chức hội nghị mang tên "DevOpsDay" tại Bỉ [18] Từ đó, thuật
ngữ DevOps đã chính thức được sử dụng.
Trang 34Hình 2.3: Sự hình thành DevOps.
Thuật ngữ DevOps được tao ra từ sự kết hợp của hai từ "Development (Dev)" và
"Operations (Ops)" DevOps mở rộng các nguyên tắc Agile và nhắn mạnh sự hợp tác và
trao đổi thông tin của các kỹ sư phát triển phần mềm (Dev - Developer - Development)
và bộ phận vận hành (Ops - Operator - Operations) bao gồm kỹ sư hệ thống, kỹ sư baomật, kỹ sư mạng, kỹ sư hạ tang, khi làm việc cùng nhau để tự động hóa quá trình
chuyển giao sản phẩm phần mềm, nhằm mục đích rút ngắn vòng đời phát triển phần mềm (SDLC) Với các dự án có kiến trúc phức tạp và quy mô lớn, việc thay đổi hay bổ sung các tính năng mới mang đến nhiều tác động đến chất lượng phần mềm và được
thực hiện lặp đi lặp lại để cải thiện chất lượng phần mềm Từ các yêu cầu thực tiễn,DevOps áp dụng các công cụ tự động để quản lý hạ tầng phần mềm giúp tăng tốc độxây dựng, triển khai và nhận phản hồi liên tục
Nói một cách dễ hiểu hơn thì DevOps là một sự kết hợp của các nguyên lý, kỹ
thuật, quy trình và các công cụ giúp tự động hóa quá trình lập trình và chuyển giao
phần mềm Với DevOps, các công ty có thể phát hành (release) các tính năng nhỏ rất nhanh, thu thập các phản hồi một cách nhanh chóng và đưa ra những thay đổi phù hợp
Trang 35để nâng cao chất lượng sản phẩm DevOps nhắn mạnh vào con người và văn hóa, đồngthời tìm cách cải thiện sự hợp tác giữa các nhóm vận hành và nhóm phát triển.
DevOps được tạo ra để kết hợp tất cả những người có liên quan đến việc phát triển
và phát hành phần mém - người dùng (user), lập trình viên (developer), chuyên viênkiểm thử (tester), kỹ sư bảo mật hệ thống (security), kỹ sư quản trị hệ thống (systemadministrators) - vào một quy trình làm việc duy nhất, tự động hóa cao với trọng tâmchung là: phát hành phan mêm có chất lượng tốt nhất trong thời gian nhanh nhất mà
vẫn đáp ứng được các yêu cầu của người dùng, đồng thời vẫn duy trì được tính toàn
của công ty.
5 Độ tin cậy
Đảm bảo chất lượng cho các bản cập nhật ứng dụng và các thay đổi trong cơ
sở hạ tầng của hệ thống để nhóm phát triển vừa có thể triển khai ứng dụng mộtcách nhịp nhàng và nhanh chóng, đồng thời duy trì được trải nghiệm tích cực chongười dùng Tích hợp và phân phối liên tục giúp nhóm phát triển kiểm tra từngthay đổi va đảm bảo chúng đều hoạt động chính xác và an toàn
* Quy mô
Sự tự động hóa và tính nhất quán giúp quản lý những hệ thống phức tạp hoặc
giảm thiểu những rủi ro khi có sự thay đổi một cách hiệu quả, giúp vận hành và
Trang 36quản lý cơ sở hạ tầng cũng như các quy trình phát triển ở quy mô phù hợp.
» Cải thiện khả năng cộng tác
Các nhóm phát triển phần mềm được xây dựng theo mô hình DevOps hoạt động
hiệu quả hơn Các nhóm phát triển va các nhóm nghiệp vụ cộng tác chặt chế với
nhau, phối hợp các quy trình công việc với nhau và cùng nhau gánh vác nhiềutrách nhiệm Điều này giúp giảm thiểu tình trạng làm việc kém hiệu quả và tiết
kiệm thời gian.
* Bảo mật
Khi không sử dụng DevOps, việc cân bằng giữa tốc độ phát triển sản phẩm và
bảo mật ứng dụng, dẫn đến mất nhiều thời gian hơn để phân phối sản phẩm Khi
sử dụng DevOps, các chính sách, công cụ kiểm soát tự động hóa và các kỹ thuật
quản lý được sử dụng để duy trì tốc độ phát triển sản phẩm mà không ảnh hưởngđến bảo mật sản phẩm
* Quản lý rủi ro
Sử dụng DevOps, các yếu tố rủi ro trong các giai đoạn phát triển ứng dụng sẽđược xác định sớm nhất có thể Việc phát hiện sớm vấn đề giúp việc sửa chữahoặc khắc phục có thể được tiến hành một cách nhanh chóng Từ đó, chất lượng
và thời gian phát hành sản phẩm sẽ được cải thiện, giúp nâng cao uy tín của cong
ty.
2.2.3 Quy trình DevOps
Lập kế hoạch liên tục - Continuous Planning
Để hỗ trợ các nhóm phát triển và vận hành thích nghi với những thay đổi nhanhchóng của thị trường phát triển phần mềm, các công ty cần phải có kế hoạch kinh
Trang 37doanh phù hợp, tăng nhanh tốc độ hoàn thành dự án DevOps giúp cho phép các công
ty thực hiện điều này bằng cách ưu tiên hoàn thành các sản phẩm tồn đọng và tạo một
kênh giao tiếp chung với khách hang để có thể nhận phản hồi từ khách hàng một cáchnhanh nhất Điều quan trọng là việc lập kế hoạch phải được thực hiện thường xuyên đểđối phó với những thay đổi nhanh chóng của thị trường, đồng thời cần có sự kết hợpchặt chẽ giữa việc lập kế hoạch và việc thực hiện kế hoạch Lập kế hoạch liên tục làmột quá trình diễn ra theo chu kỳ và đạt được bằng cách: Lập kế hoạch theo từng đợtnhỏ, thực hiện kế hoạch, thu thập ý kiến phản hồi, trả lời các ý kiến phản hồi và điềuchỉnh kế hoạch nếu cần thiết [19]
Tich hợp liên tục - Continuous Integration
Tích hợp liên tục đòi hỏi sự kết nối giữa nhóm phát triển và nhóm vận hành Và đểđạt được điều này, việc tích hợp phải được thực hiện sớm nhất có thể, các thay đổi nên
được chia sẻ liên tục giữa các nhóm Tích hợp liên tục có thể được thực hiện một cách
tự động thông qua các công cụ tích hợp liên tục Sau khi lập trình viên thực hiện một
thay đổi và đưa nó lên kho lưu trữ, thay đổi này sẽ được phát hiện bởi hệ thống chứacông cụ tích hợp liên tục và việc kiểm tra độ an toàn được thực hiện, nếu có lỗi xảy ra
thì chúng sẽ được thông báo cho lập trình viên để tiền hành khắc phục càng sớm càng.
tốt Đây là một quá trình lặp đi lặp lại và diễn ra liên tục trong suốt quá trình phát triểnphần mềm [19]
Phân phối liên tục - Continuous Delivery
Trong quá trình phân phối liên tục, ngay sau khi các tính năng mới của sản phẩm
được hoàn thành, việc triển khai sản phẩm một cách tự động trên môi trường thửnghiệm sẽ được thực hiện, và sau đó sản phẩm sẽ được phát hành một cách thủ công
đến tay người dùng Phân phối liên tục là khả năng phát hành phần mềm bắt cứ khi
nào mà khách hàng muốn [19], thời gian phát hành sản phẩm phụ thuộc vào yêu cầu
của khách hàng chứ không phụ thuộc vào thời gian hoàn thành sản phẩm (sản phẩm đã
17
Trang 38được hoàn thành nhưng chưa đến ngày phát hành mà khách hàng đặt ra thì vẫn chưathể phát hành sản phẩm).
Triển khai liên tục - Continuous Deployment
Trong quá trình triển khai liên tục, ngay khi các tính năng mới của sản phẩm đượchoàn thành, việc triển khai sản phẩm một cách tự động trên môi trường thử nghiệm sẽđược thực hiện, và sau đó sản phẩm cũng sẽ được phát hành một cách tự động đến tayngười dùng Các nguyên tắc của DevOps khuyến nghị tự động hóa việc triển khai sảnphẩm Việc triển khai liên tục giúp giảm số lượng các quy trình thủ công và tăng tốc
độ giao sản phẩm cho khách hàng
Kiểm thử liên tục - Continuous Testing
Kiểm thử liên tục rút ngắn thời gian kiểm thử sản phẩm và loại bỏ các lỗi có thể xảy ra ngay từ ban đầu bằng cách cho phép việc kiểm thử được tích hợp sớm nhất có
thể trong quá trình phát triển sản phẩm Tự động hóa tat cả các trường hợp thử nghiệm(test case) là cần thiết cho việc kiểm thử liên tục [19] Trong quá trình phát triển phầnmềm, ngay khi một tính năng mới được hoàn thành, quá trình kiểm thử sẽ tự động diễn
ra để phát hiện và khắc phục lỗi ngay từ ban đầu Quá trình này sẽ diễn ra liên tục vàlặp đi lặp lại trong suốt quá trình phát triển sản phẩm để hạn chế lỗi và rút ngắn thời
gian phát triển
Giám sát liên tục - Continuous Monitoring
Giám sát liên tục là quá trình tự động theo dõi các thay đổi và đưa ra các điều chỉnhphù hợp một cách liên tục Giám sát liên tục giúp nhóm phát triển và nhóm vận hành
có thể phản ứng kịp thời khi có sự cố xảy ra và đưa ra phương án giải quyết nhằm hạn
chế thấp nhất các thiệt hại cho công ty và khách hàng Nó giúp phát triển và cung cấpphần mềm nhanh hơn và đáng tin cậy hơn
Phản hồi và tối ưu hóa liên tục - Continuous feedback and optimization
Trang 39Phan hôi và tối ưu hóa liên tục cung cấp các ý kiến phản hồi một cách liên tục cho
nhóm phát triển để tiến hành phân tích nhu cầu khách hàng, phát hiện những tính năng
chưa tối ưu hoặc thêm tính năng cho sản phẩm Từ đó, nhóm phát triển sẽ điều chỉnh
kế hoạch phát triển sao cho phù hợp (tối ưu hóa các tính năng đã có, thêm các tínhnăng mới) để cải thiện và tối ưu hóa dịch vụ, gia tăng trải nghiệm người dùng Ngoài
ra, trong quá trình kiểm thử sản phẩm, các lỗi được phát hiện sẽ được phản hôi liên tụccho nhóm phát triển để đưa ra những giải pháp khắc phục một cách kịp thời, đảm baosản phẩm có chất lượng tốt nhất và tiền độ hoàn thành sản phẩm nhanh nhất
2.2.4 Tình hình nghiên cứu
Cuộc cách mạng công nghiệp 4.0 đã mang lại nhiều thay đổi cho lĩnh vực côngnghệ thông tin trên toàn thé giới Những yêu cầu mới của thị trường phát triển phầnmềm làm cho các doanh nghiệp phát triển phần mềm đang phải chạy đua để rút ngắn
thời gian phát triển và đẩy nhanh tốc độ phát hành sản phẩm Từ đó, DevOps ra đời với
mục đích đáp ứng những điều này Sau khi xuất hiện, DevOps đã nhận được nhiều sựquan tâm của cộng đồng công nghệ thông tin
Tir năm 2013 đến nay, số lượng các chuyên gia và nhà phát triển tham gia vào cuộckhảo sát của Puppet Labs về việc áp dụng DevOps vào các tổ chức công nghệ thông tinngày càng gia tăng, từ 4000 người trong năm 2013 đến 35000 người trong năm 2020[20, 21] Trong số những người tham gia khảo sát, có 63% nói rằng công ty của họ đãthực hiện phương pháp DevOps Một nghiên cứu khác gần đây của nhà cung cấp dịch
vụ công nghệ toàn cầu Claranet [22], có 88% doanh nghiệp ở Anh đã áp dụng DevOpshoặc có kế hoạch áp dụng trong một vài năm tới
Bên cạnh đó, số bài báo nghiên cứu về DevOps cũng ngày càng gia tăng Theo mộtkhảo sát của Leonardo, Carla, Fabio, Dejan và Paulo về các khái niệm và thách thứccủa DevOps, họ đã chọn ra 50 trong tổng số 167 bài báo đã được phát hành để phân
19
Trang 40tích và đưa ra những tài liệu tổng quan về DevOps [23] Ngoài ra, họ cũng đã đưa ra
những số liệu về số cuốn sách nói tới DevOps được xuất bản qua các năm, trong đó
nhiều nhất là năm 2018 (117 cuốn sách) Từ đó có thể thấy, DevOps là một mối quantâm đặc biệt của cộng đồng công nghệ thông tin
Ở Việt Nam, DevOps cũng đang là một xu hướng rất được cộng đồng phát triển
phần mềm đặc biệt quan tâm Trong hai bài báo cáo Vietnam Developer Report xuấtbản tháng 08/2019 và Báo cáo thị trường IT Việt Nam xuất bản tháng 01/2020 của
TopDev [24, 25], DevOps đứng ở vị trí thứ ba trong danh sách các công nghệ thu hút
sự chú ý của lập trình viên, chỉ sau Machine Learning/AI và Big Data/Data Science.
Đây là một xu hướng mà các lập trình viên Back-end và System admin đang muốnhướng tới với mức lương có thể lên đến 450 triệu đồng/năm DevOps giúp hai giai
đoạn phát triển và vận hành xích lại gần nhau hơn nhắm rút ngắn thời gian phát triển sản phẩm Do đó, trong những năm sắp tới, DevOps sẽ là một vị trí quan trọng mà
nhiều công ty đang tìm kiếm, đặc biệt là những công ty có hệ thống lớn
Tuy nhiên, khi tích hợp các lập trình viên (developer), kỹ sư vận hành hệ thống(operator) và quản trị viên hệ thống (administrator) thì số người có liên quan đến mỗi