{"id":73,"date":"2015-02-16T20:49:03","date_gmt":"2015-02-16T20:49:03","guid":{"rendered":"http:\/\/h2916922.stratoserver.net:8084\/?p=73"},"modified":"2015-02-16T20:53:16","modified_gmt":"2015-02-16T20:53:16","slug":"echte-titel-bescheiden-continuous-integration-met-jira-jenkins-en-subversion","status":"publish","type":"post","link":"https:\/\/www.ivojonker.nl\/?p=73","title":{"rendered":"Bescheiden continuous integration met Jira, Jenkins en Subversion"},"content":{"rendered":"<p>Een tijdje terug sprak ik een aantal conculega&#8217;s die nog nooit van &#8216;continuous integration&#8217; (CI) hadden gehoord. Ze hingen dan ook aan mijn lippen toen ik vertelde hoe ons (scrum)project ondersteund wordt door Jira, Jenkins en Subversion.<\/p>\n<p>Nu is onze CI uitwerking helemaal geen rocket science &#8211; en dat hoeft ook helemaal niet gezien het formaat van ons project &#8211; maar feit is dat zelfs een simpele implementatie niks hoeft te kosten (tijd\/geld) en enorm veel kan opleveren (tijd en kwaliteit).<\/p>\n<p>Aan het einde van het gesprek werd gevraagd of ik onze inrichting zou willen toelichten, welnu bij deze:<\/p>\n<p>Als eerste is het belangrijk te begrijpen dat we een aantal uitgangspunten hebben gesteld.<\/p>\n<ol>\n<li>Ontwikkelaars moeten onafhankelijk van elkaar kunnen werken,\u00a0<strong>zonder\u00a0<\/strong>elkaar in de weg te zitten.<\/li>\n<li>Ontwikkelaars moeten hun eigen werk kunnen testen en het werk van anderen &#8216;collegiaal kunnen toetsen&#8217;.<\/li>\n<li>Ontwikkelaars dienen zich geen zorgen te maken over de het bouwen, configureren en distribueren van hun software over de systemen.<\/li>\n<li>De relatie tussen code en stories\/bevindingen is zo zichtbaar mogelijk.<\/li>\n<\/ol>\n<p><strong>Versiebeheer<\/strong><\/p>\n<p>Om invulling te geven aan deze doelen zijn we begonnen met het installeren van een versiebeheersysteem. Hoewel een decentraal-versiebeheersysteem wellicht logischer zou zijn (immers doel 1), hebben we in dit geval gekozen voor <a href=\"https:\/\/subversion.apache.org\/\">Subversion<\/a>(SVN). Primair omdat ons team daar de meeste ervaring mee heeft, secundair omdat Subversion het maken van <a href=\"http:\/\/svnbook.red-bean.com\/en\/1.7\/svn.branchmerge.using.html\">branche<\/a>&#8216;s ondersteund, waarmee we precies invulling geven aan de decentrale eis.<\/p>\n<p>De toegang tot SVN\u00a0is aan de ontwikkelaars zelf. In de praktijk zien we dat sommigen het liefst werken met\u00a0de Eclipse <a href=\"http:\/\/eclipse.org\/subversive\/\">plugin<\/a>, anderen prefereren de (windows)shell-extensie &#8216;<a href=\"http:\/\/tortoisesvn.net\/\">Tortoise<\/a>-SVN&#8217;.<\/p>\n<p><strong>Issue tracking &amp; Scrum-board<\/strong><\/p>\n<p>Voor wat betreft het kunnen registreren\/managen van stories en issues hebben we <a href=\"https:\/\/www.atlassian.com\/software\/jira\">JIRA+Agile<\/a> ge\u00efnstalleerd. Jira is in de basis een issue-tracker, waarin je met wat configuratie de hele developmentflow in kwijt kan. In ons geval wilt dat zeggen dat nieuw geregistreerde issues eerst beoordeeld dienen te worden door een Informatie Analist, deze beoordeeld\/geeft prioriteit en wijst ze aan een developer toe. De developer pakt de issues op en na afronding komen ze in de &#8216;bak&#8217; om collegiaal getoetst te worden door een andere developer. Na goedkeuring worden de issues doorgezet naar de testers, die een volledige integratietest uitvoeren op hun eigen &#8216;schone&#8217; testomgeving.<\/p>\n<p>Tijdens het gehele proces heeft men de mogelijkheid tijd te registreren &amp; opmerkingen te plaatsen \u00a0over het verloop van de bevinding. Hierdoor zijn we in staat om binnen een handomdraai een release-document\/samenvatting te maken. Aanvullend zorgt de\u00a0Subversion-plugin er tevens voor dat wijzigingen in de code gekoppeld worden aan het issue\/story, waardoor we het perfecte naslagwerk hebben mochten in de toekomst vragen ontstaan.<\/p>\n<p><em>Screenshots van Jira + Scrumbord volgen.<\/em><\/p>\n<p><b>Jenkins CI<\/b><\/p>\n<p>Last but not least maken we gebruik van <a href=\"https:\/\/wiki.jenkins-ci.org\/display\/JENKINS\/Meet+Jenkins\">Jenkins<\/a>. Jenkins is het platform dat bijna al onze software &#8221;test&#8217;, build&#8217;, &#8216;deployed&#8217; en onze ontwikkelaars op de hoogte stelt wanneer zij code hebben ingechecked die niet functioneert. Dit zowel voor onze .NET als java aonderdelen.<\/p>\n<p>Het configureren van Jenkins is belachelijk simpel, in het simpelste geval koppel je aan de .ant file\u00a0van je eclipse-project, en specificeer met behulp van wat shell\/bat opdrachten waar de resulterende .jar\/.exe files naartoe moeten. Leuker wordt het echter wanneer\u00a0je het uitvoeren je (unit,integratie &amp; GUI) tests\u00a0meeneemt en de verantwoordelijke developers automatisch op de hoogte stelt van het falen\/slagen van de build.<\/p>\n<p><strong>Eigen omgeving per ontwikkelaar<\/strong><\/p>\n<p>De genoemde software hierboven draait bij ons op 1 server. Hoewel dit op het moment\u00a0van builds &amp; tests erg krap is, is het voldoende. Dit voornamelijk omdat alle developers beschikken over een eigen sandbox, waarop ze werken totdat ze tevreden zijn over &#8216;hun&#8217; code. Op dit moment wilt dat &#8216;slechts&#8217; zoveel zeggen dat iedere developer beschikt over een eigen applicatieserver (Liberty profile 8.5.5. &#8211; of zwaarder, afhankelijk van de developer) waar hij &#8216;live&#8217; zijn aanpassingen kan\u00a0testen. Hierdoor is er altijd een werkende centrale-ontwikkel-omgeving waarop de developers elkaars werk kunnen testen en beoordelen &#8211; en zitten ze\u00a0elkaar nooit in de weg.<\/p>\n<p><strong>Toekomst<\/strong><\/p>\n<p>Uiteraard is er ruimte voor veel verbeteringen, punt is echter dat ons project op dit moment niet veel meer nodig heeft dat wat we nu hebben. Developers kunnen &#8216;hun ding doen&#8217;, zitten elkaar niet in de weg en hoeven zich geen zorgen meer te maken over de configuraties. Onze testers ontvangen betere builds en de SCRUM master heeft altijd een up to date overzicht.<\/p>\n<p>Ah, en wellicht mijn persoonlijke favoriet. Alles is traceerbaar!<\/p>\n<p><b>Relevante links:<\/b><\/p>\n<p><a href=\"https:\/\/subversion.apache.org\/\">Subversion<\/a>, <a href=\"http:\/\/eclipse.org\/subversive\/\">Eclipse plugin voor\u00a0Subversion<\/a>, <a href=\"http:\/\/tortoisesvn.net\/\">Windows Shell Client voor Subversion (Tortoise)<\/a>, <a href=\"https:\/\/www.atlassian.com\/software\/jira\">Jira &amp; Jira Agile<\/a>,\u00a0<a href=\"https:\/\/wiki.jenkins-ci.org\/display\/JENKINS\/Meet+Jenkins\">Jenkins<\/a><\/p>\n<p>Screenshots volgen.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Een tijdje terug sprak ik een aantal conculega&#8217;s die nog nooit van &#8216;continuous integration&#8217; (CI) hadden gehoord. Ze hingen dan ook aan mijn lippen toen ik vertelde hoe ons (scrum)project [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-73","post","type-post","status-publish","format-standard","hentry","category-geen-categorie"],"_links":{"self":[{"href":"https:\/\/www.ivojonker.nl\/index.php?rest_route=\/wp\/v2\/posts\/73","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ivojonker.nl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ivojonker.nl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ivojonker.nl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ivojonker.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=73"}],"version-history":[{"count":9,"href":"https:\/\/www.ivojonker.nl\/index.php?rest_route=\/wp\/v2\/posts\/73\/revisions"}],"predecessor-version":[{"id":87,"href":"https:\/\/www.ivojonker.nl\/index.php?rest_route=\/wp\/v2\/posts\/73\/revisions\/87"}],"wp:attachment":[{"href":"https:\/\/www.ivojonker.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=73"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ivojonker.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=73"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ivojonker.nl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}