You are on page 1of 21

Chương 11

Tích hợp & phân phối liên tục


11.1 Các thách thức của việc phát triển phần mềm hiện đại
11.2 Tích hợp code
11.3 Tích hợp code liên tục
11.4 Phân phối phần mềm liên tục
11.5 DevOps
11.6 Kết chươ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 1

11.1 Thách thức của phát triển phần mềm hiện đại

Độ phức tạp & kích thước


 Khi dự án lớn dần, độ phức tạp cũng sẽ tăng dần lên :
• kích thước code.
• độ phụ thuộc giữa chúng.
• số người tham gia phát triển.
• số lượng gói version.

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

Độ phức tạp & kích thước


 Một vài thí dụ về bộ mã nguồn hoàn chỉnh đáng lưu ý :
• Google : kiến trúc 1 khối, 1 tỉ file, 9 triệu file mã nguồn, 2 tỉ
COD, 35 triệu commit, 86 TB (T1 2015).
• Facebook: kiến trúc 1 khối, 8GB (54GB bao gồm lịch sử phát
triển), hàng trăm ngàn file (2014).
• Lõi Linux : phân tán, trên 15 triệu COD (v3.10 năm 2013).

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

Số lượng người tham gia :

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

 Ta xử lý kích thước codebase ngày càng tăng như thế nào ?


 Ta xử lý việc gia tăng số người phát triển phần mềm như thế bào ?
 Những người phát triển tương tác nhau như thế nào ?
 Ta xây dựng phần mềm trên nhiều platform như thế nào ?
 Ta xây dựng nhiều version như thế nào ?
 Ta có thể vững tin là ta không ngắt điều gì cả bằng cách nào ?

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

11.2 Tích hợp code


 Mỗi dự án phát triển phần mềm thường gồm nhiều nhóm phát
triển, mỗi nhóm thường có nhiều người viết code trên cùng
codebase ở cùng 1 thời điểm (1 cách độc lập nhau).
• td. A làm việc trên tính chất 1 trong khi B làm việc trên tính chất
2.
• td. A làm việc trên class 123.java trong khi B làm việc trên class
456.jave.
 Khi họ hoàn thành việc của mình, họ cần tích hợp các công việc của
họ vào codebase chính.

“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

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 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

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ố cao

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

Tích hợp code liên tục là gì ?


 Tích hợp liên tục (CI) là 1 thực tiễn phát triển phần mềm mà ở đó
những người phát triển trong 1 nhóm sẽ tích hợp công việc của họ
thường xuyên.
 những người phát triển thường tích hợp nhiều lần mỗi ngày.
 Mỗi bản tích hợp được kiểm tra bởi 1 build tự động hóa : dịch code
và chạy các test tự động.
 Câu hỏi : Tại sao phải chạy 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 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

Tích hợp code liên tục là gì ?


Tại sao phải tích hợp liên tục?
 để có phản hồi nhanh và sớm:
• tất cả thành phần/dự án đã được dịch?
• các chuẩn coding
• Các test case đã thành công?
• Các yêu cầu về hiệu năng?
• Vấn đề lưu trữ/triển khai?
 tầm nhìn về dự án tốt hơn :
• có thể ghi chú các trào lưu.
• các tính chất nào cần/được thêm vào?

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

Mô hình tích hợp code liên tục


 phần mềm kiểm soát version
 Quản lý độ phụ thuộc
 phần mềm kiểm thử tự động
 framework tích hợp liên tục
 tự động xây dựng 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 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

Kiểm thử tự động hóa


 Kiểm thử tự động hóa là áp dụng các tool phần mềm để tự động
qui trình kiểm thử thủ công của con người hầu đánh giá và thẩm
định sản phẩm phần mềm.
 Có nhiều mức độ khác nhau :
• kiểm thử đơn vị
• kiểm thử tích hợp : làm giả sự phụ thuộc vào thành phần thứ 3 và
xác nhận code tương tác với chúng chạy đúng theo kỳ vọng.
• kiểm thử hiệu suất : td. tốc độ và tính đáp ứ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 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

11.4 Phân phối liên tục

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

các giải pháp khác để CI/CD

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

DEV và OPS làm việc cùng nhau

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

DEVOPS : đàm thoại 3 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 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

11.6 Kết chươ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 42

21

You might also like