{"id":79,"date":"2015-12-29T13:29:12","date_gmt":"2015-12-29T12:29:12","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=79"},"modified":"2023-06-09T14:14:51","modified_gmt":"2023-06-09T12:14:51","slug":"sesame-deployment-street-continuous-integration-with-jenkins-tutorial-part-1","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2015\/12\/29\/sesame-deployment-street-continuous-integration-with-jenkins-tutorial-part-1\/","title":{"rendered":"Jenkbird \u2013 Continuous Integration with Jenkins Tutorial \u2013 Part 1"},"content":{"rendered":"<blockquote>\n<div class=\"copy-paste-block\">\n<div class=\"copy-paste-block\">Bad days happen to everyone, but when one happens to you, just keep doing your best and never let a bad day make you feel bad about yourself.\u201d<\/div>\n<div class=\"copy-paste-block\">\u2014 <em>Big Bird about&nbsp;a day with deployment problems<\/em><\/div>\n<\/div>\n<\/blockquote>\n<p><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2015\/12\/29\/sesame-deployment-street-continuous-integration-with-jenkins-tutorial-part-1\/\" rel=\"attachment wp-att-106\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"106\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2015\/12\/29\/sesame-deployment-street-continuous-integration-with-jenkins-tutorial-part-1\/yhfrwka16hgjoddtrwfavpwfbhza72mwv9qwzj-tvda\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Yhfrwka16hgJOdDTrwFaVPWfBhzA72MWv9qwzj-tvdA.png\" data-orig-size=\"927,1280\" 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=\"Jenkbird #swaggeronazillian #amswaggensein #kingofcomedy\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Yhfrwka16hgJOdDTrwFaVPWfBhzA72MWv9qwzj-tvdA-742x1024.png\" class=\"alignleft wp-image-106\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Yhfrwka16hgJOdDTrwFaVPWfBhzA72MWv9qwzj-tvdA-217x300.png\" alt=\"Jenkbird\" width=\"127\" height=\"176\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Yhfrwka16hgJOdDTrwFaVPWfBhzA72MWv9qwzj-tvdA-217x300.png 217w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Yhfrwka16hgJOdDTrwFaVPWfBhzA72MWv9qwzj-tvdA-768x1060.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Yhfrwka16hgJOdDTrwFaVPWfBhzA72MWv9qwzj-tvdA-742x1024.png 742w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Yhfrwka16hgJOdDTrwFaVPWfBhzA72MWv9qwzj-tvdA.png 927w\" sizes=\"auto, (max-width: 127px) 100vw, 127px\" \/><\/a><\/p>\n<p>&#8220;Continuous Integration&#8221; (CI) and &#8220;Continuous Delivery&#8221; (CD) are topics every modern software developer should have heard of or at least is pretending to be. But working on student projects you rarely take time to set up a clean environment to integrate, test and deploy your code or trigger any of those tasks automatically. Sometimes you don&#8217;t even try to run your code on a real server. Or you might try to deploy your final project at&nbsp;23:59 o&#8217;clock before the submission&#8230; GOD BLESS there are automation tools for that nowadays!<\/p>\n<p><!--more-->Normally you just finish your projects barely in time and under the influence of lots of coffee and ultimately don&#8217;t care whether the fancy new web application you wrote would survive outside of your local machine (Hint: It probably won&#8217;t). Therefore we have decided to take a closer&nbsp;look into said topics in the context of the module &#8220;System Engineering and Management&#8221;. Our goal is to set up a CD for a project of our choice and share the insights we make in an understandable and enjoyable way \u2013 enjoyable like the Sesame Street!<\/p>\n<p>We hope to give a tutorial to students with a similar technical background like ourselves on what it means to implement CI&nbsp;for a project. Also we would like to evaluate whether it is necessary or worthwhile to consider the whole process for small student-like applications and projects. Our main goal is to give you a deeper knowledge on the topic and we hope that you feel comfortable enough afterwards with CI and Jenkins to list it as topics you are familiar with in your curriculum vitae. We will document every mistake we made to ensure that you won&#8217;t run into the same errors as we did &#8211; and we are sure, that there will be a lot when working with CI and CD for the first time.<\/p>\n<p>Because of it&#8217;s wide popularity in the industry at the moment, we are going to set up <a href=\"https:\/\/jenkins-ci.org\/\">Jenkins<\/a> (although there are other solutions like <a href=\"https:\/\/magnum-ci.com\/\">Magnum CI<\/a>, which probably has the coolest logo out there). Jenkins is a common tool for CD: you can basically automate everything with it and deploying becomes as easy as clicking a button. Furthermore we are using <a href=\"https:\/\/aws.amazon.com\/\">Amazon Web Services<\/a>&nbsp;(AWS) for hosting Jenkins, because it has free solutions and is easy-to-use.<\/p>\n<h1>Setting up Jenkins on&nbsp;AWS<\/h1>\n<p>In this first blog post we are going to guide you through the necessary steps to get a Jenkins instance up and running on your Amazon Web Services machine.<\/p>\n<p>First, head over to AWS and get yourself a shiny new account, in case you don&#8217;t own one yet. Amazon will ask for you credit card number. If that&#8217;s fine for you, go on, if not, there are other alternatives like a <a href=\"http:\/\/www.ibm.com\/cloud-computing\/bluemix\/\">IBM Bluemix<\/a> or <a href=\"https:\/\/azure.microsoft.com\/de-de\/\">Microsoft Azure<\/a>&nbsp;etc. The smallest available machine on AWS, which is still free, is the T2.Mikro.<\/p>\n<p>After you created the instance with your SSH Key, it is time to visit your new machine. You can just ssh into the host with the given url and take a look around.<\/p>\n<p><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Connect-to-instance-AWS.png\" rel=\"attachment wp-att-114\"><code class=\"\" data-line=\"\">ssh -i &lt;path\/to\/key.rsa&gt; root@&lt;ip adress&gt;<\/code><\/a><\/p>\n<p><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Connect-to-instance-AWS.png\" rel=\"attachment wp-att-114\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"114\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2015\/12\/29\/sesame-deployment-street-continuous-integration-with-jenkins-tutorial-part-1\/connect-to-instance-aws\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Connect-to-instance-AWS.png\" data-orig-size=\"1280,800\" 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=\"Connect to instance AWS\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Connect-to-instance-AWS-1024x640.png\" class=\"alignnone wp-image-114\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Connect-to-instance-AWS-300x188.png\" alt=\"Connect to instance AWS\" width=\"1047\" height=\"656\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Connect-to-instance-AWS-300x188.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Connect-to-instance-AWS-768x480.png 768w\" sizes=\"auto, (max-width: 1047px) 100vw, 1047px\" \/><\/a><\/p>\n<p>By default you will be logged in as ec2-user. We are going to do some actions, which need root access. To login as root user simply type<\/p>\n<p><code class=\"\" data-line=\"\">sudo su -<\/code>.<\/p>\n<p>After you got root-access, update all the available software packages on the server via<\/p>\n<p><code class=\"\" data-line=\"\">yum update<\/code>.<\/p>\n<p>This is not necessary but recommended due to the fact, that we don\u00b4t know which preferences Amazon uses to&nbsp;launch our instance. You should see some magic happening in the terminal window. Now it&#8217;s time to fetch the current available Jenkins version via:<\/p>\n<p><code class=\"\" data-line=\"\">wget -O \/etc\/yum.repos.d\/jenkins.repo http:\/\/pkg.jenkins-ci.org\/redhat-stable\/jenkins.repo<\/code><\/p>\n<p>After you also got yourself a nice repository key via<\/p>\n<p><code class=\"\" data-line=\"\">rpm --import http:\/\/pkg.jenkins-ci.org\/redhat-stable\/jenkins-ci.org.key<\/code><\/p>\n<p>, you are ready to install. So don\u00b4t hesitate and run<\/p>\n<p><code class=\"\" data-line=\"\">yum install jenkins<\/code> .<\/p>\n<p>Everything worked? Then we are ready to start our newly installed service via<\/p>\n<p><code class=\"\" data-line=\"\">service jenkins start<\/code>.<\/p>\n<p>This should work fine, but what if we want to restart our instance? To ensure that Jenkins starts with rebooting our instance type<\/p>\n<p><code class=\"\" data-line=\"\">chkconfig jenkins on<\/code>.<\/p>\n<p>Enough messing around with the terminal. Let\u00b4s go back to our AWS interface.<\/p>\n<p>Jenkins is already running on port 8080. Unfortunately, on AWS you don\u00b4t have access to this port. What we need to do next is creating a new AWS security rule for inbound traffic. To do so, choose your instance on the AWS panel and have a quick look at the properties at the bottom. You should see something like <strong>Security groups &#8211; launch-wizard-1. view rules<\/strong>. Click on&nbsp;<strong>launch-wizard-1<\/strong>. Next <strong>choose inbound<\/strong> on the very bottom and <strong>edit<\/strong>. Your new rule to insert should look similar like this:<a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Edit-inbound-rules-AWS.png\" rel=\"attachment wp-att-116\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"116\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2015\/12\/29\/sesame-deployment-street-continuous-integration-with-jenkins-tutorial-part-1\/edit-inbound-rules-aws\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Edit-inbound-rules-AWS.png\" data-orig-size=\"1280,800\" 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=\"Edit inbound rules AWS\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Edit-inbound-rules-AWS-1024x640.png\" class=\"alignnone wp-image-116\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Edit-inbound-rules-AWS-300x188.png\" alt=\"Edit inbound rules AWS\" width=\"865\" height=\"542\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Edit-inbound-rules-AWS-300x188.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Edit-inbound-rules-AWS-768x480.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Edit-inbound-rules-AWS-1024x640.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/Edit-inbound-rules-AWS.png 1280w\" sizes=\"auto, (max-width: 865px) 100vw, 865px\" \/><\/a><\/p>\n<p>For a better overview:<\/p>\n<table>\n<thead>\n<tr>\n<th>Type<\/th>\n<th>Protocol<\/th>\n<th>Port Range<\/th>\n<th>Source<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Custom TCP Rule<\/td>\n<td>TCP<\/td>\n<td>8080<\/td>\n<td>0.0.0.0\/0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Now the only thing left to do is to open a browser and type the following URL:<\/p>\n<p><code class=\"\" data-line=\"\">http:\/\/&lt;PUBLIC-IP&gt;:8080<\/code>.<\/p>\n<p>If you don\u00b4t know your public IP don\u00b4t despair, you can find it in your instance properties, too.<\/p>\n<h1>Securing Jenkins<\/h1>\n<p>Although you are the proud owner of a Jenkins instance now, we are not entirely done yet. Right now every person in this dark place called the internet is able to reach and configure your Jenkins, as it doesn&#8217;t apply any security restrictions. Therefore add a new user to Jenkins with a login name and a password. A good name might be Ernie or Bert. Thought of a save 64 digit password? Nice, let&#8217;s continue!<\/p>\n<p>Now we can configure the security aspects&nbsp;of our Jenkins instance. Under <strong>Manage Jenkins<\/strong> select <strong>Configure global security<\/strong>.<\/p>\n<p><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_global_security-1.png\" rel=\"attachment wp-att-108\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"108\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2015\/12\/29\/sesame-deployment-street-continuous-integration-with-jenkins-tutorial-part-1\/configure_global_security-1\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_global_security-1.png\" data-orig-size=\"1343,271\" 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=\"jenkins global security\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_global_security-1-1024x207.png\" class=\"alignnone wp-image-108\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_global_security-1-300x61.png\" alt=\"jenkins global security\" width=\"880\" height=\"179\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_global_security-1-300x61.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_global_security-1-768x155.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_global_security-1-1024x207.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_global_security-1.png 1343w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><\/a><\/p>\n<p>Below <strong>Security Realm<\/strong>&nbsp;check the box which says &#8220;<strong>Jenkins\u2019 own user database&#8221;<\/strong>, this enables&nbsp;us to restrict the right of different users.<\/p>\n<p><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_security.png\" rel=\"attachment wp-att-109\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"109\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2015\/12\/29\/sesame-deployment-street-continuous-integration-with-jenkins-tutorial-part-1\/configure_security\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_security.png\" data-orig-size=\"1351,579\" 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=\"jenkins configure security\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_security-1024x439.png\" class=\"alignnone wp-image-109\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_security-300x129.png\" alt=\"jenkins configure security\" width=\"984\" height=\"423\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_security-300x129.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_security-768x329.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_security-1024x439.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2015\/12\/configure_security.png 1351w\" sizes=\"auto, (max-width: 984px) 100vw, 984px\" \/><\/a><\/p>\n<p>For <strong>Authorization<\/strong>&nbsp;we chose <strong>Matrix-based security<\/strong>, this gives us full control over every single user that is registered for&nbsp;our&nbsp;Jenkins. Add Ernie (or any other name you chose) to the matrix and choose the rights that suit you the most. We assume he is our superuser, so we give him all available rights. Click <strong>Save<\/strong> and it&#8217;s done! It is very important to secure your Jenkins, so make sure no one without a valid login can mess around with your system. Also don&#8217;t worry if you <a href=\"https:\/\/wiki.jenkins-ci.org\/display\/JENKINS\/Disable+security\">lock yourself out<\/a>&nbsp;of your own system, it happens to the best (including the authors of this post).<\/p>\n<h1>What&#8217;s coming in the next episode?<\/h1>\n<h1><span style=\"font-size: 15px; font-weight: 300;\">In this part&nbsp;we set the basis for our Sesame Deployment Street. In the next blog post we will show you <\/span><strong style=\"font-size: 15px;\">how you can set up a deployment pipeline for your project<\/strong><span style=\"font-size: 15px; font-weight: 300;\">. Farewell folks, see you in the next episode!<\/span><\/h1>\n<p><em>Blogpost by Thomas Derleth (td036), J\u00f6rg Einfeldt (je051), Marc Stauffer (ms445)<\/em><\/p>\n<hr>\n<p><strong>Read more about &#8220;how you can set up a deployment pipeline for your project&#8221; in our <a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/02\/17\/jenkbird-the-art-of-deployment-tutorial-part-2\/\">tutorial part 2<\/a>!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bad days happen to everyone, but when one happens to you, just keep doing your best and never let a bad day make you feel bad about yourself.\u201d \u2014 Big Bird about&nbsp;a day with deployment problems &#8220;Continuous Integration&#8221; (CI) and &#8220;Continuous Delivery&#8221; (CD) are topics every modern software developer should have heard of or at [&hellip;]<\/p>\n","protected":false},"author":13,"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,657],"tags":[],"ppma_author":[687],"class_list":["post-79","post","type-post","status-publish","format-standard","hentry","category-devops","category-scalable-systems","category-system-designs","category-system-engineering","category-teaching-and-learning"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":538,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/04\/27\/an-emotinal-sneak-peak-into-continuous-integration\/","url_meta":{"origin":79,"position":0},"title":"A sneak peak into Continuous Integration","author":"Mario Erazo","date":"27. April 2016","format":false,"excerpt":"What does the development of a software product involves? Is there more than programmers coding at their PCs and managers telling them what they want? What is the real meaning of \u2018release\u2019? In the old age of software development, a development team would have to deal with incredible amounts of\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":"Software development concept in tag cloud","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/04\/stock-photo-25708797-software-development-concept-in-tag-cloud-1024x709.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/04\/stock-photo-25708797-software-development-concept-in-tag-cloud-1024x709.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/04\/stock-photo-25708797-software-development-concept-in-tag-cloud-1024x709.jpg?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":251,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/01\/25\/continuous-integration-marina-kettschik\/","url_meta":{"origin":79,"position":1},"title":"Continuous Integration (CI)","author":"Marina Kettschik","date":"25. January 2016","format":false,"excerpt":"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? The integration of the puzzle pieces in a system can be very time consuming and\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":"continuous integration system by Marina Kettschik","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci-system-1-1.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci-system-1-1.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/01\/ci-system-1-1.jpg?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":5163,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/02\/24\/migrating-to-kubernetes-part-1-introduction\/","url_meta":{"origin":79,"position":2},"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":1984,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2017\/03\/09\/building-an-hdm-alexa-skill-part-4\/","url_meta":{"origin":79,"position":3},"title":"Building an HdM Alexa Skill &#8211; Part 4","author":"Malte Vollmerhausen","date":"9. March 2017","format":false,"excerpt":"We present our own HdM Alexa Skill and share the experience we gained throughout this project. This time: Automating tests and deployment with Continuous Integration via Jenkins.","rel":"","context":"In &quot;Student Projects&quot;","block_context":{"text":"Student Projects","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/student-projects\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/02\/jenkins.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/02\/jenkins.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/02\/jenkins.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/02\/jenkins.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/02\/jenkins.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/02\/jenkins.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":79,"position":4},"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":3357,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/03\/28\/continuous-integration-move-fast-and-dont-break-things\/","url_meta":{"origin":79,"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":687,"user_id":13,"is_guest":0,"slug":"ms445","display_name":"Marc Stauffer","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/ae86214c945cf6367a03276de67db32676e7aca565d20c44a17baf7bb257c5fa?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\/79","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\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=79"}],"version-history":[{"count":48,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/79\/revisions"}],"predecessor-version":[{"id":24651,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/79\/revisions\/24651"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=79"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=79"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=79"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=79"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}