{"id":756,"date":"2021-07-12T17:19:37","date_gmt":"2021-07-12T14:19:37","guid":{"rendered":"https:\/\/hygger.io\/guides\/?p=756"},"modified":"2022-01-26T17:49:09","modified_gmt":"2022-01-26T14:49:09","slug":"continuous-integration","status":"publish","type":"post","link":"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/","title":{"rendered":"\u0421ontinuous Integration"},"content":{"rendered":"<p><span data-preserver-spaces=\"true\">Becoming agile is not a simple and barrier-free path to success. Agile\u00a0<\/span><a class=\"editor-rtfLink\" href=\"https:\/\/hygger.io\/guides\/agile\/software-development\/\" target=\"_blank\" rel=\"noopener\"><span data-preserver-spaces=\"true\">software development<\/span><\/a><span data-preserver-spaces=\"true\">\u00a0teams prepare strategies, adopt required frameworks, implement proper tools, and struggle to reach a truly Agile software delivery cycle.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">Agile is not Agile without the appropriate foundation. The transition to Agile requires many initiatives that can affect the entire process if approached in the wrong way.<\/span><\/p>\n<p><a class=\"editor-rtfLink\" href=\"https:\/\/hygger.io\/guides\/agile\/scrum\/\" target=\"_blank\" rel=\"noopener\"><span data-preserver-spaces=\"true\">Scrum<\/span><\/a><span data-preserver-spaces=\"true\">\u00a0is a typical starting point for many teams. It is a way of managing the software development processes; however, these processes require more than the right method to be agile. They must be supported by reliable tools that provide continuous feedback. This is where\u00a0<\/span><strong><span data-preserver-spaces=\"true\">continuous integration (CI)<\/span><\/strong><span data-preserver-spaces=\"true\">\u00a0comes to the rescue. A CI pipeline represents automated processes that help to deliver the product with a certain flow and continuity. This article is right about it.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-21334\" src=\"https:\/\/hygger.io\/wp-content\/uploads\/2021\/07\/tools.png\" alt=\"The role of Continuous Integration in Agile\" width=\"1500\" height=\"900\" \/><\/p>\n<h3>What is Continuous Integration?<\/h3>\n<p><span data-preserver-spaces=\"true\">Continuous integration is the practice of generating and testing a codebase for every proposed change. It is often executed multiple times per day by a software development team.\u00a0<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">It allows every software developer to integrate his\/her changes into the official latest codebase version to identify integration issues early in the development process. The full test suite execution leads to wide regression protection even when developers work on isolated areas of the codebase.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">The automated tests are typically unit and integration tests. However, they may also include end-to-end tests. It is expected that the test will run quickly and will provide feedback about the validity of the proposed change.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">The practice of continuous integration nowadays falls under the broader umbrella of DevOps.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">Teams that practice continuous integration seek the following objectives:<\/span><\/p>\n<ul>\n<li><span data-preserver-spaces=\"true\">to minimize the duration and effort required by every integration episode;<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">to be able to deliver a product version suitable for release at any time.<\/span><\/li>\n<\/ul>\n<h3>Continuous integration in Agile<\/h3>\n<p>There are many important principles in Agile. However, the most relevant aspect for continuous integration is focusing on quality and quick iteration.<br \/>\nAccording to the Agile methodology, complex software projects are broken into much smaller increments. Agile actually favors delivering working software quickly. And continuous integration provides the means that ensure the quality of the software as it grows.<\/p>\n<p>Every new feature that is developed is automatically integrated into the main software codebase, and automated tests are executed against the change. Therefore, bugs are found immediately, before they can affect another code. This also enhances the importance of having tests for newly-written software.<\/p>\n<h3>Historical background<\/h3>\n<p>The concept of continuous integration has been known since 1993. It was predating what will later be known as Agile processes. For example, it contrasted with scheduled integration and helped explain why automated testing is an enabler for continuous integration.<\/p>\n<p>In 1996, Steve McConnell described the \u201cDaily Build and Smoke Test\u201d technique that was used at Microsoft during the 1990s. Two years later, in 1998, continuous integration was listed among the key practices of XP methodology.<\/p>\n<p>The new century started with the article written by Martin Fowler. His work provided the most detailed description of the continuous integration practice.<br \/>\nIn 2001, the first continuous integration server, Cruise Control, was published under an open-source license. In the next 7 years, a large number of similar tools appeared. It actually led to an excessive focus on tools over the practice.<\/p>\n<h3>What are the signs of continuous integration use?<\/h3>\n<p><span data-preserver-spaces=\"true\">In practice, continuous integration amounts to the following:<\/span><\/p>\n<ul>\n<li><span data-preserver-spaces=\"true\">A version control tool usage (Git, CVS, SVN, etc.).<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">An automated process of build and product release.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Unit and acceptance tests are run every time any change is published to version control.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Alerting teams about a broken build in case of even a single test failure allows the team to reach a stable releasable baseline.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">A continuous integration server usage (optionally). It automates the process of integration, testing, and reporting on test results.<\/span><\/li>\n<\/ul>\n<h3>What are the key activities of continuous integration?<\/h3>\n<p><span data-preserver-spaces=\"true\">There are 4 activities associated with continuous integration that the\u00a0<\/span><a class=\"editor-rtfLink\" href=\"https:\/\/hygger.io\/guides\/agile\/agile-at-scale\/safe\/\" target=\"_blank\" rel=\"noopener\"><span data-preserver-spaces=\"true\">Scaled Agile Framework<\/span><\/a><span data-preserver-spaces=\"true\">\u00a0describes:<\/span><\/p>\n<ul>\n<li><span data-preserver-spaces=\"true\">Develop: practices that serve for implementing stories and committing the code and components to version control.\u00a0<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Build: practices aimed to generate deployable binaries as well as merge development branches into the trunk.\u00a0<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Test end-to-end: practices needed to validate the solution.\u00a0<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Stage: practices for hosting and validating the solution in a staging environment before production.<\/span><\/li>\n<\/ul>\n<h3>What are the common pitfalls?<\/h3>\n<p>It is worth mentioning once again that the continuous integration practice should not be confused with the tools that assist it (CI servers).<\/p>\n<p>Continuous integration is about a matter of attitude rather than tools. It relies on various types of tools: tools for automating build processes, tools for testing, and tools for version control. CI aims to lessen the pain of integration by increasing its frequency, so all the effort related to producing intermediate releases are candidates for inclusion in the team\u2019s continuous integration process.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-21335\" src=\"https:\/\/hygger.io\/wp-content\/uploads\/2021\/07\/12.png\" alt=\"Benefits of CI\" width=\"1500\" height=\"900\" \/><\/p>\n<h2>The Benefits of Continuous Integration<\/h2>\n<ul>\n<li><span data-preserver-spaces=\"true\">Smaller code changes. Continuous integration allows the integration of small pieces of code at one time. These code changes are simpler to handle than huge chunks of code.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Fault Isolations. Limiting the scope of problems reduces damage potential and makes systems easier to maintain.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Faster mean time to resolution. It measures the maintainability of repairable features and establishes the average time to repair a broken feature. This helps to \u200btrack the amount of time spent to recover from a failure.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Smaller backlog. CI assists to reduce the number of non-critical defects in a backlog. These defects can be easily detected before production and fixed before being released to end-users.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Faster release rate. Failures are detected faster, therefore they can be repaired faster. It will lead to increased release rates.\u00a0<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">More test reliability. Thanks to continuous integration, test reliability improves due to the bite size and changes introduced to the system. This allows more accurate positive and negative tests to be conducted.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Reduced costs. Automation in the CI pipeline reduces the number of errors in many repetitive steps of continuous integration. This also frees developer time that could be spent on product development.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Increased team transparency. Continuous integration assists in getting continuous feedback from customers and team members that boosts transparency and encourages responsible accountability.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Customer satisfaction. CI benefits also include an organization&#8217;s scope. Customers are the key users of your product and everything they say should be taken into high consideration. Adding new features and changes into your CI pipeline based on the way your clients use the product will help to retain current users and attract new ones.<\/span><\/li>\n<\/ul>\n<h2>How to Develop a Culture of CI<\/h2>\n<p><span data-preserver-spaces=\"true\">Constantly integrating complex systems seems time-consuming. Here are some essential tips on how to create a successful continuous integration culture:<\/span><\/p>\n<ul>\n<li><span data-preserver-spaces=\"true\">Integrate more frequently. The more often your team integrates, the quicker it finds problems.\u00a0<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Make the results of integration visible. It is better for everyone to know when and why the integration process breaks. When it\u2019s fixed, new tests should be added to detect the problem earlier.\u00a0<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Fix failed integrations first of all. To build the right sense of importance and urgency needed to fix integration problems, teams often use flashing lights to draw attention to a broken build and set visible indicators that display the percentage of the time the system remains broken.\u00a0<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Set common cadence. When all teams move at the same consistent rhythm, integration points look more accessible.\u00a0<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Develop the proper infrastructure. Successful CI depends on the availability of test and staging environments. Nowadays Agile leaders make the investments necessary to increase velocity for the marathon ahead.<\/span><\/li>\n<li><span data-preserver-spaces=\"true\">Use supportive engineering practices. CI will be easier if the system is designed with those concerns in mind.<\/span><\/li>\n<\/ul>\n<h2>CI in Agile Development: Ways to Implement<\/h2>\n<p>Agile and continuous integration has evolved over the years. Advanced practices have been developed, however, you often may find software teams that implement CI in a custom way that suits their delivery environment best.<\/p>\n<p>Most modern solutions can include automatic infrastructure provisioning, provide customizable interfaces for collaboration, send notifications for broken builds, and report on test coverage. Let&#8217;s see some examples.<\/p>\n<h2>Examples of how CI can be implemented<\/h2>\n<h3>GitHub Actions<\/h3>\n<p>This feature represents the larger GitHub platform with the aim of maintaining a company&#8217;s codebase and deploying software artifacts. GitHub Actions perform workflows in accordance with events and triggers and have access to numerous codebase versions. It allows the building and testing of different versions of the codebase simultaneously. Additionally, the deep integration with GitHub simplifies the development experience.<\/p>\n<h3>Jenkins<\/h3>\n<p>Jenkins applies the concept of pipelines to describe the automated process of creating software artifacts and deploying them to production (optionally). CI pipelines are defined in a Jenkinsfile. This is a text file that defines build \u201cstages\u201d and is checked into source control. Every continuous integration build is performed on the server. It posts results to a self-hosted webpage that contains other pages.<\/p>\n<h3>CircleCI<\/h3>\n<p>This hosted service for continuous integration servers builds and optionally deploys the codebase on-demand and through asynchronous triggers. It can integrate with your source code provider and respond to code changes in the repository by automatically creating and testing it. CircleCI supports composing and executing containerized tasks.<\/p>\n<h4>Conclusion<\/h4>\n<p>Agile movements promote rapid iteration and automated procedures throughout the SDLC. Continuous integration supports that mission by ensuring software quality and rapidly discovering cross-functional issues.<\/p>\n<p>Now modern CI pipelines can include automated end-to-end tests to verify real end-user experiences. These tests require dynamic platforms to deliver on-demand comprehensive testing. Continuous Integration is really advantageous to Agile project teams if the required tools are put in place for automating the build process.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Becoming agile is not a simple and barrier-free path to success. Agile\u00a0software development\u00a0teams prepare strategies, adopt required frameworks, implement proper tools, and struggle to reach a truly Agile software delivery cycle. Agile is not Agile without the appropriate foundation. The transition to Agile requires many initiatives that can affect the entire process if approached in [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":342,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"class_list":["post-756","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<meta name=\"description\" content=\"Learn about Continuous Integration and the promise of Agile transformation.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What is \u0421ontinuous Integration? - Hygger.io Guides\" \/>\n<meta property=\"og:description\" content=\"Learn about Continuous Integration and the promise of Agile transformation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/\" \/>\n<meta property=\"og:site_name\" content=\"Hygger.io Guides\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-12T14:19:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-26T14:49:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hygger.io\/guides\/wp-content\/uploads\/2021\/04\/agile.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"8 minutes\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/hygger.io\/guides\/#website\",\"url\":\"https:\/\/hygger.io\/guides\/\",\"name\":\"Hygger.io Guides\",\"description\":\"Hygger: Project Management Software &amp; Tools for Companies\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/hygger.io\/guides\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/hygger.io\/guides\/wp-content\/uploads\/2021\/04\/agile.png\",\"contentUrl\":\"https:\/\/hygger.io\/guides\/wp-content\/uploads\/2021\/04\/agile.png\",\"width\":1400,\"height\":300,\"caption\":\"Agile\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/#webpage\",\"url\":\"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/\",\"name\":\"What is \\u0421ontinuous Integration? - Hygger.io Guides\",\"isPartOf\":{\"@id\":\"https:\/\/hygger.io\/guides\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/#primaryimage\"},\"datePublished\":\"2021-07-12T14:19:37+00:00\",\"dateModified\":\"2022-01-26T14:49:09+00:00\",\"author\":{\"@id\":\"https:\/\/hygger.io\/guides\/#\/schema\/person\/cab80745946cdf5feea0cee70ab6cffc\"},\"description\":\"Learn about Continuous Integration and the promise of Agile transformation.\",\"breadcrumb\":{\"@id\":\"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/hygger.io\/guides\/\",\"url\":\"https:\/\/hygger.io\/guides\/\",\"name\":\"\\u0413\\u043b\\u0430\\u0432\\u043d\\u0430\\u044f \\u0441\\u0442\\u0440\\u0430\\u043d\\u0438\\u0446\\u0430\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@id\":\"https:\/\/hygger.io\/guides\/agile\/software-development\/continuous-integration\/#webpage\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/hygger.io\/guides\/#\/schema\/person\/cab80745946cdf5feea0cee70ab6cffc\",\"name\":\"Pavel Kukhnavets\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/hygger.io\/guides\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1c304a131d7d560805a98b095abf6816b67434834ab4109340b1e6dfa4061a1b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1c304a131d7d560805a98b095abf6816b67434834ab4109340b1e6dfa4061a1b?s=96&d=mm&r=g\",\"caption\":\"Pavel Kukhnavets\"},\"description\":\"Pavel is a Content Marketing Manager at Hygger.io &amp; Welldoneby.com, a project management tool loved both by tech and non-tech people. Pavel writes about the world of Agile project management, covering such topics as popular methodologies, frameworks, techniques, innovative tools, and much more that affect the overall efficiency and productivity of product teams.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/hygger.io\/guides\/wp-json\/wp\/v2\/posts\/756","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hygger.io\/guides\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hygger.io\/guides\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hygger.io\/guides\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/hygger.io\/guides\/wp-json\/wp\/v2\/comments?post=756"}],"version-history":[{"count":4,"href":"https:\/\/hygger.io\/guides\/wp-json\/wp\/v2\/posts\/756\/revisions"}],"predecessor-version":[{"id":1145,"href":"https:\/\/hygger.io\/guides\/wp-json\/wp\/v2\/posts\/756\/revisions\/1145"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hygger.io\/guides\/wp-json\/wp\/v2\/media\/342"}],"wp:attachment":[{"href":"https:\/\/hygger.io\/guides\/wp-json\/wp\/v2\/media?parent=756"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hygger.io\/guides\/wp-json\/wp\/v2\/categories?post=756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}