2020

DevOps
The Web

Categorie
Full Stack Development
Profiel Full Stack Web Developer

Naast ontwikkelen van Websites, Apps en webApps beheerst de Full Stack Web Developer ook de kennis en vaardigheid om DTAP omgevingen op te zetten, te deployen en beheren. Kernbegrippen zijn daarbij DevOps, Agile met Scrum en CI/CD.

DevOps

Cultuurverandering en term voor het software proces van Ontwikkelen, Testen, Acceptatie en Productie (DEV, TST, ACC, PRD) waarbij de beheerders van alle omgevingen nauw verbonden zijn met samenwerking naar tussen ontwikkelaars.

Zodoende zijn er niet meer de van oudsher bestaande scheidslijnen tussen coding van functionaliteit (de software tijgers) versus IT'ers (de techneuten) die de machines 'op stoom' houden. Het geheel is nu één team dat gezamenlijk het product managed.
→ zie: Wikipedia DevOps

Agile

Agile is mindset met drijvende principes:
- Klanttevredenheid door vroege en continue levering van waardevolle software
- Verwelkom veranderende eisen, zelfs in de late ontwikkeling
- Lever werkende software regelmatig (weken ipv maanden)
- Nauwe, dagelijkse samenwerking tussen 'de business' en ontwikkelaars
- Projecten zijn gebouwd rond gemotiveerde individuen, die vertrouwd moeten worden
- Face-to-face gesprek is de beste vorm van communicatie (co-locatie)
- Werkende software is de primaire maatstaf voor vooruitgang
- Duurzame ontwikkeling, in staat om een constant tempo te handhaven
- Continue aandacht voor technische excellence en goed ontwerp
- Eenvoud, de kunst van het maximaliseren van de hoeveelheid niet gedaan werk is essentieel
- De beste architecturen, vereisten en ontwerpen komen voort uit zelforganiserende teams
- Regelmatig denkt het team na over effectiever worden en past zich dienovereenkomstig aan
→ zie: Wikipedia Agile

Scrum

Scrum is een framework om op een flexibele manier (software) producten te maken. Het wordt gebruikt als instrument om Agile handen en voeten te geven. Er wordt gewerkt in multidisciplinaire teams die in korte sprints, met een vaste lengte van 1 tot 4 weken, werkende (software) producten opleveren.
→ zie: Wikipedia Scrum

De naam van deze manier van werken komt vanuit rugby: bij een scrum probeert een team samen een doel te bereiken en de wedstrijd te winnen. Samenwerking is heel belangrijk en men moet snel kunnen inspelen op veranderende omstandigheden.

Scrum wordt vaak gebruikt bij nieuwe producten waarbij men al doende leert om de eisen en wensen beter te beschrijven en in bruikbare producten om te zetten. Vaak weet men pas wat men wil als men het eerste product, het prototype, ziet en dan worden alsnog de eisen aangepast. Scrum heeft de flexibiliteit om met laat wijzigende eisen en wensen om te gaan.

De resultaten uit scrum overleg kunnen worden vastgelegd in tools zoals Bugzilla, Jira en Mattermost die ook worden gebruikt voor software issues tracken, en voor bijhouden taken en communicatie. Genoemde tools worden verder onderaan deze pagina behandeld bij hoofdstuk 7 fase "planning".

→ zie: YouTube Videotorial Scrum

CI/CD

Continue integratie en continue delivery & deployment (CI/CD) is methode van aanpak. Vanuit functionaliteit zijn er dagelijks wijzigingen en verbeteringen die aan gebruikers moet worden geleverd, met DTAP omgevingen die niet meer statische entiteiten zijn zoals 'vroeger', maar dynamisch, schaalbaar en zó mobiel dat ze in 'no time' zich over de hele wereld kunnen verspreiden. CI/CD is dé aanpak om in deze snel wijzigende infrastuctuur omgeving snel wijzigende functionaliteit te implementeren.
→ zie: Wikipedia CI
→ zie: Wikipedia CD

Taken

Beheersing skill set en taken Back End Web Developer Database wordt verondersteld. Voor Full Stack Web Developer komt erbij de volgende reeks taken, die voor het lees en leerproces chronologisch zijn genummerd waarbij het een volgt uit het ander.
1. Machine Management
2. Provisioning
3. Resource Management
4. Containerization
5. Job Scheduling
6. Container Orchestration
7. Application Orchestration
De Full Stack Web Developer beheerst alle onderstaande tools om taken te kunnen verrichten.

1. Machine Management

Met machine management wordt bedoeld het identifiseren, selecteren en realiseren van "computers" waarop tooling en software functioneert. Met computers wordt bedoeld bare metal oftewel fysieke, dan wel virtuele apparatuur of servers.

Zoals eerder in deze guide bij DTAP omgevingen genoemd zijn er vele soorten van machines:
- Installatie van Virtual Machine zoals VirtualBox of VMware
- Installatie van dual boot met 2e of meer OS
- Dedicated computer inrichten (Pi4?) of ombouwen bestaande computer
- Cloud huren Virtual Machine bij Google GCP, AWS, Azure of Oracle
- Cloud huren via shared hosting met meerdere klanten op één server
- Cloud huren via Virtual Private Server als dedicated "eigen" machine

Aangezien voornoemde varianten van machines en hun management in voorgaande Web Developer profielen inhoudelijk zijn behandeld volgt hier verder geen verdere uitdieping en wordt verwezen naar betreffende passages alwaar uiteenzetting plaatsvindt.

Resultaat van "Machine Management" is een overzicht van on premises geinstalleerde, dan wel en of cloud machines / servers mét dus alle LAN of WAN (lees: local netwerk of internet) IP adressen daarvan.

Deze IP adressen zijn nodig voor verder uitvoeren van provisioning en zijn de basis voor werkzaamheden aldaar. Immers, die machines (nodes) zijn de target voor verdere installatie!

2. Provisioning

Provisioning is een reeks acties om een ​​server met geschikte systemen, gegevens en software voor te bereiden en gereed te maken voor netwerkgebruik.
→ zie: Wikipedia Provisioning

Typische taken bij het inrichten van een server zijn: selecteer een server uit een pool van beschikbare servers (1), laad de juiste software zoals besturingssysteem, apparaatstuurprogramma's, middleware en applicaties, pas het systeem en de software op de juiste manier aan en configureer deze om een ​​boot te maken of te wijzigen image voor deze server en wijzig vervolgens de parameters, zoals het IP-adres, de IP-gateway om bijbehorende netwerk- en opslagbronnen te vinden om het systeem te controleren.

Voorwoord Vagrant & Ansible

In de praktijk blijkt dat provisioning van nieuwe DTAP omgevingen geschiedt in twéé stappen:
- Vagrant deployed mbv IP adressen uit (1) de nieuwe omgevingen
- Ansible configureert de nieuwe omgevingen

Dit voorwoord is er speciaal op gericht om te wijzen op het feit dat Vagrant tijdens deployment van nieuwe omgeving óók de configuratie daarvan kan uitvoeren. En bijna alle tutorials laten dat dan ook zien. Echter, de toeschouwer kan daardoor in verwarring raken over wat dan nog het nut is van Ansible.

Na éénmalige Vagrant deployment van omgevingen is Ansible een prima long term support configuratie management tool van omgevingen. Dat is de reden dat in de praktijk blijkt dat Vagrant wordt gebruikt voor opstarten van een omgeving om daarna Ansible te starten voor configuratie van die omgeving.

Vagrant

Vagrant is free OpenSource software voor het bouwen en onderhouden van draagbare virtuele software ontwikkelomgevingen, voor VirtualBox, KVM, Hyper-V, Docker containers, VMware en AWS.
→ zie: Wikipedia Vagrant
→ zie: Website Vagrant download & get started

Kenmerken

Vagrant maakt gebruik van een declaratief configuratiebestand dat een geheel systeem beschrijft. OS, pakketten, besturingssysteemconfiguratie, gebruikers en meer. Machine- en softwarevereisten worden geschreven in een bestand met de naam "Vagrantfile" om de nodige stappen uit te voeren om een omgeving aan te maken.

Vagrantfile kan op verschilende manieren worden ingezet, bijvoorbeeld:
- Push: vanuit master worden slave target machines ingericht, of;
- Pull: Vagrantfile kopieeren naar target machines om zo daar omgeving te deployen

→ zie: YouTube Videotorial Vagrant

Ansible

Ansible is een (community free) OpenSource tool voor Application deployment, Configuratie management, Security, Compliancy, Provisioning, Orchestration.
→ zie: Wikipedia Ansible
→ zie: Website Ansible download & get started
→ zie: Wikipedia YAML
→ zie: Website YAML download & get started

Kenmerken

- Playbook is opgave van uit te voeren tasks.
- Inventory is opgave van target nodes
- Modules zijn programma's die tasks uitvoeren
- Roles zijn gegroepeerde tasks naar functionaliteit
- YAML is in Playbook te gebruiken taal

→ zie: YouTube Videotorial Ansible
→ zie: YouTube Videotorial YAML

Bijgaande videotorial is provisioning compleet uitgewerkt
→ zie: YouTube Videotorial Vagrant met VirtualBox & Ansible

Meerdere configuratie tools

Naast Ansible zijn er ook andere configuratie tools. Deze doen ongeveer allemaal hetzelfde maar dan net even anders. Men kan zich zelf verdiepen in welke de voorkeur geniet. Onderstaande tutorial maakt vergelijking tussen tools Chef, Puppet, Ansible en Saltstack.

→ zie: YouTube Videotorial Vergelijk configuratie tools

3. Resource Management

Bij Resource Management wordt in dit verband gesproken als DataCentrum OS (DC/OS) waarbij verschillende tools, bijvoorbeeld bij onderstaand verder uitgewerkte tool Apache Mesos, gezamenlijk alle beschikbare nodes beheerd.
→ zie: Wikipedia DataCentrum OS

Geautomatiseerd beheer geschiedt op bestaande nodes zoals boven bij (1) beschreven en kunnen zijn on premises geinstalleerde, dan wel en of cloud machines en servers naar gelang gebruik (de Ops uit DevOps), met monitoring van need to up or down scaling.

Tevens kan geautomatiseerd met een vooraf aangegane account bij Cloud provider nog niet gealloceerde nodes dynamisch allocated en provisioned (deploy, configure), alsook gekilled worden.

DC/OS Mesospehere

DC/OS Mesosphere is een OpenSource gedistribueerd operating systeem gebaseerd op Apache Mesos. DC/OS Mesospehere categoriseert componenten als in gebruikersruimte of kernelruimte. De kernelruimte omvat de Mesos master en agents, terwijl de gebruikersruimte verschillende systeemcomponenten van het DC/OS omvat.
→ zie: Website DC/OS download & get started

Deze componenten omvatten onder andere Admin Router, een interne load balancer, Cosmos, een API-service voor interne verpakkingen, Exposant, een Java supervisorsysteem voor ZooKeeper, Marathon, een Apache Mesos framework voor container orchestration, Mesos DNS, een interne DNS service.

→ zie: YouTube Videotorial DC/OS Apache Mesos

4. Containerization

Een container is een standaardeenheid van software die code en al zijn afhankelijkheden verpakt, zodat de toepassing snel en betrouwbaar van de ene computeromgeving naar de andere wordt uitgevoerd. Gecontaineriseerde software zal altijd hetzelfde draaien, ongeacht de infrastructuur. Containers isoleren software van zijn omgeving en zorgen ervoor dat het uniform werkt, ongeacht welke DTAP omgeving.
→ zie: Wikipedia Containerization

Kenmerken

De industrie standaard voor gebruik van containers is Docker. Hét host operating systeem is altijd Linux. Dat betekent dat Docker Engine op Windows of macOS alleen functioneert in een Virtual Machine zoals VirtualBox met daarin host OS Linux. Of bij Windows10 en Windows Server 2019 in het Windows Subsystem for Linux.
→ zie: Wikipedia WSL

Docker

Docker is (community free) OpenSource software en een set van Platform as a Service producten (PaaS) die op OS niveau virtualisatie gebruiken om software te leveren in pakketten die containers worden genoemd. Containers zijn geïsoleerd van elkaar en bundelen hun eigen software, bibliotheken en configuratiebestanden; ze kunnen met elkaar communiceren via goed gedefinieerde kanalen. Docker maakt gebruik van host OS en is dus lichter dan virtuele machines waarbij elke VM een eigen OS heeft.
→ zie: Wikipedia Docker
→ zie: Website Docker download & get started

Kenmerken

Docker gebruikt de resource isolatiefuncties van de Linux kernel zoals cgroups en kernel namespaces en een bestandssysteem dat geschikt is voor unificatie zoals OverlayFS om containers binnen een enkele Linux instantie te laten draaien, waarbij de overhead van het starten en onderhouden van virtuele machines wordt voorkomen.

Omdat Docker containers lichtgewicht zijn, kan een enkele server of virtuele machine meerdere containers tegelijkertijd uitvoeren. Bij een analyse uit 2018 bleek dat een typische Docker use case betrekking heeft op acht containers per host, maar dat een kwart van de geanalyseerde organisaties 18 of meer per host uitvoert.

Docker en Vagrant (VM VirtualBox als provider) concurreren niet rechtstreeks met elkaar. Ze kunnen samen worden gebruikt. En zijn dat vaak ook door de Vagrant Docker Provisioner te gebruiken om Docker automatisch te installeren, Docker containers te Pullen en bepaalde containers te configureren via Ansible voor opstarten.

→ zie: YouTube Videotorial Docker

5. Job Scheduling

Een Job Scheduler is een computertoepassing voor het beheren en uitvoeren van taken zonder toezicht op de achtergrond. Synoniemen zijn batchsystemen, distributed resource management system (DRMS), distributed resource manager (DRM) en, tegenwoordig, meestal, workload automation (WLA). De gegevensstructuur van uit te voeren taken wordt de job queue genoemd.
→ zie: Wikipedia Job Scheduling

Cron

Een Cronjob of crontab is een Linux commando dat een programma of script op een ingesteld tijdstip uitvoert. Cronjobs worden gebruikt in Unix achtige systemen als Linux, BSD en Apple Macintosh. Het woord 'cron' is afkomstig van het Engelse woord chronograph, dat een soort stopwatch is. Later is hier job (taak) aan toegevoegd. Een cronjob die een systeem service draait wordt een daemon genoemd. Dit zijn meestal servertoepassingen.
→ zie: Wikipedia Cron

Kenmerken

Vaak worden cronjobs gebruikt voor het ophalen van de email, het verzenden van email of het controleren op updates. Als een cronjob op een (web)server wordt gebruikt, is dat vaak om een backup van een database te maken, een PHP of Perl script aan te roepen of een servercommando uit te voeren. De meeste webhosters bieden cronjobs aan in een control panel zoals Plesk of DirectAdmin.

→ zie: YouTube Videotorial Cron Jobs

Meerdere Job Schedulers

Cronjob is zeg maar zoals het begonnen is. Anno heden zijn er vele tools die ook job scheduling bevatten, maar daarnaast nog veel meer doen en op grotere schaal, meestal op containerfarm en datacentre breed niveau. Zo is Kubernetes uitstekend geschikt voor Job Scheduling, maar gelet op het overall karakter daarvan wordt deze tool in volgende hoofdstuk opgenomen.

6. Container Orchestration

Van oudsher omvatte deployment allerlei bash-scripts met vele statements en schimmige workarounds. Het coördineren van dit alles deed een sysadmin en DBA.

Toen kwam Chef, Puppet, Ansible en continue integratie en implementatie (CI). Deze tools maakten het eenvoudig om tests en implementatie te standaardiseren. Belangrijk is dat deze tools, eenmaal op hun plaats, een DevOps team in staat stelt om het detail van wat er moet gebeuren te vergeten.

Op dezelfde manier stellen containers zoals Docker ons in staat om de omgeving te standaardiseren en de details van het onderliggende besturingssysteem en de hardware te abstraheren. Bij container orchestration hoeft men niet na te denken over welke server een bepaalde container zal hosten of hoe die container zal worden gestart, gecontroleerd en gekilled.

Container orchestration is major op dit moment. Hoewel het containerformaat zich grotendeels heeft uitgekristalliseerd (Docker), zijn de overwegingen welke tools te gebruiken bij het implementeren en beheren van die containers: de trend is Kubernetes.

Kubernetes

Kubernetes meestal gestileerd als k8s, is een free OpenSource container orchestrationsysteem voor het automatiseren van applicatie implementatie, schaling en beheer over clusters van hosts. Het werkt met verschillende containerhulpmiddelen, waaronder Docker. Veel cloudservices bieden een op Kubernetes gebaseerd platform of infrastructuur als een service (PaaS of IaaS) waarop Kubernetes kan worden ingezet als een platformverschaffende service.
→ zie: Wikipedia Kubernetes
→ zie: Website Kubernetes download & get started

Kenmerken

Kubernetes definieert een set bouwstenen "primitives", die gezamenlijk mechanismen bieden die applicaties implementeren, onderhouden en schalen op basis van CPU, geheugen of custom metrics. Kubernetes is losjes gekoppeld en uitbreidbaar om aan verschillende workloads te voldoen.

Deze uitbreidbaarheid wordt grotendeels geleverd door de Kubernetes API, die wordt gebruikt door interne componenten en uitbreidingen en containers die op Kubernetes draaien. Het platform oefent controle uit over reken- en opslagbronnen door bronnen als objecten te definiëren, die vervolgens als zodanig kunnen worden beheerd.

Kubernetes wordt vaak gebruikt als een manier om een op microservice gebaseerde implementatie te hosten, omdat het en het bijbehorende ecosysteem van tools alle mogelijkheden bieden die nodig zijn om de belangrijkste problemen van elke microservice architectuur aan te pakken.

→ zie: YouTube Videotorial Playlist Kubernetes

Meerdere Container Orchestration tools

Naast Kubernetes zijn er ook andere configuratie tools zoals Docker Swarm, Marathon, Fleet, Lattice, ECS. Deze doen ongeveer allemaal hetzelfde maar dan anders. Men kan zich zelf verdiepen in welke de voorkeur geniet. Onderstaande tutorial maakt vergelijking tussen tools Kubernetes en Docker Swarm.

→ zie: YouTube Videotorial Vergelijk Kubernetes vs Docker Swarm

Non free OpenShift van firma RedHat ìs ook geschikt voor Container Orchestration, maar gelet op het overall karakter daarvan wordt deze tool in volgende hoofdstuk opgenomen. Onderstaande tutorial maakt vergelijking tussen tools Kubernetes en OpenShift.

→ zie: YouTube Videotorial Vergelijk Kubernetes vs OpenShift

7. Application Orchestration

Zoals bovenaan deze pagina gezien bestaat een DevOps team uit ontwikkelaars, testers, acceptanten en productie leden. Ofwel, alle technische disciplines cq personen in hun rollen die het product ontwerpen, bouwen, testen, uitrollen en beheren.

Dit team werkt op basis van Agile principes, die worden vormgegeven met Scrum methode, en hun aanpak is CI/CD. Team inhoudelijke werkcyclus om een product "de applicatie" te maken en beheren wordt ook wel CI/CD pipeline genoemd.

Het samenspel van DevOps onderdelen (fasen) tot één geolied geheel "de orchestration" van werkende applicatie in de diverse DTAP omgevingen wordt geregeld met tools in de pipeline. Ofwel een pipeline kan gezien worden als een set op elkaar afgestemde tools. En veel van die tools zijn in deze web developer guide aan de orde geweest; erbij nog een paar hierna.

Pipelines

Vanuit de dagelijkse praktijk zijn er veel pipelines uitgekristalliseerd. Meestal rondom een toonaangevend technisch concept. Inzet van "de cloud" heeft geresulteerd in specifieke pipelines zoals "Azure pipeline" en "AWS pipeline". En de OpenStack pipeline is onstaan rondom AWS pipeline. Of ook "Java pipeline" want deze taal kent andere tools dan "HTML-JavaScipt pipeline". Of "Jenkins pipeline" of "Git pipeline" enzovoorts.

Dus een pipeline behelst geen vast gedefinieerde set van tools, doch betreft indicatieve benaming voor kenmerkende technische CI/CD opzet. Er is dus geen magische set van tools voor een Full Stack Web Developer om te beheersen want in de praktijk is elke CI/CD omgeving anders. Niettemin, onderstaande uitwerking is representatief.

Pipeline fasen

Zoals hierboven beschreven is de CI/CD pipeline onder te verdelen in groepen van soorten werk, verder te noemen stages. En voor elke fase zijn er verschillende tools voorhanden ter realisatie van het werk. Uitwerking is als volgt met enkele belangrijke tools als voorbeeld.

Pipeline fase
Volg App in fase van pipeline

Fase: Planning

Bugzilla

Bugzilla is een free OpenSource tool om software issues te tracken en kan ook worden ingezet voor bijhouden van taken binnen een project. Items (bugs) worden ingediend en aan een bepaalde ontwikkelaar toegewezen. Verschillende statusupdates voor elke bug zijn mogelijk, samen met gebruikersnotities en bugvoorbeelden.
→ zie: Wikipedia Bugzilla
→ zie: Website Bugzilla download & get started
→ zie: Website Tutorial Bugzilla

In de praktijk worden bugs toegewezen aan een gatekeeper, wiens taak het is om verantwoordelijkheid en prioriteitsniveau toe te wijzen. Bugzilla is integreerbaar met Jenkins. Soortgelijke issue tracker tools Jira en BitBucker zijn niet integreerbaar met Jenkins.

Jira

Jira is een non free closed sourced tool om software issues te tracken en kan ook worden ingezet voor bijhouden van taken binnen een project. Kortingen op licenties zijn mogelijk in sommige gevallen.
→ zie: Wikipedia Jira
→ zie: Website Jira download & get started

Jira bevat vier pakketten:
- Jira Core, generiek projectmanagement
- Jira Software, de basis inclusief functies voor agile projectbeheer
- Jira Service Desk, voor gebruik door IT- of zakelijke servicedesks
- Jira Ops, voor incidentbeheer

Jira ondersteunt voor RPC (Remote Procedure Calls) REST, SOAP en XML-RPC. Jira integreert met broncontroleprogramma's zoals Clearcase, Concurrent Versions System (CVS), Git, Mercurial, Perforce, Subversion en Team Foundation Server.

→ zie: YouTube Videotorial Jira

Jira integratie Mattermost

Mattermost is enterprise messaging tool en op Home Page van deze website geïntroduceerd als aanbevolen keuze. Jira en Mattermost kunnen worden geïntegreerd tot organisatie breed samenwerkend geheel.
→ zie: Home Page Mattermost

→ zie: YouTube Videotorial Jira integratie Mattermost

Pipeline fase
Een task wordt toegewezen aan developer

Fase: Develop / Coding

In deze guide komen verschillende programmeertalen, coding languages, met diverse frameworks en ook Integrated Development Environments (IDE's) aan de orde.

Aangezien deze development tools inhoudelijk elders op deze website zijn behandeld volgt hier verder geen verdere uitdieping en wordt verwezen naar betreffende passages alwaar uiteenzetting plaatsvindt.

Profielen met Skill set

Basic Front End Web Developer
Full Fledged Front End Web Developer
Back End Web Developer Software
Back End Web Developer Database
Full Stack Web Developer
Native app Developer Android, iOS, Windows, Fuchsia
* voor navigatie naar profiel druk op betreffende functie

Pipeline fase
Engineer pushed mbv Git coding naar GitHub repository

Fase: Version control

Git

Git functioneert op eigen computer (localhost) en bevat compleet historisch overzicht en volledige trackingcapaciteiten van alle wijzigingen, toevoegingen en vervallingen.
→ zie: Wikipedia Git

Met push wordt de hele wijzigingssessie geupload naar server van GitHub in project repository. Met pull kunnen de wijzigingen (van andere teamleden) vanaf server GitHub repo naar folder op localhost worden gedownload.

GitHub

Github is de repository waarin coding (van teamleden) geplaatst wordt. Github versiebeheer opereert in de cloud en kent “privé” account en “openbare” account, met dus die onderscheidende exposure.
→ zie: Wikipedia GitHub

Voor continious integration kan de coding vanuit GitHub versiebeheer automatisch gelezen worden voor verdere verwerking.

Pipeline fase
Coding gaat van repository naar build

Fase: Build

Maven

Maven is een free OpenSource tool voor projectmanagement en geautomatiseerde softwarebouw. Maven wordt voornamelijk gebruikt voor Java projecten, maar kan ook worden gebruikt voor projecten die zijn geschreven in JavaScipt, HTML, C, C++, C#, Ruby, Scala en andere talen.
→ zie: Wikipedia Maven

Maven wordt ingesteld (cronjob) om automatisch nieuwe versie van coding te halen uit GitHub. Maven beschrijft in een XML bestand (POM) het softwareproject dat wordt gebouwd, de afhankelijkheden van andere externe modules en componenten, de bouwvolgorde, mappen en vereiste plugins.

De Maven build default lifecycle fasen zijn: validate, generate sources, process sources, generate resources, process resources, compile, process test sources, process test resources, test compile, Unit test, package, install en deploy.

→ zie: YouTube Videotorial Playlist Maven

Meerdere build tools

Naast Maven zijn er ook andere build tools zoals veel gebruikt non free Nexus secure on premises Repo Manager (zie hierna video); Apache Ant, JFrog en Gradle. Deze doen ongeveer hetzelfde maar dan anders. Men kan zich zelf verdiepen in welke de voorkeur geniet.
→ zie: Website Nexus get started

→ zie: YouTube Videotorial Nexus

Pipeline fase
Coding gaat van build naar CI continious integration

Fase: CI Continious Integration

In software engineering is continue integratie (CI) de praktijk om meerdere werkkopieën van ontwikkelaars een of meerdere keren per dag samen te voegen tot een gedeelde hoofdlijn.
→ zie: Wikipedia CI

Jenkins

Jenkins is een free OpenSource tool voor automatiseren van het niet menselijke deel van het software ontwikkelingsproces. In samenwerking met Maven verzorgen van integratie (CI) en het faciliteren van builds voor automated testen en daarna deploy naar DTAP omgevingen (CD).
→ zie: Wikipedia Jenkins
→ zie: YouTube Videotorial What is Jenkins

Jenkins CI lifecycle
- Cronjob haalt automatisch nieuwe builds vanuit Maven (of Nexus ea)
- Geautomatiseerde testen worden uitgevoerd met Selenium
- Geautomatiseerde testen worden uitgevoerd met Cucumber
- Testrapporten komen beschikbaar
- Build artifact wordt geleverd voor release DTAP omgeving
→ zie: Wikipedia Software testen

→ zie: YouTube Videotorial Playlist Jenkins
→ zie: YouTube Videotorial Playlist WebDriver.JS
→ zie: YouTube Videotorial Playlist JUnit testen en Selenium
→ zie: YouTube Videotorial Playlist Cucumber

Jenkins integratie Mattermost

Mattermost is enterprise messaging tool en op Home Page van deze website geïntroduceerd als aanbevolen keuze. Jenkins en Mattermost kunnen worden geïntegreerd tot organisatie breed samenwerkend geheel.
→ zie: Home Page Mattermost

→ zie: YouTube Videotorial Jenkins integratie Mattermost

Meerdere CI tools

Naast Jenkins zijn er ook andere CI tools zoals Bamboo tbv meerdere builds meerdere platforms paralel; Buildbot tbv test, build omgeving en release; Gump tbv Java-functionaliteit testen; Travis CI voor hosted GitHub projecten. Deze tools hebben min of meer dezelfde plek in CI/CD pipeline als Jenkins maar dan met andere functies. Men kan zich zelf verdiepen in welke de voorkeur geniet.

Pipeline fase - inclusief Staging
1. Als status is TEST - promote build naar TST- of ACC omgeving Quality Assurance QA
Als alle testen akkoord, dan
2. Promote build naar PRD omgeving bij fase CD Continous Delivery & Deployment

Fase: QA Quality Assurance

Softwaretests zijn onderzoeken om belanghebbenden te informeren over de kwaliteit van het software product of de service die wordt getest. Bodoeling is een objectief, onafhankelijk beeld van de software zodat het bedrijf de risico's van software implementatie kan inschatten.
→ zie: Wikipedia Software testen

Test Strategie

De Test Strategie bevat de WAT vragen zoals:
- Voldoet aan vereisten voor ontwerp en ontwikkeling
- Reageert correct op allerlei inputs
- Voert functies uit binnen een acceptabele tijd
- Is voldoende bruikbaar
- Kan worden geïnstalleerd en uitgevoerd in beoogde omgevingen
- Behaalt het resultaat dat stakeholders wensen

De Test Strategie bevat tevens WELKE testen zoals:
- Functionele Acceptatie Test (FAT)
- Gebruikers Acceptatie Test (GAT)
- Productie Acceptatie Test (PAT)
- Integratie Test
- End-to-end systeem Test
- Regressie Test
- Performance Test
- Penetratie Test
- En veel meer test soorten
→ zie: Test Strategy Template

Testplan

Het Testplan bevat de HOE vragen zoals:
- Handmatige of geautomatiseerd
- Welke testcases en testdata
- Testcyclus per soort test
- Hoe performance testen met meetpunten en criteria
- Benodigde TAP-omgevingen FAT en GAT op TST, en PAT op ACC - Rollen, bemensing, tijd, geld
→ zie: Test Plan Template

→ zie: YouTube Videotorial Testing

Pipeline fase
1. TST en/of ACC niét okay; meld bevinding bij, en ga naar fase Planning
Als alle testen akkoord, dan
2. TST en ACC wél okay; meld akkoord bij CI; Staging naar PRD gaat via CI naar fase CD

Fase - CD Continious Delivery

In software engineering is Continue Delivery (CD) een aanpak waarbij teams software in korte cycli produceren. En ervoor zorgen dat de software op elk gewenst moment betrouwbaar kan worden vrijgegeven.
→ zie: Wikipedia CD

Continious Delivery is gericht op het bouwen, testen en vrijgeven van software met hogere snelheid en frequentie. Een eenvoudig en herhaalbaar implementatieproces is belangrijk voor continue levering.

Bij onderstaande Git-Jenkins-Kubernetes pipeline wordt bij Continious Delivery ook de PRD omgeving aangemaakt door Kubernetes. Zowel bij aanmaken van DEV en ACC wordt dus ook bij PRD het Ansible Playbook gebruikt.

Voor verder begrip nu even aandacht voor gehanteerde termen:
Continious Delivery
- Als vanuit CI de beheerder(!) melding ontvangt om build naar PRD te deployen
Continious Deployment
- Via trigger vanuit CI wordt build automatisch(!) uitgerold naar PRD

Infrastructuur monitoring

Om DEV, TST, ACC en PRD omgevingen te monitoren zijn er tools. Als voor DevOps pipeline gekozen is voor Mesosphere of OpenShift dan verrichten die tools ook de monitoring. Als níet voor twee genoemde is gekozen dan zijn er dedicated monitoring tools, zoals hierna genoemd.

Nagios

Nagios is een free OpenSource tool die systemen, netwerken en infrastructuur bewaakt. Nagios biedt monitoring- en waarschuwingsservices voor servers, switches, applicaties en services. Het waarschuwt gebruikers wanneer er iets misgaat en waarschuwt hen een tweede keer wanneer het probleem is opgelost.
→ zie: Wikipedia Nagios
→ zie: Website Nagios Download & Get started

→ zie: YouTube Videotorial Nagios

ElasticStack

ElasticStack is veelzijdig set van tools. Zo kan ElasticStack ingezet worden voor web traffic monitoring, maar dus ook voor andere infrastructuur componenten.
→ zie: Profiel Basic Front End Web Developer

→ zie: YouTube Videotorial Playlist Elastic and Kubernetes

Meerdere monitoring tools
Naast Nagios zijn er ook andere monitoring tools zoals Zabbix, Splunk etc.
→ zie: Wikipedia overzicht monitoring tools

Fase - CD Continious Deployment

Continue Deployment is continue implementatie met dus vergelijkbare aanpak als bij continue delivery waarbij software in korte cycli wordt geproduceerd, alleen dan met geautomatiseerde(!) implementaties zonder handmatige bemoeienis.
→ zie: Wikipedia CD

Het huidige summum van applicatie orchestration is hiervoor op deze pagina bij (3) Resource Management beschreven free OpenSource DC/OS Mesosphere of hierna te beschrijven non free OpenShift van de firma RedHat.

Deze twee tools kunnen technische complementair functioneren, waarbij Kubernetes een cluster van nodes managed, aanvullend Mesosphere dat meerdere k8s clusters managed.

Infrastructuur monitoring & management

Hiervoor bij continious delivery is behandeld dat Nagios en andere tools monitoring alerts sturen en beheerders 24/7 op basis daarvan acties ondernemen. Uitstekende en zeer bruikbare tools! Maar er is meer. Deze mensenlijke interacties kunnen verder worden geautomatiseerd.

Volledig geautomatiseerde application orchestration voltrekt zich aan de hand van monitoring van performance van het systeem en op basis van conditionele Alerts wordt predefined automated up- en down scaling van web- en file servers, en infrastructuur componenten zoals routers, switches, loadbalancers enzovoorts, aangestuurd.
→ zie: Wikipedia Autoscaling

Genoemde manier van infrastructuur management is fenomenaal: het stelt in staat om een App die gaat van 100 gelijktijdige gebruikers automatisch op te schalen naar 10.000, en daarna naar een miljoen en dan naar 100 miljoen gebruikers. En als gebruik daalt, dan ook weer automatisch naar beneden te schalen.

Deze manier van binnen minuten ipv maanden op grote schaal alloceren van technische infrastructuur was tot nog niet zolang geleden ondenkbaar. En gebruik van deze cloud oplossing afgerekend op basis van aantallen nodes en hoeveelheid dataverkeer. Door automatisch up-and-down-scaling wordt alleen betaald voor daadwerkelijk verbruik.

Zie voor uitwerking onderstaand plaatje: op de Docker-Kubernetes pipeline wordt het blauwe Container as a Service (Caas) gedeelte van OpenShift toegevoegd.

Verschillende pipelines kunnen zijn:
Continious Delivery:
- Docker-Kubernetes-Nagios-Elastic/Prometheus/Grafana
Continious Deployment:
- Docker-Kubernetes-Mesosphere
- Docker-Kubernetes-OpenShift

OpenShift

OpenShift containerisatie software van RedHat. Het is een on premises platform als een service gebouwd rond Docker containers georkestreerd en beheerd door Kubernetes op basis van RedHat Enterprise Linux. OpenShift Online is het platform dat wordt aangeboden als software als een service, en Openshift Dedicated is het platform dat wordt aangeboden als een managed service.
→ zie: Wikipedia OpenShift
→ zie: Website RedHat Get started
→ zie: YouTube Videotorial Docker, Kubernetes & OpenShift

Mesosphere vs OpenShift

Om inzet van tools te overwegen is vergelijking tussen beide interessant. Navolgende artikelen gaan in op diverse aspecten.
→ zie: Artikel Mesosphere vs OpenShift
→ zie: Artikel Mesosphere vs OpenShift

.

Pipeline fase
Productie meldingen, issues, wensen en eisen worden bijgehouden bij fase Planning

Afronding profiel

Tot zover het overzicht van tools zoals gebruikt door Full Stack Web Developer.