Professional Documents
Culture Documents
Cong Nghe Phan Mem - Chuong11
Cong Nghe Phan Mem - Chuong11
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 1
11.1 Thách thức của phát triển phần mềm hiện đại
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 2
1
11.1 Thách thức của phát triển phần mềm hiện đại
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 3
11.1 Thách thức của phát triển phần mềm hiện đại
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 4
2
11.1 Thách thức của phát triển phần mềm hiện đại
Geant4
1 framework cho giả lập việc các mảnh nhỏ đi qua vật chất :
• được dùng trong HEP, y học và vật lý không gian,
• gần 2 triệu LOD
• được viết chủ yếu bằng C++.
LOC
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 5
11.1 Thách thức của phát triển phần mềm hiện đại
Geant4
1 framework cho giả lập việc các mảnh nhỏ đi qua vật chất :
• 537 năm ngày công (person-years), khoảng 29 triệu euro.
• 58.683 commit từ 160 người phát triển.
# of
contributors
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 6
3
11.1 Thách thức của phát triển phần mềm hiện đại
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 7
“Tôi không thể dịch chương trình nếu bạn đang nhập 1 tên biến...”
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 8
4
11.2 Tích hợp code
Tích hợp vào bản chính : mỗi người viết code tích hợp công việc
của họ bằng cách lấy bản chính về, trộn nội dung của mình vào rồi
nếu tốt thì đẩy ngược về bản chính.
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 9
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 10
5
Tần xuất tích hợp code
Các nhóm phát triển nhỏ tích hợp thường xuyên hơn low
performers
tích hợp với tần số thấp
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 11
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 12
6
11.3 Tích hợp code liên tục
“. . . 1 thực tiễn phát triển phần mềm mà ở đó các thành viên của
nhóm tích hợp công việc của họ thường xuyên, thường mỗi người
tích hợp ít nhất 1 lần mỗi ngày, dẫn đến việc có nhiều bản tích hợp
mỗi ngày. Mỗi bản tích hợp được kiểm tra bởi 1 build tự động hóa
(bao gồm các test case) để phát hiện các lỗi tích hợp nhanh như có
thể có.”
- Martin Fowler
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 13
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 14
7
Tích hợp code liên tục là gì ?
Tích hợp liên tục bằng cách nào ?
dùng các tool sẵn có để :
• tổ hợp các thay đổi thường xuyên
• Tạo build thường xuyên
• Kiểm thử thường xuyên
• Triển khai thường xuyên
để CI làm việc được, các cá thể viết code phải :
• commit thường xuyên : nhiều commit nhỏ
• chạy build cục bộ trước (nếu có thể) : các phần viết thêm lớn có
thể gây khó, chỉ commit phần code đã chạy tốt.
sửa các build bị hư ngay lập tức.
viết các test tự động.
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 15
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 16
8
Tích hợp code liên tục là gì ?
Tại sao phải tích hợp liên tục?
để môi trường sạch.
các tác vụ thủ công được tự động hóa.
tăng tốc phần mềm chạy được đạt chỉ tiêu.
không cần các bước tích hợp lớn.
Ít khi gây ngắt điều nào đó.
1 version hoàn chỉnh/phân phối được ở bất cứ lúc nào theo thời
gian.
Tài liệu đầy đủ về việc ai đã làm gì ?
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 17
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 18
9
Các tools tích hợp code liên tục
Code repositories
• BitKeeper, Bzr, CVS, Darcs, Gerrit, Git, Mercurial, Monotone, P4,
SVN ...
Test frameworks
• CppUnit, Valgrind, JUnit, Unittest, TestNg ...
Continuous Integration
• Bamboo, Buildbot, CruiseControl, Jenkins, Gitlab CI …
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 19
Setting up a CI pipeline
A simple example of a Flask web appliation
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 20
10
Setting up a CI pipeline
Our YAML
file defines
four different
processes to
run: lint, test,
build and
deploy.
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 21
Setting up a CI pipeline
The lint stage
checks for
possible errors
and
formatting
issues without
running the
code. The
linting
program used
in this case is
a popular tool
called Pylint.
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 22
11
Setting up a CI pipeline
The next step
in our CI/CD
pipeline
tutorial is
testing. Our
tests in this
project are
run with the
unit test
framework
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 23
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 24
12
Kiểm thử hồi qui
chạy lại các test chức năng và phi chức năng để đảm bảo rằng
TPPM đã được viết và kiểm thử trước đây vẫn hoạt động tốt sau khi
có thay đổi trong TPPM tương ứng.
có 3 kiểu kiểm thử hồi qui :
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 25
Setting up a CI pipeline
The next step in our
CI/CD pipeline
tutorial is testing.
Our tests in this
project are run with
the unit test
framework
Running tests on
every commit is
crucial to a project's
success
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 26
13
Bước tạo build
Lines 66-68 reference the Docker orb and define how the Docker job will
run. Set the deploy attribute to false to instruct the Docker/publish job to
build the image without pushing it to a repository. By default, the
Docker/publish job finds the Dockerfile by name and builds it. It will also
fail the job if the Docker build fails.
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 27
Docker
1 platform mở để phát triển,
phát hành và chạy ứng dụng.
tách ứng dụng của bạn khỏi cơ
sở hạ tầng của bạn.
giảm đáng kể thời gian trì
hoản giữa viết code và chạy nó
trong việc sản xuất phần mềm.
là container.
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 28
14
Bước triển khai
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 29
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 30
15
11.4 Phân phối liên tục
nhóm tạo phần mềm trong các chu kỳ ngắn, đảm bảo rằng phần mềm có
thể được phát hành tin cậy ở bất kỳ lúc nào và, khi phát hành phần mềm
thì không làm quá thiên về thủ công.
phân phối liên tục là sự mở rộng của tích hợp liên tục vì nó tự động triển
khai tất cả thay đổi code để kiểm thử và/hoặc môi trường sản xuất sau
bước tạo build.
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 31
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 32
16
Các cạm bẫy chung của CI/CD
tần số lập lại của qui trình
các phụ thuộc tồn tại trong qui trình và độ trì hoản được tạo ra bởi
chúng.
độ dài của qui trình
độ khẩn cấp trong tự động hóa qui trình.
nếu qui trình có lỗi nếu nó không được tự động hóa.
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 33
11.5 DEVOPS
tập các thực tiễn mà tổ hợp việc phát triển phần mềm (Dev) với các hoạt
động IT (Ops)
Breaking the Silos: Dev and Ops
nhắm tới việc rút ngắn chu kỳ phát triển hệ thống và cung cấp sự phân
phối liên tục với chất lượng phần mềm cao.
bổ trợ cho phương pháp phát triển Agile.
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 34
17
DEV và OPS làm việc cùng nhau
tạo các vòng hồi tiếp giữa nhà sáng chế và cơ học.
phô bày thước đo thời gian thực từ ops, cho phép dev nghiên cứu hệ
thống hoạt động dưới những điều kiện thực tế.
phô bày thước đo thời gian thực từ dev, cho phép ops tiên đoán những
nhu cầu sản xuất và cung cấp thông tin nhập sớm nhất.
các nhóm đa chức năng cộng tác nhau để phát hành toàn bộ hệ thống
hoạt động được bao gồm tất cả cơ sở hạ tầng, mã nguồn và việc cấu hình
hệ thống.
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 35
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 36
18
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 37
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 38
19
Các thực tiễn DEVOPS
Infrastructure as Code (IaC) Availability Monitoring
Continuous Integration Change/Configuration Management
Automated Testing Feature Flags
Continuous Deployment Automated Environment De-
Release Management Provisioning
App Performance Monitoring Self Service Environments
Load Testing & Auto-Scale Automated Recovery (Rollback &
Roll-Forward)
Hypothesis Driven Development
• Testing in Production
• Fault Injection
• Usage Monitoring/User Telemetry
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 39
65 5,910 90 48
Visual Studio Visual Studio Visual Studio VS Team
Code Extensions Gallery Extensions Sim-Ship Services
Partners Extensions
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 40
20
Góc nhìn tốt hơn
hướng dẫn từng bước cho DevOps, SRE hay bất kỳ vai trò vận hành
nào khác trong năm 2022
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 41
Khoa Khoa học & Kỹ thuật Máy tính Môn : Công nghệ phần mềm
Trường ĐH Bách Khoa Tp.HCM Chương 11 : Tích hợp & phân phối liên tục
© 2010 Slide 42
21