Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Vai trò của Jenkins trong mô hình phát triển phần mềm Agile

7.258 Aufrufe

Veröffentlicht am

Vai trò của Jenkins trong mô hình phát triển phần mềm Agile
agile, continuous integration system, jenkins, quy trinh phat trien phan mem, xu huong phat trien phan mem

Veröffentlicht in: Software

Vai trò của Jenkins trong mô hình phát triển phần mềm Agile

  1. 1. GIỚI THIỆU HỆ THỐNG TÍCH HỢP LIÊN TỤC VỚI JENKINS Lâm Minh Trí (minhtri.itp@gmail.com) TP.Hồ Chí Minh, ngày 20 tháng 01 năm 2014
  2. 2. Page1 MỤC LỤC MỤC LỤC......................................................................................................................................................... 1 1. TỔNG QUAN ............................................................................................................................................... 2 2. GIỚI THIỆU HỆ THỐNG TÍCH HỢP LIÊN TỤC ...................................................................................... 2 2.1. Định nghĩa hệ thống tích hợp liên tục (Continuous Integration)............................................................ 2 2.2. So sánh mô hình phát triển phần mềm truyền thống (waterfall) và agile............................................... 4 2.3. Mô hình phát triển phần mềm Agile (với mô hình cụ thể Scrum).......................................................... 6 2.4. Thực tiễn của hệ thống tích hợp liên tục (Practices of Continuous Integration) .................................... 6 2.5. Khó khi áp dụng hệ thống tích hợp liên tục............................................................................................ 7 2.6. Tại sao cần hệ thống tích hợp liên tục? .................................................................................................. 7 3. GIỚI THIỆU JENKINS ................................................................................................................................ 8 3.1. Giới thiệu................................................................................................................................................ 8 3.2. Đặc điểm của Jenkins ............................................................................................................................. 8 3.3. Vai trò của Jenskin trong CI................................................................................................................... 8 3.4. Lợi ích của Jenkins mang lại ................................................................................................................ 10 3.5. Cài đặt – demo...................................................................................................................................... 10 4. KẾT LUẬN ................................................................................................................................................. 11 4.1. Loại dự án nào nên áp dụng Jenkins?................................................................................................... 11 4.2. Chúng ta kết hợp các công cụ hiện tại đang được sử dụng thông qua Jenkins như thế nào? .............. 11 4.3. Lợi ích mang lại.................................................................................................................................... 11 5. TÀI LIỆU THAM KHẢO (References)...................................................................................................... 13
  3. 3. Page2 1. TỔNG QUAN Trong số chúng ta có lẽ đã từng thắc mắc với các hệ thống phần mềm cập nhật phiên bản liên tục hàng giờ, hàng ngày thì họ đã làm điều đó như thế nào và tại sao có phiên bản liên tục và có phiên bản stable? Chúng ta thử hình dung trong quy trình phát triển của một opensource, mã nguồn được viết bởi cộng đồng và được tích hợp liên tục vào bất kỳ thời điểm nào trong ngày. Vậy thì làm thế nào họ có thể kiểm soát được lỗi của phần mềm trong khi đó các phiên bản vẫn điều đặn được xuất bản ra cộng đồng? Các quá trình hotfix lỗi và nhận phản hồi từ cộng đồng người sử dụng, cải tiến mở rộng tính năng được lặp lại liên tục. Chúng ta đã quen với việc sử dụng các trong công cụ quản lý source code ( SVN, GIT, VSS,CSV,..), các công cụ quản lý lỗi (redmine, mantis, testlink), các công cụ build (MS build, Nant,…), các công cụ test tự động (Junit, Nunit,CppUnit,..),…Việc kết hợp tất cả các công cụ này thành một quy trình tự động và khép kín sẽ mang lại hiệu quả gì cho chúng ta? Và việc kết hợp này sẽ được thực hiện như thế nào? Phần tiếp theo sẽ phần nào giải đáp các vấn đề trên. 2. GIỚI THIỆU HỆ THỐNG TÍCH HỢP LIÊN TỤC 2.1. Định nghĩa hệ thống tích hợp liên tục (Continuous Integration). • Tích hợp liên tục là một hoạt động phát triển phần mềm mà ở đó các thành viên của một nhóm sẽ tích hợp công việc của họ với nhau liên tục, thường thì các thành viên tích hợp công việc ít nhất mỗi lần trong ngày, dẫn đến có nhiều sự tích hợp trong ngày. Mỗi sự tích hợp như vậy sẽ được kiểm tra bởi một công cụ build tự động (bao gồm test) để phát hiện ra những lỗi tích hợp càng sớm càng tốt. • Phần mềm phát triển theo mô hình Agile còn được gọi là phần mềm tích hợp liên tục (Continuous Integration ).
  4. 4. Page3 • Minh họa
  5. 5. Page4 2.2. So sánh mô hình phát triển phần mềm truyền thống (waterfall) và agile Waterfall and Similar Methodology Agile and Similar Methodology  Hướng kế hoạch (plan – driven)  Chỉ phù hợp khi yêu cầu khách hàng không thay đổi hoặc ít khi thay đổi.  Tạo ra phần mềm nhưng chưa biết được giá trị sử dụng (không đúng yêu cầu?).  Mất nhiều thời gian và chi phí cho việc quay lại để chỉnh sửa ở các giai đoạn trước.  Thường trễ tiến độ do kế hoạch không sát với yêu cầu và khi yêu cầu thay đổi.  Rủi ro cao.  Hướng giá trị (value – driven).  Chấp nhận thay đổi và cho phép xử lý thay đổi nhẹ nhàng và nhanh chóng.  Chia nhỏ để xử lý và xác định được kết quả qua từng sprint. Quá trình chia nhỏ xử lý được lặp lại cho đến khi sản phẩm hoàn tất.  Tạo ra phần mềm có giá trị và được triển khai cho khách hàng sử dụng một cách sớm nhất có thể.  Thường xuyên giao tiếp và nhận phản hồi từ phía khách hàng.  Liên tục cải tiến cho các giai đoạn print sau.  Giảm thiểu rủi ro.
  6. 6. Page5 Mô hình: Waterfall and Similar Methodology Others Agile and Similar Methodology Incremental Spiral Cocomo Cocomo II RAD RUP … Minh họa khả năng giảm thiểu rủi ro của mô hình Agile so với Waterfall:
  7. 7. Page6 2.3. Mô hình phát triển phần mềm Agile (với mô hình cụ thể Scrum) Có rất nhiều biến thể của Agile để phù hợp với từng dự án cụ thể và phù hợp với điều kiện môi trường phát triển của mỗi công ty. Tuy nhiên tất cả điều dựa trên các mục đích chính của dự án là phát triển và triển khai nhanh chóng sản phẩm đến khách hàng với mức độ hài lòng cao nhất và rủi ro là thấp nhất qua mỗi giai đoạn (hoàn thành đóng gói nhóm chức năng của mỗi giai đoạn). Khách hàng có thể dùng và góp ý về sản phẩm một cách sớm nhấtcó thể. Qua mỗi giai đoạn nhóm dự án có thể hiệu chỉnh rút kinh nghiệm và cải tiến phù hợp với yêu cầu của khách hàng hơn vì vậy ở những giai đoạn sau được kế thừa kinh nghiệm của những giai đoạn trước nên năng suất và hiệu quả công việc của đội dự án được tăng lên, mức độ hài lòng của khách hàng cũng được đáp ứng một cách tốt nhất có thể. Và một trong số mô hình cụ thể của Agile được áp dụng phổ biến hiện nay đó là Scrum. Về chi tiết mô hình này vui lòng tham khảo quy trình sản xuất phần mềm của trung tâm (QT04) 2.4. Thực tiễn của hệ thống tích hợp liên tục (Practices of Continuous Integration)  Quản lý phiên bản (source control and version control ).  Tự động build bao gồm test (tự động test).  Đôi ngũ phát triển thường xuyên chuyển (commit) source về nơi lưu trữ chính (mainline).  Mỗi khi code có thay đổi sẽ build lại (mainline) thông qua build server.  Báo lỗi cho người lập trình gây lỗi và quản lý dự án.  Phát hành phiên bản hoàn chỉnh cho khách hàng khi không còn lỗi tính hợp.  Tự động phân phối phiên bản mới đến khách hàng bằng một quy trình tự động khép kín.  Mọi người có thể nhìn thấy những gì đã xảy ra (thay đổi, lỗi…) để xem xét và giải quyết một cách minh bạch.
  8. 8. Page7 2.5. Khó khi áp dụng hệ thống tích hợp liên tục  Khó khăn:  Cần thời gian thiết lập hệ thống ban đầu.  Đòi hỏi quản lý dự án, người lập trình, người kiểm thử phải am hiểu mô hình phát triển phần mềm Agile, hệ thống tích hợp CI, cách sử dụng các công cụ hỗ trợ cho Agile và CI.  Chi phí thiết bị phần cứng (các server cho CI). 2.6. Tại sao cần hệ thống tích hợp liên tục?  Giảm thiểu rủi ro do lỗi được phát hiện sớm.  Giảm thiểu sự lặp lại cho các quá trình (phân tích, thiết kế, lập trình khi sản phẩm không đúng yêu cầu hoặc yêu cầu thay đổi).  Tạo phần mềm có giá trị sử dụng sớm nhất có thể và sẳn sàng triển khai mọi lúc mọi nơi.  Cung cấp cái nhìn xuyên suốt tổng quan và cụ thể cho từng giai đoạn.  Nâng cao kỹ năng của đội ngũ nhân viên phát triển phần mềm.  Cải thiện chất lượng phần mềm.
  9. 9. Page8 3. GIỚI THIỆU JENKINS 3.1. Giới thiệu  Là một ứng dụng web application mã nguồn mở (được cộng đồng phát triển theo giấy phép MIT) đóng vai trò máy chủ build & test của hệ thống tích hợp liên tục.  Jenkins được viết bằng Java nên có thể kết hợp được với hầu hết các công cụ khác của hệ thống tích hợp liên tục với nhiều nền tảng khác nhau.  Tiền thân là Hudson được viết bởi Kosuke Kawaguchi tại Sun, kể từ khi Sun được mua lại bởi Oracle vào năm 2010, một bộ phận phát triển Hudson đã tách ra phát triển riêng và được đặt tên là Jenkins.  Được sử dụng rộng rãi và được phát triển cải tiến liên tục bởi cộng đồng mã nguồn mở.  Đạt nhiều giải thưởng :InfoWorld Bossies Award, 2011 O'Reilly Open-Source Award, 2011 ALM&SCM, SDTimes 100, 2010, 2011 ,GlassFish Community Innovation Award 2008, Duke's Choice Award 2008  Được các tổ chức lớn tin dùng: Ebay,Apache, NASA,Boeing,Mozilla, Linked in,… 3.2. Đặc điểm của Jenkins  Hỗ trợ đầy đủ nhất các tính năng tự động hóa của hệ thống tích hợp liên tục bằng việc kết hợp giữa các thành phần mở rộng (so với các công cụ khác).  Dễ dàng cài đặt và sử dụng.  Đa nền tảng.  Hỗ trợ cho nhiều công nghệ phát triển phần mềm (JAVA, .NET, PHP, CPP Ruby,…).  Được sử dụng rộng rãi.  Dễ dàng tùy chỉnh mở rộng.  Dễ dàng liên kết với các công cụ khác của hệ thống tích hợp liên tục thông qua các plug in.  Miễn phí 3.3. Vai trò của Jenskin trong CI  Là CI server (build & test server) giữ vị trí trung tâm “trái tim” cho mọi hoạt động của hệ thống.
  10. 10. Page9  Giúp khép kín quy trình phát triển phần mềm một cách tự động. - Nhờ vào việc hỗ trợ đa nền tảng, công nghệ Jenkins giúp khép kín quy trình phát triển phần mềm một cách tự động theo mô hình Agile nói chung và hệ thống tích hợp liên tục nói riêng. - Với hơn 400 plugin và được phát triển thêm không ngừng Jenkins đã trở thành trợ thủ đắc lực cho hệ thống CI. - Với hệ thống plugin phong phú và đa dạng cho phép chúng ta có nhiều lựa chọn kết hợp và điều tuyệt vời hơn là hầu hết chúng đều là mã nguồn mở miễn phí và tốt nhất hiện nay. JENKINS
  11. 11. Page10 3.4. Lợi ích của Jenkins mang lại  Tất cả với Jenkins hầu như là tự động.  Giảm thời gian và chi phí cho quá trình phát triển phần mềm.  Nâng cao năng lực nhân viên?  Có thể tóm gọn lợi ích Jenkins mang lại là mọi thứ tự động với:  Faster.  Easier.  Safer.  Smarter. 3.5. Cài đặt – demo Sau đây sẽ hướng dẫn việc cài đặt và ứng dụng Jenkins trong việc build và publish 1 ứng dụng windows aplication (Với công nghệ click one của microsoft cho phép publish một ứng dụng lên một webserver và cho phép người dùng download và cài đặt phần mềm từ server đó. Một tính năng khác của click one là cho phép ứng dụng tự động kiểm tra phiên bản và download và cài bản mới nhất nếu có sự đồng ý của người sử dụng) JENKINS_Tutorial.doc main.build publish-template.html
  12. 12. Page11 4. KẾT LUẬN 4.1. Loại dự án nào nên áp dụng Jenkins? Dự án phát triển theo mô hình Agile. Ngoài ra các dự án thường xuyên build hotfix và có quá trình build cấu hình phức tạp (gồm nhiều project liên quan với nhau và thứ tự các bước build cũng phải chính xác – Thông thường chỉ có một hoặc hai người trong dự án có thể build và mất rất nhiều thời gian). Thay vì phải mất nhiều thời gian vào việc này chúng ta có thể chỉ cần cấu hình một lần và mỗi khi build chỉ cần vào Jenkins nhấn build là toàn bộ các quá trình sẽ được thực hiện theo đúng tuần tự. Hoặc có thể đặt chế độ build tự động. 4.2. Chúng ta kết hợp các công cụ hiện tại đang được sử dụng thông qua Jenkins như thế nào? Chúng ta có thể kết hợp công cụ quản lý source (SVN), công cụ test tự động (JUnit, NUnit,PhpUnit,..) công cụ test redmine/mantis , công cụ quản lý test case (testlink – là công cụ quản lý test case có thể kết hợp với mantis và Jenkins), công cụ build (Ant, Nant, MSBuild,..) để khép kín quy trình tính hợp phần mềm. Cụ thể quy trình kết hợp các công cụ cho quá trình tích hợp liên tục với Jenkins được đề xuất tại như sau: Tiến trình được thực hiện theo thứ tự: - Jenkins tổng hợp source của lập trình viên thông qua SVN. - Jenkins sử dụng công cụ build (ant,nant, MSBuild) để build ứng dụng - Jenkins sử dụng công cụ test unit để kiểm tra các unit test case đã pass hay chưa. Report test case, bug qua (mantis, redmine, teslink) - Nếu các test case đã pass thì thực hiện tiếp tiến trình publish ứng dụng ra deploy server thông qua ftp server. Lưu trữ phiên bản code vào reversion server. - Thông báo thành công thất bại của quá trình build đến đội dự án. - Bên cạnh đó chúng ta có thể thực hiện các tiến trình phụ trong quá trình build như (chạy các script SQL (store procedure, function) trong quá trình build với Jenkins) 4.3. Lợi ích mang lại - Giảm được thời gian, resource cho việc build, test và deploy ứng dụng JENKINSSVN JUNIT/NU NIT ANT/MS BUILD MANTIS DEPLOY SERVER REDMINE TESTLINK REVERSION SERVER REPORTS
  13. 13. Page12 - Các test case với các công cụ test tự động được tái sử dụng trong suốt quá trình phát triển sản phẩm. - Quản lý reversion phiên bản một cách rõ ràng. - Phát hiện lỗi tích hợp source code dễ dàng và nhanh chóng. - Minh bạch công khai quá trình phát hiện và xử lý lỗi. - Giảm thiểu rủi ro trong quá trình phát triển phần mềm khi kết hợp với mô hình phát triển Agile.
  14. 14. Page13 - 5. TÀI LIỆU THAM KHẢO (References) Jenkins-the-definitive-guide | John Ferguson Smart Integrating PHP Projects with Jenkins|Sebastian Bergmann Jenkins&TestLink|Bruno P. Kinoshita http://jenkins-ci.org/

×