{"id":305,"date":"2016-02-17T11:08:44","date_gmt":"2016-02-17T10:08:44","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=305"},"modified":"2023-06-09T14:14:51","modified_gmt":"2023-06-09T12:14:51","slug":"jenkbird-the-art-of-deployment-tutorial-part-2","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/02\/17\/jenkbird-the-art-of-deployment-tutorial-part-2\/","title":{"rendered":"Jenkbird &#8211; The art of deployment &#8211; Part 2"},"content":{"rendered":"<blockquote>\n<div class=\"copy-paste-block\">\n<div class=\"copy-paste-block\">&nbsp; One stage. Two stages. THREE STAGES FOR DEPLOYMENT!<\/div>\n<div class=\"copy-paste-block\">\u2014 <em>Count von Count on his deployment pipeline<br \/>\n<\/em><\/div>\n<\/div>\n<\/blockquote>\n<p>Hi, it&#8217;s us agai<a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/count_dracula.png\" rel=\"attachment wp-att-348\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"348\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/02\/17\/jenkbird-the-art-of-deployment-tutorial-part-2\/count_dracula\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/count_dracula.png\" data-orig-size=\"600,600\" 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;0&quot;}\" data-image-title=\"count_dracula\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/count_dracula.png\" class=\"wp-image-348 alignleft\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/count_dracula-300x300.png\" alt=\"count_dracula\" width=\"214\" height=\"214\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/count_dracula-300x300.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/count_dracula-150x150.png 150w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/count_dracula.png 600w\" sizes=\"auto, (max-width: 214px) 100vw, 214px\" \/><\/a>n, the guys with the strange idea of using Sesame Street characters in a blog series about CI.&nbsp;Since we didn&#8217;t really cover the <strong>reasons, why you should use CD \/ CI<\/strong>, we want to catch up on that this time&nbsp;and therefore talk a bit about popular&nbsp;buzzwords like &#8220;Deployment Pipeline&#8221; and &#8220;Branching&#8221;. This might be especially useful, if you want to use the CI methodology for your next project but have to convince your team members of the benefits at first. This post is more abstract than the others, if you just want to get down to the Jenkins business you might skip it (although we don&#8217;t recommend it, since we put a lot of love into writing this).<\/p>\n<p><!--more--><\/p>\n<h2>Reasons for using CD or CI<\/h2>\n<p>At first we have to differentiate between CD and CI. The term <strong>Continuous Delivery<\/strong> got popular through the <a href=\"http:\/\/www.amazon.de\/Continuous-Delivery-Deployment-Automation-Addison-Wesley\/dp\/0321601912\/ref=sr_1_1?ie=UTF8&amp;qid=1452183989&amp;sr=8-1&amp;keywords=continuous+delivery\">same-titled book<\/a> by Jez Humble and David Farley&nbsp;(by the way it&#8217;s definitely worth a read). As they put it, they took the title from the famous<strong> Agile Manifesto<\/strong>, which states: \u201eOur highest priority is to satisfy the customer through early and continuous delivery of valuable software\u201c &#8211; which is practically easier said than done. CD therefore describes a methodology on how to build software in a way, that it can be released to production at any given time. It combines development phase, quality assurance and the deployment process aiming&nbsp;for an&nbsp;overall more efficient development process with increased quality. Now CI comes into play. <strong><a href=\"http:\/\/www.martinfowler.com\/\">Martin Fowler<\/a>&nbsp;<\/strong>puts it this way: &#8220;Continuous Integration is a software development practice where members of a team&nbsp;integrate their work frequently, usually each person integrates at least daily &#8211; leading to multiple integrations per day&#8221;[1]. Further he continues, that &#8220;each integration is verified by an automated build (including test) to detect integration errors as quickly as possible&#8221;.<\/p>\n<p>Following this statement, CI is part of CD. This means that a better&nbsp;level of synchronization between the development team can be achieved, leading to less challenges&nbsp;during the deployment phase. To achieve this, three requirements must be met:<br \/>\n1. Tests need to be in place,<br \/>\n2. the build should be production ready at any given time<br \/>\n3. and there should be version control.<\/p>\n<p>All this is&nbsp;realized by using a <strong>Deployment Pipeline<\/strong>, which breaks the build into different stages.<\/p>\n<p><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci_bild_blog.png\" rel=\"attachment wp-att-210\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"210\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/02\/17\/building_jobs_with_jenkins_and_github_part_3\/ci_bild_blog\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci_bild_blog.png\" data-orig-size=\"2088,626\" 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;0&quot;}\" data-image-title=\"ci_bild_blog\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci_bild_blog-1024x307.png\" class=\"alignnone size-full wp-image-210\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci_bild_blog.png\" alt=\"ci_bild_blog\" width=\"2088\" height=\"626\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci_bild_blog.png 2088w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci_bild_blog-300x90.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci_bild_blog-768x230.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci_bild_blog-1024x307.png 1024w\" sizes=\"auto, (max-width: 2088px) 100vw, 2088px\" \/><\/a><\/p>\n<p>The Deployment Pipeline represents the different stages required for quality assurance. Automated and manual tests enable improvements in quality. These tests are being executed successively for every software version. Only if all tests have been successful, the code will be deployed to production.<\/p>\n<h2>The deployment pipeline<\/h2>\n<h3>Development, Test and Production<\/h3>\n<p>For our post we would like to illustrate a common practice for different deployment environments. We are not going to implement these on a technical level, however we would like to give an exemplary approach. If you somehow become the CTO of a big company overnight, this could be useful for you. We are going to distinguish between three different stages called <strong>development<\/strong>,<strong> test <\/strong>and<strong> production<\/strong>.This setup is quite common amongst software developers, although the names might vary. Other names for the different environments may include, but are not limited to: staging, latest, deploy, preproduction or sandbox. Although there are different names for it, all environments have similar requirements.<\/p>\n<p>Usually you want an environment that&#8217;s&nbsp; intended to be unstable, in our case this stage is called <strong>development<\/strong>. This is the initial stage where the code of the different developers will be integrated and it&#8217;s perfectly fine if this environment breaks &#8211; how often do you here something like this? Nobody should feel bad if he messes up here, because the motto should be &#8220;fail early, fail fast&#8221;. We just want to integrate the code as early as possible and get rid of small mistakes and obvious flaws.<\/p>\n<p>The next stage called <strong>test<\/strong> usually involves some sort of approval. We assume that we have imaginary testers that check our application for us once a stable version is available.&nbsp;The idea behind differencing between the stages <em>development<\/em> and <em>test<\/em> is that developers like to break things, testers not so much. Our testers are not only imaginary but also very demanding and a little bit sensitive about their working environment (as testers are) so it would be advisable not to break this stage multiple times on a daily basis. So to make our testers happy and to provide them with a stable work environment we use the test stage.<\/p>\n<p>And last but not least (for real) we have the&nbsp;<strong>production&nbsp;<\/strong>environment. This stage is the real deal! We suppose at this stage people actually are using what we put there, so it would be kind of awesome if our code works and has been tested once it is deployed here. Luckily with our deployment pipeline we already removed small flaws in <em>development<\/em>&nbsp; and major bugs in<em> test<\/em>, so it should be safe to deploy our code once it has been approved by our testers. If you have read until this point (and thanks if you did!) you should now have a basic understanding of deployment pipelines.<\/p>\n<h3>Branching<\/h3>\n<p>As we&#8217;ve mentioned in the beginning, we would also like to talk about <em>branching<\/em> a little bit. If you are using <strong><a href=\"https:\/\/git-scm.com\/\">git<\/a><\/strong> you&#8217;ve probably heard of this term. Basically it is about separating your code into different enclosed parts (or branches) and merging them back together. Usually you are working on the <em>master <\/em>branch, but its also a common practice to have dedicated branches for different features, bugfixes or stable versions. This has the advantage of having a branch which represents a stable version and still be able to develop new features without breaking anything in production. Merging branches in git is as simple as running a single command in the shell. Depending on your requirements for branching, your model can become quite complex, as the image below of a popular branching strategy shows.<br \/>\n<a id=\"set-post-thumbnail\" class=\"thickbox\" title=\"Set featured image\" href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-admin\/media-upload.php?post_id=305&amp;type=image&amp;TB_iframe=1\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-266x266 aligncenter\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/git-branching-768x1018.png\" sizes=\"auto, (max-width: 201px) 100vw, 201px\" srcset=\"https:\/\/i2.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/git-branching.png?resize=773%2C1024 773w, https:\/\/i2.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/git-branching.png?w=1150 1150w\" alt=\"git-branching\" width=\"424\" height=\"561\"><\/a><em>Source: http:\/\/nvie.com\/posts\/a-successful-git-branching-model\/<\/em><\/p>\n<p>For our blog series we thought about the advantages of branching in small academic projects and we agreed that this particular strategy is overall too complex and impractical. Still the author describes a simpler branching model, which can be applied for our requirements. Imaging working with a project group of five people on an university project. The professor is very demanding and wants&nbsp; to see the course project every week to provide feedback to the group. You have been lucky with your other team members, as they are very productive and they contribute a lot to the project. Unfortunately the work they deliver is sometimes a bit rushed and the version you should present every week often breaks. You think to yourself that it would be great if you could have your team contribute in the large amount they currently do and still be able to present a somewhat stable version regularly to the professor. If this is the case, the approach of using a flexible <em>development<\/em> branch and a stable <em>master<\/em> or <em>demonstration<\/em> branch might suit you.<\/p>\n<p><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/simpler-branch-1.png\" rel=\"attachment wp-att-342\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"342\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/02\/17\/jenkbird-the-art-of-deployment-tutorial-part-2\/simpler-branch-2\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/simpler-branch-1.png\" data-orig-size=\"534,804\" 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;0&quot;}\" data-image-title=\"simpler-branch\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/simpler-branch-1.png\" class=\" wp-image-342 aligncenter\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/simpler-branch-1-199x300.png\" alt=\"simpler-branch\" width=\"240\" height=\"362\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/simpler-branch-1-199x300.png 199w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/simpler-branch-1.png 534w\" sizes=\"auto, (max-width: 240px) 100vw, 240px\" \/><\/a><em>Source: http:\/\/nvie.com\/posts\/a-successful-git-branching-model\/<\/em><\/p>\n<p>Your productive team members can still push as much as they want in the <em>development<\/em> branch and as soon as there is a stable version you can quickly merge changes into the <em>master<\/em> branch. Your team members praise you for your knowledge about branching models and the professor is pleased with the stable demo versions. Good thing you read that one blog post with the strange sesame street characters, isn&#8217;t it?<\/p>\n<h1>What&#8217;s coming in the next episode?<\/h1>\n<p>As this post was rather abstract, in the next episode we will jenk&#8217; things up and show you how to <strong>create jobs and deploy your code with Jenkins.<\/strong><\/p>\n<p><em>Blogpost by Thomas Derleth (td036), J\u00f6rg Einfeldt (je051), Marc Stauffer (ms445)<\/em><\/p>\n<hr>\n<p>&nbsp;<\/p>\n<p>Read more about &#8220;Building jobs with Jenkins and Github&#8221; in our <a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/02\/17\/building_jobs_with_jenkins_and_github_part_3\/\">part 3<\/a> of the tutorial!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; One stage. Two stages. THREE STAGES FOR DEPLOYMENT! \u2014 Count von Count on his deployment pipeline Hi, it&#8217;s us again, the guys with the strange idea of using Sesame Street characters in a blog series about CI.&nbsp;Since we didn&#8217;t really cover the reasons, why you should use CD \/ CI, we want to catch [&hellip;]<\/p>\n","protected":false},"author":11,"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":[691],"class_list":["post-305","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":3491,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/03\/31\/continuous-integration-deployment-for-a-cross-platform-application-part-2\/","url_meta":{"origin":305,"position":0},"title":"Continuous Integration &#038; Deployment for a Cross-Platform Application &#8211; Part 2","author":"Tobias Eberle, Marco Maisel, Tobias Staib, Mario Walz","date":"31. March 2018","format":false,"excerpt":"In the first part we pointed out how we set up the infrastructure for our CI system. Now we would like to explain how we build a pipeline for our cross-platform application and what features of GitLab CI we made use of. Building a Pipeline in GitLab CI Our first\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":26965,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2025\/02\/28\/wie-baut-man-eine-ci-cd-pipeline-mit-jenkins-auf\/","url_meta":{"origin":305,"position":1},"title":"Wie baut man eine CI\/CD Pipeline mit Jenkins auf?","author":"Cedric Gottschalk","date":"28. February 2025","format":false,"excerpt":"Im Rahmen der Vorlesung \"System Engineering und Management (143101a)\" haben wir es uns zum Ziel gesetzt, mehr \u00fcber CI\/CD Pipelines zu lernen und eine eigene Pipeline f\u00fcr ein kleines Projekt aufzusetzen. Wir haben uns dabei entschieden, Jenkins f\u00fcr die CI\/CD Pipeline einzusetzen und eine kleine ToDo App mit dem Framework\u2026","rel":"","context":"In &quot;System Engineering&quot;","block_context":{"text":"System Engineering","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/system-engineering\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/02\/ToDo-List-CICD-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/02\/ToDo-List-CICD-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/02\/ToDo-List-CICD-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/02\/ToDo-List-CICD-1.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/02\/ToDo-List-CICD-1.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/02\/ToDo-List-CICD-1.png?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":305,"position":2},"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":382,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/02\/21\/wrap-up-seeing-the-bigger-picture-part-5\/","url_meta":{"origin":305,"position":3},"title":"Jenkbird &#8211; Wrap up &#038; seeing the bigger picture &#8211; Part 5","author":"J\u00f6rg Einfeldt","date":"21. February 2016","format":false,"excerpt":"Kchhhhhh, Kchhhhhh, Kchhhhhhh... - Ernie on companies without CI Hello internet and welcome to the last part of our\u00a0tutorial series about\u00a0Continuous Integration, Code Deployment and Automated Testing with Jenkins. If you arrived at this post and have read all the others we are very proud of you, hope you enjoyed\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":"bert","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/02\/bert-186x300.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":5163,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/02\/24\/migrating-to-kubernetes-part-1-introduction\/","url_meta":{"origin":305,"position":4},"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":3503,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/03\/30\/ci-cd-with-gitlab-ci-for-a-web-application-part-2\/","url_meta":{"origin":305,"position":5},"title":"CI\/CD with GitLab CI for a web application &#8211; Part 2","author":"Nina Schaaf","date":"30. March 2018","format":false,"excerpt":"GitLab Our first approach was to use the existing GitLab instance of HdM for our project. For them, a shared runner was already defined on which we could run our jobs, so we were able to focus on the CI process itself. This plan worked out at first. We simply\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 Pipeline GitLab","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/pipeline-gitlab-1024x156.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\/pipeline-gitlab-1024x156.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2018\/03\/pipeline-gitlab-1024x156.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":691,"user_id":11,"is_guest":0,"slug":"je051","display_name":"J\u00f6rg Einfeldt","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a9c90222aff9d0c74c3c5634b74ead017644b533154f1f72047c3cdb73c3dbe2?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\/305","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\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=305"}],"version-history":[{"count":17,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/305\/revisions"}],"predecessor-version":[{"id":24656,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/305\/revisions\/24656"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=305"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}