{"id":251,"date":"2016-01-25T15:44:53","date_gmt":"2016-01-25T14:44:53","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=251"},"modified":"2023-06-09T14:14:51","modified_gmt":"2023-06-09T12:14:51","slug":"continuous-integration-marina-kettschik","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/01\/25\/continuous-integration-marina-kettschik\/","title":{"rendered":"Continuous Integration (CI)"},"content":{"rendered":"<p><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/06_CI_Rollercoaster.jpg\" rel=\"attachment wp-att-253\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"253\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/01\/25\/continuous-integration-marina-kettschik\/06_ci_rollercoaster\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/06_CI_Rollercoaster.jpg\" data-orig-size=\"640,412\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"continous_integration_roller_coaster\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/06_CI_Rollercoaster.jpg\" class=\"wp-image-253 size-full alignleft\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/06_CI_Rollercoaster.jpg\" alt=\"Roller Coaster - Looping\" width=\"640\" height=\"412\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/06_CI_Rollercoaster.jpg 640w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/06_CI_Rollercoaster-300x193.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Large software projects require a group of programmers. Everybody is focused on their own coding part and it may take quite a while to complete it. But what happens when the individual pieces are merged? <!--more-->The integration of the puzzle pieces in a system can be very time consuming and complex. The nightmare scenario would be, if the integration takes months. You may think I am kidding but that is exactly what happened in some companies that were not using CI, in the past. CI is a software development practice that requires developers to merge their work frequently into a shared repository.<\/span><br \/>\n<span style=\"font-weight: 400;\">The problem of integration errors is already known, since people started developing software. But the first article about Continuous Integration &nbsp;was written by <a href=\"http:\/\/www.martinfowler.com\/articles\/continuousIntegration.html\" target=\"_blank\" rel=\"noopener\">Martin Fowler<\/a> in 2000.<\/span><\/p>\n<p>&nbsp;<\/p>\n<blockquote><p><em>How does a CI process look like?<\/em><\/p>\n<p>&nbsp;<\/p><\/blockquote>\n<h2><b>CI-System<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">First of all there is a central code base. Every programmer continues developing their code and everyone is required to integrate their work into the code base frequently, at least daily. Make sure that every task is small and self-contained, this will simplify the integration.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The codebase is housed in a Version Control System (VCS). It may be a centralized system like Subversion or a distributed system like Git. A Version Control System manages changes. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">All changes are assigned to a user, identified by a reversion number and finally stored in the system.Version Control System also allows you to restore any previous version of your code. Once a developer integrates their work into VCS, the CI server will be informed. By the way, the integration of the source code is called commit.<\/span><\/p>\n<figure id=\"attachment_266\" aria-describedby=\"caption-attachment-266\" style=\"width: 640px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci-system-1-1.jpg\" rel=\"attachment wp-att-266\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"266\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/01\/25\/continuous-integration-marina-kettschik\/continuous-integration-system-by-marina-kettschik\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci-system-1-1.jpg\" data-orig-size=\"640,322\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Marina Kettschik&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1453736232&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"ci-system\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;continuous integration system&lt;\/p&gt;\n\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci-system-1-1.jpg\" class=\"wp-image-266 size-full\" title=\"continuous integration system (made by Marina Kettschik)\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci-system-1-1.jpg\" alt=\"continuous integration system by Marina Kettschik\" width=\"640\" height=\"322\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci-system-1-1.jpg 640w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci-system-1-1-300x151.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><figcaption id=\"caption-attachment-266\" class=\"wp-caption-text\">continuous integration system<\/figcaption><\/figure>\n<p><span style=\"font-weight: 400;\">The CI server fetches the current software version and starts the build process (build automation). In addition to the code compilation there are automated unit tests (test automation). Nevertheless, a code review makes only sense if its result, particularly its failure, will be announced. For this reason, the CI server creates a report of the build and tests.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The CI system is a part of the development process and the team. To ensure this, the access must be simple. Not only the development teams interact with the system<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\"> The CI system informs their colleagues automatically about the results of their work. In that case, it allows the developer to detect integration errors and fix them as quickly as possible.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><b>CI-Server<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">The CI server is the main part of the system. It observes the changes of the Version Control System. It initializes the builds, tests and notifies the developer about the result via e-mail, for example. For this reason, the choice of CI server should be considered carefully. There is a wide selection of CI servers and each one has its own disadvantages and advantages. Some are for a given platform, like the Team Foundation Server for Windows. For people with experience and a preference to work with XML files, CruiseControl from ThoughtWorks Studios could be a good choice. Martin Fowler has been involved in the development of CruiseControl and used it himself. Another choice could be Jenkins. It is for free, based on Java, like CruiseControl, also open source, has a great popularity and is especially suitable for beginners.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Finally, various aspects can be important in the decision, besides the platform. One aspect can be to choose an open source software or a proprietary software. Another question would be, if you host it on your own server or use Software as a Service (SaaS) and let other instances host it for you. Or if the CI server supports Continuous Delivery (automated release creation) or plug-ins for special requests.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><b>Summary<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Continuous Integration is an important part of the current software development. The question is, if the setup is worth it even for small projects. Taking a closer look,<\/span> <span style=\"font-weight: 400;\">you will notice that the use of a version control system is already a part of development. Even without using a CI server the workflow of a developer is similar to it. The developer finishes their work and fetches the current source code from VCS. They build and test the project with their functions. With a faultless result, the source code will be commited to the VCS. With large projects, a CI server offers you several advantages. The process is automated, the error rate is minimized and the quality of the product increases, for example.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Large software projects require a group of programmers. Everybody is focused on their own coding part and it may take quite a while to complete it. But what happens when the individual pieces are merged?<\/p>\n","protected":false},"author":15,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[659,650,651,2],"tags":[],"ppma_author":[690],"class_list":["post-251","post","type-post","status-publish","format-standard","hentry","category-devops","category-scalable-systems","category-system-designs","category-system-engineering"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":5163,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/02\/24\/migrating-to-kubernetes-part-1-introduction\/","url_meta":{"origin":251,"position":0},"title":"Migrating to Kubernetes Part 1 &#8211; Introduction","author":"Can Kattwinkel","date":"24. February 2019","format":false,"excerpt":"Written by: Pirmin Gersbacher, Can Kattwinkel, Mario Sallat Introduction The great challenge of collaborative working in a software developer team is to enable a high level of developer activity while ensuring a high product quality. In order to achieve this often CI\/CD processes are utilized. Talking about modern development techniques\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/pexels-photo-379964.jpeg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/pexels-photo-379964.jpeg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/pexels-photo-379964.jpeg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/pexels-photo-379964.jpeg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/02\/pexels-photo-379964.jpeg?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":770,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/06\/08\/the-new-ci-world-wrapping-it-up-with-git-2\/","url_meta":{"origin":251,"position":1},"title":"The new CI world, Wrapping it up with Git","author":"Mario Erazo","date":"8. June 2018","format":false,"excerpt":"Welcome to part 6 - Man we are on a writing flow! - of our blog posts series. After all the coding done in the last parts, let\u2019s take a more laid back look at CI and Git. Nowadays many agile teams work with Git and Feature Branches. A developer\u2026","rel":"","context":"In &quot;DevOps&quot;","block_context":{"text":"DevOps","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/devops\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":804,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/07\/12\/the-new-ci-world-wrapping-it-up-with-git\/","url_meta":{"origin":251,"position":2},"title":"The new CI world, Wrapping it up with Git","author":"Mario Erazo","date":"12. July 2016","format":false,"excerpt":"Nowadays many agile teams work with Git and Feature Branches. A developer works with on a feature and at the end he merges the new feature\u2019s code into the project. However, this concept goes against the principles of CI. Let's take a closer look at this practice and find out\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/Screen-Shot-2016-07-12-at-3.54.55-PM.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":3314,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/03\/28\/continuous-integration-deployment-for-a-cross-platform-application-part-1\/","url_meta":{"origin":251,"position":3},"title":"Continuous Integration &#038; Deployment for a Cross-Platform Application &#8211; Part 1","author":"Tobias Eberle, Marco Maisel, Tobias Staib, Mario Walz","date":"28. March 2018","format":false,"excerpt":"When we started the project \"Flora CI\" for the lecture \"System Engineering\", we planned to deal with Continuous Integration. As an important aspect of software engineering all of us have previously been involved in projects where code of developers had to be merged and builds had to be automated somehow.\u2026","rel":"","context":"In &quot;DevOps&quot;","block_context":{"text":"DevOps","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/devops\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/flora-app.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/flora-app.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/flora-app.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/flora-app.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/flora-app.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/flora-app.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":3496,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/03\/30\/ci-cd-with-gitlab-ci-for-a-web-application-part-1\/","url_meta":{"origin":251,"position":4},"title":"CI\/CD with GitLab CI for a web application &#8211; Part 1","author":"Nina Schaaf","date":"30. March 2018","format":false,"excerpt":"Introduction When it comes to software development, chances are high that you're not doing this on your own. The main reason for this is often that implementing components like UI, frontend, backend, servers and more is just too much to handle for a single person leading to a slow development\u2026","rel":"","context":"In &quot;DevOps&quot;","block_context":{"text":"DevOps","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/devops\/"},"img":{"alt_text":"Shaky architecture","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/01_shaky-architecture-300x106.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":3357,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/03\/28\/continuous-integration-move-fast-and-dont-break-things\/","url_meta":{"origin":251,"position":5},"title":"Continuous Integration \u2013 Move fast and don\u2019t break things","author":"Alexander Wallrabenstein","date":"28. March 2018","format":false,"excerpt":"Continuous Integration is an increasingly popular topic in modern software development. Across many industries the companies acknowledging the importance of IT and delivering value to their customers through great software prevail against their competitors. Many reports indicate that Continuous Integration is one of the major contributing factors to developing high\u2026","rel":"","context":"In &quot;DevOps&quot;","block_context":{"text":"DevOps","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/devops\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/CIPipeline.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/CIPipeline.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/CIPipeline.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":690,"user_id":15,"is_guest":0,"slug":"marina","display_name":"Marina Kettschik","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f0508d87a37939669217314a96a56e09796290962b5ca8c1d1a910b7d401e6cc?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=251"}],"version-history":[{"count":14,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/251\/revisions"}],"predecessor-version":[{"id":24649,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/251\/revisions\/24649"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=251"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}