Wikipedia

Tích hợp liên tục

Trong kỹ thuật phần mềm, Tích hợp liên tục (CI - Continuous Integration) là việc trộn (merge) và biên dịch (build hoặc compile) tất cả các phiên bản (revision) mã nguồn làm việc của các lập trình viên trên một bản chính (mainline hoặc master) mỗi ngày. Grady Booch lần đầu tiên đặt tên và đề nghị về CI năm 1991,[1] mặc dù ông không ủng hộ việc tích hợp nhiều lần một ngày. Nói một cách đơn giản, mã nguồn của dự án phần mềm cần được tích hợp lại vào một nhánh chính và chạy các lệnh build, kiểm thử,... ít nhất một lần mỗi ngày.

Lập trình cực hạn (XP) thông qua các khái niệm của CI đã ủng hộ việc tích hợp nhiều hơn một lần mỗi ngày - có lẽ nhiều hơn hàng chục lần mỗi ngày.

Lịch sử

Vào năm 1994, Grady Booch dùng cụm từ tích hợp liên tục trong sách của mình. Trong năm 1997, Kent Beck và Ron Jeffries phát minh lập trình XP có bao gồm cả tích hợp liên tục.[2] Beck công bố về  tích hợp liên tục năm 1998, nhấn mạnh tầm quan trọng của giao tiếp mặt-đối-mặt.[3] Trong năm 1999, Beck xây dựng cuốn sách đầy đủ hơn cho lập trình XP.[4] Phần mềm CruiseControl được phát hành vào năm 2001.

Cơ sở hình thành

Mục tiêu chính của CI là để ngăn chặn những vấn đề, được gọi là "địa ngục tích hợp" trong phần đầu mô tả của lập trình XP. CI không được chấp nhận là một sự cải tiến của việc Thường xuyên tích hợp, vì vậy cần phân biệt giữa hai phương pháp này, tùy theo sự bất đồng về triết lý của mỗi người.[cần dẫn nguồn]

Trong lập trình XP, CI đã được thiết kế để được sử dụng kết hợp với kiểm thử đơn vị, viết thông qua các hoạt động của Phát triển theo hướng kiểm thử (Test-driven development). Ban đầu, điều này nghĩa là chạy tất cả các kiểm thử đơn vị trên máy của nhà phát triển phần mềm trước khi đệ trình (commit) lên nhánh mainline. Điều này sẽ giúp tránh việc một nhà phát triển phá vỡ công việc của một nhà phát triển khác. Nếu cần thiết, một phần tính năng hoàn toàn có thể được vô hiệu hóa trước khi đệ trình, như sử dụng tính năng toggles.

Luồng làm việc

Khi bắt tay làm việc, một nhà phát triển phần mềm sẽ lấy một bản sao của mã nguồn hiện tại để làm việc. Và sau đó, các nhà phát triển khác gửi mã nguồn đã thay đổi lên kho mã nguồn (repository) khiến cho bản sao ban đầu không còn cập nhật. Xung đột sẽ xảy ra khi nhà phát triển gửi bản sửa đổi của mình lên lại kho mã nguồn.

Một nhánh mã nguồn càng phát triển lâu càng dễ phát sinh xung đột khi các nhà phát triển tích hợp mã nguồn của mình trở lại kho mã nguồn. Đầu tiên họ phải tải lại các thay đổi của kho mã nguồn để trộn với các thay đổi của mình. Sau khi giải quyết xung đột, họ mới có thể gửi mã nguồn đó lên lại kho.

Tích hợp liên tục CI đòi hỏi tất cả các nhà phát triển phải tích hợp mã nguồn của mình lên kho mỗi ngày. Do đó, nó phần nào hạn chế các khó khăn khi trộn cách thay đổi với nhau.

Một bổ sung khác của CI là trước khi gửi mã nguồn lên kho, mỗi lập trình viên phải chạy tất cả các kiểm thử đơn vị. Kiểm thử tích hợp thường chạy tự động trên một máy chủ CI khi nó phát hiện một đệ trình (commit) mới.

Các bài thực hành

Một số nguyên tắc của Tích hợp liên tục.

Duy trì một kho mã nguồn

Các dự án phần mềm nên có một kho lưu trữ mã nguồn. Có thể dùng các phần mềm quản lý mã nguồn như Git, Subversion,...

Tự động hoá việc build phần mềm

Việc build dự án phần mềm cần được tự động hóa khi có sự thay đổi trong mã nguồn. Việc này có thể làm dựa trên các cơ chế hook của phần mềm quản lý mã nguồn hoặc dựa theo thời gian.

Làm cho việc build tự chạy kiểm thử

Sau khi mã nguồn đã được build, nó cần được chạy các kiểm thử đơn vị.

Tất cả mọi người gửi mã nguồn lên nhánh chính mỗi ngày

Gửi mã nguồn thường xuyên lên kho sẽ giúp phát hiện các xung đột nhanh chóng, hạn chế khó khăn khi trộn các phiên bản với nhau.

Mọi thay đổi mã nguồn (trên nhánh chính) cần được build

Tất cả các thay đổi về mã nguồn cần được build để đảm bảo khả năng tích hợp của thay đổi đó.

Giữ việc build diễn ra nhanh

Việc build diễn ra nhanh giúp phát hiện vấn đề nhanh khi tích hợp.

Kiểm thử trên một bản sao của môi trường production

Môi trường production có thể có nhiều khác biệt với môi trường kiểm thử, cần phải kiểm thử trên một bản sao của môi trường production để đảm bảo phần mềm hoạt động đúng.

Dễ dàng lấy được phiên bản build mới nhất

Các build cần dễ tiếp cho các bên liên quan để giảm thiểu thời gian cài đặt.

Tất cả mọi người có thể thấy kết quả build mới nhất

Dễ biết nguyên nhân build lỗi.

Triển khai tự động

Đa số hệ thống CI cho phép viết mã để triển khai phần mềm tự động sau khi build xong.[5][6]

Chi phí và lợi ích

CI có các lợi ích:

  • Phát hiện sớm lỗi tích hợp, tiết kiệm thời gian và tiền bạc của dự án khi sửa lỗi.
  • Hạn chế lỗi khi sắp đến ngày bàn giao sản phẩm
  • Nhà phát tiển giảm thời gian sửa lỗi khi phát hiện lỗi lúc chạy kiểm thử đơn vị do họ thường xuyên chạy chúng. Các lỗi sẽ nhỏ hơn do đó tiết kiêm thời gian sửa chữa.
  • Luôn có được một sản phẩm có thể chạy hoặc demo cho khách hàng

Phần mềm phục vụ CI

Bảng sau đây liệt kê một số phần mềm phổ biến phục vụ triển khai Tích hợp liên tục. Những phần mềm thông dụng trong CI là Jenkins, Travis-CI, TeamCity, Bamboo,...

TênNền tảngGiấy phépHỗ trợ: WindowsHỗ trợ: JavaHỗ trợ: khácThông báoTích hợp và công cụ biên tậpTích hợp khác
AnthillProCross-platformĐộc quyềnMSBuild, NAnt, Visual StudioAnt, Maven 1-2-3Shell script, batch script, cross-platform command-line, Groovy, Make, RTC Jazz, TFS Build, Custom Script InterpreterEmail, XMPP-Jabber, RSS, SystrayEclipse, Visual StudioMany
Apache ContinuumJDK, web containerApache 2.0Không biếtMaven 1-2-3Shell script[7]Mail, Jabber and Google Talk, MSN, IRC, report deployment with wagonKhông biếtKhông biết
Apache GumpPythonApache 2.0Không biếtAnt, Maven 1Không biếtEmailKhông biếtKhông biết
AppVeyorHostedĐộc quyềnVisual Studio, MSBuild, PsakeKhôngCustom Script, PowerShellEmail, HipChat, Slack, CatlightKhôngGitHub, Bitbucket, Kiln, Windows Azure
AssertibleHostedProprietaryUnknownUnknownUnknownEmail, Slack, Web, WebhooksNoMany
BambooWeb containerĐộc quyềnMSBuild,[8] NAnt,[9] Visual Studio[10]Ant,[11] Maven 1-2-3[12]Custom script, command-line tool, Bash, Xcode,[13] Phing,[14] GruntXMPP, Google Talk, Email, RSS, Remote API, HipChatIntelliJ IDEA, Eclipse, Visual StudioFishEye, Jira, Clover, Bitbucket, GitHub
BuildBotPythonGPLCommand-lineCommand-lineCommand-lineEmail, Web, GUI, IRCKhông biếtKhông biết
BuddyCross-platform, HostedĐộc quyềnYesAnt, Maven, Gradle, AndroidC, C++, Clojure, Dart, Elixir, Erlang, Go, Groovy, Haskell, Node.js, PHP, Python, Rake, Ruby, Scala, Shell Script, Command-LineEmail, GUI, Slack, SMS, WebhookNoAWS, Bitbucket, DigitalOcean, Docker, Elastic Beanstalk, GitHub, GitLab, GCE, Heroku, Microsoft Azure, Modulus, Shopify
BuildMasterCross-platformĐộc quyềnCross-platform command-lineEmail, customKhôngMany
CABIELAMPGPL2Không biếtKhông biếtKhông biếtWebKhông biếtKhông biết
CircleCIHosted-enterpriseĐộc quyềnKhôngGo, Ruby, Python, Node.js, PHP, JavaEmail, Campfire, HipChat, CCtrayKhông biếtAWS, Heroku, GitHub, Slack
CodeshipHostedĐộc quyềnKhôngGo, Java, Node.js, PHP, Python, RubyEmail, Flowdock, Grove, HipChat, Slack, webKhôngCloudControl, Engine Yard, GitHub, Heroku, Amazon Web Services, Microsoft Azure
Concourse Lưu trữ 2016-11-20 tại Wayback MachineGoApache 2.0Command-lineEmail, Slack, HTTP APIAtomAmazon S3, BOSH, Cloud Foundry, Docker, Git, GitHub, Pivotal Tracker[15]
Continua CIWindowsĐộc quyềnAnt, Nant, FinalBuilder, MSBuild, Rake, Visual Studio, PowershellAntCommand-lineEmail, XMPPKhôngGitHub, Bitbucket, Codeplex, Kiln, TFS, FogBugz, Jira, NCover, Opencover, NUnit, DUnitX, jUnit, xUnit, NuGet, 7Zip
continuousphpHostedĐộc quyềnKhôngKhôngPHPEmail, SlackKhôngBitbucket, GitHub, GitLab, Stash, Zend Server
CruiseControlCross-platformBSD-styleNAnt, Rake, XcodePhing, Apache Ant, Mavencatch-all 'exec'Email, CCTrayEclipseKhông biết
CruiseControl.NETCross-platformBSD-styleMSBuild, NAnt, Visual StudioKhông biếtCommand-lineEmail, CCTray, RSSKhông biếtKhông biết
Distelli Lưu trữ 2017-11-25 tại Wayback MachineCross-platformĐộc quyềnKhôngRuby, Java, Python, Node.js, PHP, Clojure, Rake, Go, command-line, Groovy, Scala, ErlangEmail, HipChat, SlackKhôngGitHub, Bitbucket, Docker, Mercurial, Windows, Linux, Amazon Web Services, Microsoft Azure
Dockunit Lưu trữ 2018-08-28 tại Wayback MachineCross-platformGPLCross-platform Docker basedEmail, GitHubKhôngGitHub
Drone.ioHosted/Cross-platformApache 2.0Không biếtAnt, Maven 2, GradleC, C++, Dart, Go, Node.js, Python, PHP, Ruby, Java, Groovy, Scala, ErlangEmail, Slack, TelegramKhông biếtHeroku, Dotcloud, GitHub, Bitbucket
easyCISWindowsĐộc quyềnMSBuild, NAnt, Visual StudioKhông biếtKhông biếtSystray, RSS, EmailKhôngKhông
ElectricCommanderCross-platformĐộc quyềnCommand-lineEmail, GUI, instant messenger, TwitterEclipse, Visual StudioJira, Bugzilla, Perl API, command-line
GitLab CIGoMITCross-platform command-lineEmail, Slack, HipChat, PushoverKhông biếtHTTP API (JSON)
GoCDCross-platformApache 2.0Command-lineCommand-lineCommand-lineEmail, hipchat, Slack, Gerrit, Gitter, Riemann etcKhôngGitHub
HarrowHostedĐộc quyềnYesYesGo, Java, Node.js, PHP, Python, RubyEmail, SlackKhông biếtGitHub, Bitbucket, Gitlab, Private Repository
IntegrityRubyMITCommand-lineCommand-lineCommand-lineEmail, WebKhông biếtKhông biết
Jenkins-HudsonWeb containerCreative CommonsMITMSBuild, NAntAnt, Maven 2, KundoCMake, Gant, Gradle, Grails, Phing, Rake, Ruby, SCons, Python, shell script, command-lineAndroid, Email, Google Calendar, IRC, XMPP, RSS, Twitter, Slack, Catlight, CCMenu, CCTrayEclipse, IntelliJ IDEA, NetBeansBugzilla, Google Code, Jira, Bitbucket, Redmine, FindBugs, Checkstyle, PMDMantis, Trac, HP ALM
LuntBuild Lưu trữ 2016-03-29 tại Wayback MachineWeb containerApache 2.0Không biếtAnt, Maven 1-2Shell script, RakeUnknownKhông biếtKhông biết
LorduiWindowsĐộc quyềnCommand-line, tất cả mọi thứ với giao diện người dùngEmail, possibly any way with user interfaceKhôngJava, command-line
NCINode.jsMITKhôngKhôngCommand-lineEmail, XMPP-JabberKhôngGitHub, Bitbucket
OpenMake Software MeisterCross-platformĐộc quyềnMSBuild, NAnt, Visual StudioAnt, Maven 1-2-3Shell script, batch script, cross-platform command-line, Groovy, Make, RTC Jazz, TFS Build, Custom Script InterpreterEmail, XMPP-Jabber, RSS, SystrayEclipse, Visual StudioBugzilla, Google Code, Jira, Bitbucket, Redmine, FindBugs, Checkstyle, PMDMantis, Trac
Probo.CINode.jsApache 2.0KhôngKhôngNode.jsEmail, HipChat, Slack (all coming soon)KhôngGitHub, Bitbucket, Stash
QuickBuildCross-platformĐộc quyềnMSBuild, NAnt, Visual StudioAnt, Maven 1, Maven 2Rake, shell script, command-lineEmail, XMPP, RSS, Google Talk, Remote APIEclipse, IntelliJ IDEA, Visual StudioJira
SemaphoreHostedĐộc quyềnKhông biếtMaven 3Ruby, Java, Python, Node.js, PHP, Clojure, Rake, command-lineEmail, Campfire, HipChat, Slack, Flowdock, Webhooks, Remote APIKhông biếtGitHub, Bitbucket, Heroku, Code Climate, Cloud 66
ShippableHostedĐộc quyềnKhôngAnt, Maven, GradleRuby, Python, Node.js, Java, Scala, PHP, GoEmail, Slack, HipChat, Webhooks, irc, CampfireKhôngGitHub, Bitbucket, AWS, Kubernetes, Azure, Heroku
Snap CIHostedĐộc quyềnKhôngAnt, Maven, Gradle, AndroidC, C++, Clojure, Erlang, Go, Groovy, Haskell, Java, Node.js, Perl, PHP, Python, Ruby, ScalaEmail, Campfire, HipChat, WebhookKhôngGitHub, Heroku, AWS
Solano CI Lưu trữ 2016-03-14 tại Wayback MachineHosted, cross-platform, private cloudĐộc quyềnKhôngAnt, Maven, Gradle, AndroidC, C++, Clojure, Go, Java, Javascript, Node.js, PHP, Python, R, Ruby, Scala, command-lineEmail, Campfire, HipChat, Flowdock, Slack, Webhook, CCMenuKhôngGitHub, GitHub Enterprise, Bitbucket, Heroku, AWS, Azure, Git, Mercurial, Docker
StriderNode.jsBSDKhôngKhôngC, C++, Clojure, Erlang, Go, Groovy, Haskell, Java, Node.js, Perl, PHP, Python, Ruby, ScalaEmail, Slack, Web, WebhookKhôngGitHub, Bitbucket, Heroku, GitHub Enterprise, Git
TestributorHostedMITCommand-lineCommand-lineCommand-lineEmail, Slack, Web, WebhookKhôngGitHub, Bitbucket, Git
Travis CIHostedMITKhôngAnt, Maven, Gradle[16]C, C++, Clojure, Elixir, Erlang, Go, Groovy, Haskell, Java, Node.js, Perl, PHP, Python, Ruby, Rust, Scala, SmalltalkEmail, Campfire, HipChat, IRC, Slack, Catlight, CCMenu, CCTrayKhôngGitHub, Heroku
TeamCityWeb containerĐộc quyềnMSBuild, NAnt, Visual Studio, Duplicates finder for.NETAnt, Maven 2-3, Gradle, IntelliJ IDEA.ipr based and Inspections and Duplicates finderRake, FxCop, command-lineEmail, XMPP, RSS, IDE, SysTrayEclipse, Visual Studio, IntelliJ IDEA, RubyMine, PyCharm, PhpStorm, WebStormJetbrains Youtrack, Jira, Bugzilla, FishEye, FindBugs, PMD, dotCover, NCover
Team Foundation Server, Visual Studio Team Services (VSTS)Cross-platformProprietary, MITMSBuild, Visual StudioAnt, Maven, Gradle, AndroidC, C++, Go, Groovy, Java, Node.js, Perl, PHP, Python, RubyEmail, SOAP, CatlightVisual Studio, Eclipse, IntelliJ IDEA, Android Studio, Visual Studio CodeGitHub, Jenkins, Slack, Hipchat, FindBugs, Checkstyle, PMD
VexorHostedĐộc quyềnKhôngKhông biếtRuby, Clojure, Scala, Python, Node.js, Go, Rust, HaskellEmail, HipChat, SlackKhông biếtGitHub, Bitbucket, Gitlab

Xem thêm

Tham khảo

  1. ^ Booch, Grady (1991). Object Oriented Design: With ApplicationsBenjamin Cummings. p. 209. ISBN 9780805300918. Truy cập 2014-08-18.
  2. ^ Fowler, Martin (ngày 1 tháng 5 năm 2006). “Continuous Integration”. martinfowler.com. Truy cập ngày 9 tháng 1 năm 2014.
  3. ^ Beck, Kent (1998-03-28). "Extreme Programming: A Humanistic Discipline of Software Development"Fundamental Approaches to Software Engineering: First International Conference, FASE'98, Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS'98, Lisbon, Portugal, March 28 - ngày 4 tháng 4 năm 1998, Proceedings, Volume 1. Lisbon: Springer. p. 4. ISBN 9783540643036.
  4. ^ Beck, Kent (1999). Extreme Programming ExplainedISBN 0-201-61641-6.
  5. ^ Ries, Eric (ngày 30 tháng 3 năm 2009). “Continuous deployment in 5 easy steps”. O’Reilly. Truy cập ngày 10 tháng 1 năm 2013.
  6. ^ Fitz, Timothy (ngày 10 tháng 2 năm 2009). “Continuous Deployment at IMVU: Doing the impossible fifty times a day”. Wordpress. Truy cập ngày 10 tháng 1 năm 2013.
  7. ^ “Continuum Features”. Continuum. Apache Software Foundation. ngày 23 tháng 9 năm 2013. Truy cập ngày 3 tháng 3 năm 2014.
  8. ^ “MSBuild”.
  9. ^ “NAnt”.
  10. ^ “Visual Studio”.
  11. ^ “Ant”.
  12. ^ “Maven”.
  13. ^ “Xcode”.
  14. ^ “Bản sao đã lưu trữ”. Bản gốc lưu trữ ngày 7 tháng 4 năm 2015. Truy cập ngày 17 tháng 11 năm 2016.
  15. ^ "Resource types". Bản gốc lưu trữ ngày 13 tháng 11 năm 2016. Truy cập ngày 17 tháng 11 năm 2016.
  16. ^ “Building a Java project in Travis CI”.
🔥 Top keywords: Trang ChínhĐài Tiếng nói Việt NamĐặc biệt:Tìm kiếmThích Phổ TuệPháp chủGiáo hội Phật giáo Việt NamYouTubeChiến tranh thế giới thứ haiViệt NamChiến tranh thế giới thứ nhấtBảng tuần hoànCảnh sát biển Việt NamCông ty UmbrellaĐặc biệt:Thay đổi gần đâyDanh sách các nhân vật trong Tokyo RevengersQuy luật thống nhất và đấu tranh giữa các mặt đối lậpPaul WalkerQuân đội nhân dân Việt NamMỹ LatinhNguyễn Quang TuấnHồ Chí MinhVận động (triết học Marx - Lenin)Ý thức (triết học Marx-Lenin)HalloweenTrò chơi con mựcĐông Nam ÁThích Tâm TịchCách mạng công nghiệpHai nguyên lý của phép biện chứng duy vậtĐài Truyền hình Việt NamChiến tranh LạnhGirls Planet 999Số nguyên tốTrung QuốcXNXXLịch sử Việt NamThích Đức NhuậnAi Cập cổ đạiHiệp hội các quốc gia Đông Nam ÁChâu PhiGoogle DịchNguyên tố vi lượngHình bình hànhHương vị tình thânNiggerPhi NhungQuan hệ ngoại giao của Việt NamLịch sử Trung QuốcCấu trúc proteinPhong trào giải phóng dân tộcChủ nghĩa tư bảnĐịa lý châu ÁNguyễn Đình ChiểuHoa KỳKhí hậu nhiệt đới gió mùaLưỡng HàQuy luật lượng - chấtChâu ÁNấc thang lên thiên đườngCristiano RonaldoElon MuskVật chất (triết học)Càn LongHọc thuyết về nhà nước của chủ nghĩa Marx LeninNhà nướcNguyên tố hóa họcChủ nghĩa duy vậtDanh sách động từ bất quy tắc (tiếng Anh)Nguyễn DuThích Quảng ĐứcBộ Quốc phòng Việt NamThành phố Hồ Chí MinhFacebookHàn QuốcMười lời thề danh dự của quân nhân Quân đội nhân dân Việt NamChủ nghĩa duy vật biện chứngGiai cấp công nhânNhật BảnBTS

Tích hợp liên tục other languages: