From Wikipedia, the free encyclopedia
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.
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.
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.
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.
Một số nguyên tắc của Tích hợp liên tục.
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,...
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.
Sau khi mã nguồn đã được build, nó cần được chạy các kiểm thử đơn vị.
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.
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 đó.
Việc build diễn ra nhanh giúp phát hiện vấn đề nhanh khi tích hợp.
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.
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.
Dễ biết nguyên nhân build lỗi.
Đ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]
CI có các lợi ích:
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ên | Nền tảng | Giấy phép | Hỗ trợ: Windows | Hỗ trợ: Java | Hỗ trợ: khác | Thông báo | Tích hợp và công cụ biên tập | Tích hợp khác |
---|---|---|---|---|---|---|---|---|
AnthillPro | Cross-platform | Độc quyền | MSBuild, NAnt, Visual Studio | Ant, Maven 1-2-3 | Shell script, batch script, cross-platform command-line, Groovy, Make, RTC Jazz, TFS Build, Custom Script Interpreter | Email, XMPP-Jabber, RSS, Systray | Eclipse, Visual Studio | Many |
Apache Continuum | JDK, web container | Apache 2.0 | Không biết | Maven 1-2-3 | Shell script[7] | Mail, Jabber and Google Talk, MSN, IRC, report deployment with wagon | Không biết | Không biết |
Apache Gump | Python | Apache 2.0 | Không biết | Ant, Maven 1 | Không biết | Không biết | Không biết | |
AppVeyor | Hosted | Độc quyền | Visual Studio, MSBuild, Psake | Không | Custom Script, PowerShell | Email, HipChat, Slack, Catlight | Không | GitHub, Bitbucket, Kiln, Windows Azure |
Assertible | Hosted | Proprietary | Unknown | Unknown | Unknown | Email, Slack, Web, Webhooks | No | Many |
Bamboo | Web container | Độc quyền | MSBuild,[8] NAnt,[9] Visual Studio[10] | Ant,[11] Maven 1-2-3[12] | Custom script, command-line tool, Bash, Xcode,[13] Phing,[14] Grunt | XMPP, Google Talk, Email, RSS, Remote API, HipChat | IntelliJ IDEA, Eclipse, Visual Studio | FishEye, Jira, Clover, Bitbucket, GitHub |
BuildBot | Python | GPL | Command-line | Command-line | Command-line | Email, Web, GUI, IRC | Không biết | Không biết |
Buddy | Cross-platform, Hosted | Độc quyền | Yes | Ant, Maven, Gradle, Android | C, C++, Clojure, Dart, Elixir, Erlang, Go, Groovy, Haskell, Node.js, PHP, Python, Rake, Ruby, Scala, Shell Script, Command-Line | Email, GUI, Slack, SMS, Webhook | No | AWS, Bitbucket, DigitalOcean, Docker, Elastic Beanstalk, GitHub, GitLab, GCE, Heroku, Microsoft Azure, Modulus, Shopify |
BuildMaster | Cross-platform | Độc quyền | Có | Có | Cross-platform command-line | Email, custom | Không | Many |
CABIE | LAMP | GPL2 | Không biết | Không biết | Không biết | Web | Không biết | Không biết |
CircleCI | Hosted-enterprise | Độc quyền | Không | Có | Go, Ruby, Python, Node.js, PHP, Java | Email, Campfire, HipChat, CCtray | Không biết | AWS, Heroku, GitHub, Slack |
Codeship | Hosted | Độc quyền | Không | Có | Go, Java, Node.js, PHP, Python, Ruby | Email, Flowdock, Grove, HipChat, Slack, web | Không | CloudControl, Engine Yard, GitHub, Heroku, Amazon Web Services, Microsoft Azure |
Concourse Lưu trữ 2016-11-20 tại Wayback Machine | Go | Apache 2.0 | Có | Có | Command-line | Email, Slack, HTTP API | Atom | Amazon S3, BOSH, Cloud Foundry, Docker, Git, GitHub, Pivotal Tracker[15] |
Continua CI | Windows | Độc quyền | Ant, Nant, FinalBuilder, MSBuild, Rake, Visual Studio, Powershell | Ant | Command-line | Email, XMPP | Không | GitHub, Bitbucket, Codeplex, Kiln, TFS, FogBugz, Jira, NCover, Opencover, NUnit, DUnitX, jUnit, xUnit, NuGet, 7Zip |
continuousphp | Hosted | Độc quyền | Không | Không | PHP | Email, Slack | Không | Bitbucket, GitHub, GitLab, Stash, Zend Server |
CruiseControl | Cross-platform | BSD-style | NAnt, Rake, Xcode | Phing, Apache Ant, Maven | catch-all 'exec' | Email, CCTray | Eclipse | Không biết |
CruiseControl.NET | Cross-platform | BSD-style | MSBuild, NAnt, Visual Studio | Không biết | Command-line | Email, CCTray, RSS | Không biết | Không biết |
Distelli Lưu trữ 2017-11-25 tại Wayback Machine | Cross-platform | Độc quyền | Không | Có | Ruby, Java, Python, Node.js, PHP, Clojure, Rake, Go, command-line, Groovy, Scala, Erlang | Email, HipChat, Slack | Không | GitHub, Bitbucket, Docker, Mercurial, Windows, Linux, Amazon Web Services, Microsoft Azure |
Dockunit Lưu trữ 2018-08-28 tại Wayback Machine | Cross-platform | GPL | Có | Có | Cross-platform Docker based | Email, GitHub | Không | GitHub |
Drone.io | Hosted/Cross-platform | Apache 2.0 | Không biết | Ant, Maven 2, Gradle | C, C++, Dart, Go, Node.js, Python, PHP, Ruby, Java, Groovy, Scala, Erlang | Email, Slack, Telegram | Không biết | Heroku, Dotcloud, GitHub, Bitbucket |
easyCIS | Windows | Độc quyền | MSBuild, NAnt, Visual Studio | Không biết | Không biết | Systray, RSS, Email | Không | Không |
ElectricCommander | Cross-platform | Độc quyền | Có | Có | Command-line | Email, GUI, instant messenger, Twitter | Eclipse, Visual Studio | Jira, Bugzilla, Perl API, command-line |
GitLab CI Lưu trữ 2016-11-30 tại Wayback Machine | Go | MIT | Có | Có | Cross-platform command-line | Email, Slack, HipChat, Pushover | Không biết | HTTP API (JSON) |
GoCD | Cross-platform | Apache 2.0 | Command-line | Command-line | Command-line | Email, hipchat, Slack, Gerrit, Gitter, Riemann etc | Không | GitHub |
Harrow | Hosted | Độc quyền | Yes | Yes | Go, Java, Node.js, PHP, Python, Ruby | Email, Slack | Không biết | GitHub, Bitbucket, Gitlab, Private Repository |
Integrity | Ruby | MIT | Command-line | Command-line | Command-line | Email, Web | Không biết | Không biết |
Jenkins-Hudson | Web container | Creative Commons và MIT | MSBuild, NAnt | Ant, Maven 2, Kundo | CMake, Gant, Gradle, Grails, Phing, Rake, Ruby, SCons, Python, shell script, command-line | Android, Email, Google Calendar, IRC, XMPP, RSS, Twitter, Slack, Catlight, CCMenu, CCTray | Eclipse, IntelliJ IDEA, NetBeans | Bugzilla, Google Code, Jira, Bitbucket, Redmine, FindBugs, Checkstyle, PMD và Mantis, Trac, HP ALM |
LuntBuild Lưu trữ 2016-03-29 tại Wayback Machine | Web container | Apache 2.0 | Không biết | Ant, Maven 1-2 | Shell script, Rake | Unknown | Không biết | Không biết |
Lordui | Windows | Độc quyền | Có | Có | Command-line, tất cả mọi thứ với giao diện người dùng | Email, possibly any way with user interface | Không | Java, command-line |
NCI | Node.js | MIT | Không | Không | Command-line | Email, XMPP-Jabber | Không | GitHub, Bitbucket |
OpenMake Software Meister | Cross-platform | Độc quyền | MSBuild, NAnt, Visual Studio | Ant, Maven 1-2-3 | Shell script, batch script, cross-platform command-line, Groovy, Make, RTC Jazz, TFS Build, Custom Script Interpreter | Email, XMPP-Jabber, RSS, Systray | Eclipse, Visual Studio | Bugzilla, Google Code, Jira, Bitbucket, Redmine, FindBugs, Checkstyle, PMD và Mantis, Trac |
Probo.CI | Node.js | Apache 2.0 | Không | Không | Node.js | Email, HipChat, Slack (all coming soon) | Không | GitHub, Bitbucket, Stash |
QuickBuild | Cross-platform | Độc quyền | MSBuild, NAnt, Visual Studio | Ant, Maven 1, Maven 2 | Rake, shell script, command-line | Email, XMPP, RSS, Google Talk, Remote API | Eclipse, IntelliJ IDEA, Visual Studio | Jira |
Semaphore | Hosted | Độc quyền | Không biết | Maven 3 | Ruby, Java, Python, Node.js, PHP, Clojure, Rake, command-line | Email, Campfire, HipChat, Slack, Flowdock, Webhooks, Remote API | Không biết | GitHub, Bitbucket, Heroku, Code Climate, Cloud 66 |
Shippable Lưu trữ 2017-03-19 tại Wayback Machine | Hosted | Độc quyền | Không | Ant, Maven, Gradle | Ruby, Python, Node.js, Java, Scala, PHP, Go | Email, Slack, HipChat, Webhooks, irc, Campfire | Không | GitHub, Bitbucket, AWS, Kubernetes, Azure, Heroku |
Snap CI Lưu trữ 2016-12-14 tại Wayback Machine | Hosted | Độc quyền | Không | Ant, Maven, Gradle, Android | C, C++, Clojure, Erlang, Go, Groovy, Haskell, Java, Node.js, Perl, PHP, Python, Ruby, Scala | Email, Campfire, HipChat, Webhook | Không | GitHub, Heroku, AWS |
Solano CI Lưu trữ 2016-03-14 tại Wayback Machine | Hosted, cross-platform, private cloud | Độc quyền | Không | Ant, Maven, Gradle, Android | C, C++, Clojure, Go, Java, Javascript, Node.js, PHP, Python, R, Ruby, Scala, command-line | Email, Campfire, HipChat, Flowdock, Slack, Webhook, CCMenu | Không | GitHub, GitHub Enterprise, Bitbucket, Heroku, AWS, Azure, Git, Mercurial, Docker |
Strider | Node.js | BSD | Không | Không | C, C++, Clojure, Erlang, Go, Groovy, Haskell, Java, Node.js, Perl, PHP, Python, Ruby, Scala | Email, Slack, Web, Webhook | Không | GitHub, Bitbucket, Heroku, GitHub Enterprise, Git |
Testributor Lưu trữ 2021-05-14 tại Wayback Machine | Hosted | MIT | Command-line | Command-line | Command-line | Email, Slack, Web, Webhook | Không | GitHub, Bitbucket, Git |
Travis CI | Hosted | MIT | Không | Ant, Maven, Gradle[16] | C, C++, Clojure, Elixir, Erlang, Go, Groovy, Haskell, Java, Node.js, Perl, PHP, Python, Ruby, Rust, Scala, Smalltalk | Email, Campfire, HipChat, IRC, Slack, Catlight, CCMenu, CCTray | Không | GitHub, Heroku |
TeamCity | Web container | Độc quyền | MSBuild, NAnt, Visual Studio, Duplicates finder for.NET | Ant, Maven 2-3, Gradle, IntelliJ IDEA.ipr based and Inspections and Duplicates finder | Rake, FxCop, command-line | Email, XMPP, RSS, IDE, SysTray | Eclipse, Visual Studio, IntelliJ IDEA, RubyMine, PyCharm, PhpStorm, WebStorm | Jetbrains Youtrack, Jira, Bugzilla, FishEye, FindBugs, PMD, dotCover, NCover |
Team Foundation Server, Visual Studio Team Services (VSTS) | Cross-platform | Proprietary, MIT | MSBuild, Visual Studio | Ant, Maven, Gradle, Android | C, C++, Go, Groovy, Java, Node.js, Perl, PHP, Python, Ruby | Email, SOAP, Catlight | Visual Studio, Eclipse, IntelliJ IDEA, Android Studio, Visual Studio Code | GitHub, Jenkins, Slack, Hipchat, FindBugs, Checkstyle, PMD |
Vexor | Hosted | Độc quyền | Không | Không biết | Ruby, Clojure, Scala, Python, Node.js, Go, Rust, Haskell | Email, HipChat, Slack | Không biết | GitHub, Bitbucket, Gitlab |
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.