avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/sluttrapport.pdf · 2018,...

142
i Avkastningsportal i skyen Bachelorprosjekt ved Institutt for informasjonsteknologi OsloMet - Storbyuniversitetet Bachelor i Anvendt datateknologi Våren 2018 Alexander Kingdon Pål Andreassen Frode Mathiassen Thien Minh Truong s175295 s305514 s305449 s161922

Upload: others

Post on 08-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

i

Avkastningsportal i skyen

Bachelorprosjekt ved Institutt for informasjonsteknologi

OsloMet - Storbyuniversitetet

Bachelor i Anvendt datateknologi

Våren 2018

Alexander Kingdon Pål Andreassen Frode Mathiassen Thien Minh Truong

s175295 s305514 s305449 s161922

Page 2: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

ii

Studieprogram: Informasjonsteknologi

Postadresse: Postboks 4 St. Olavs plass, 0130 Oslo

Besøksadresse: Holbergs plass, Oslo

Telefon: 22 45 32 00

Telefaks: 22 45 32 05

PROSJEKT NR. 27

TILGJENGELIGHET

BACHELORPROSJEKT HOVEDPROSJEKTETS TITTEL

Avkastningsportal i skyen

DATO

22.05.2018

ANTALL SIDER / BILAG

136 med fire vedlegg

PROSJEKTDELTAKERE

Pål Andreassen, s305514 (ANVDATA)

Alexander Kingdon, s175295 (ANVDATA)

Frode Kristian Mathiassen, s305449 (ANVDATA)

Thien Minh Truong, s161922 (ANVDATA)

INTERN VEILEDER

Kirsten Ribu og Andreas Jacobsen

OPPDRAGSGIVER

Kantega AS

KONTAKTPERSON

Hans Ove Ringstad

SAMMENDRAG

Oppgaven gikk ut på å modernisere infrastrukturen til en eksisterende webapplikasjon.

Applikasjonen er utviklet av oppdragsgiver Kantega AS. De ønsket å redusere kostnader

relatert til hosting, drift og vedlikehold ved å tilrettelegge flytting av applikasjonen fra en

virtuell server til en skytjeneste. Vi har løst denne problemstillingen og presentert et

forslag om hvordan dette kan gjennomføres på en moderne og effektiv måte. Dette har

prosjektgruppen fått til med konteinerteknologi og ved å lage et system for kontinuerlig

integrasjon og leveranse av konteinere som effektiviserer utvikling, drift og vedlikehold.

3 STIKKORD

Skytjenester

Konteinerteknologi Kontinuerlig integrasjon og

levering

Page 3: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

iii

Forord

Denne rapporten beskriver bachelorprosjektet til gruppe 27 ved Institutt for

informasjonsteknologi, OsloMet - storbyuniversitetet våren 2018. Den dokumenterer

arbeidsprosessen, resultatet, evalueringer og læringsutbyttet prosjektgruppen har kommet

frem til. Oppgaven har gått ut på å tilrettelegge for flytting av en eksisterende applikasjon

over til en skytjeneste.

Arbeidet med bachelorprosjektet har hovedsakelig foregått i perioden fra januar til mai

2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

som gruppen kom i kontakt med ved at et av prosjektlemmene hadde deltidsstilling der.

Vi ønsker å rette en takk til Kantega AS ved avdelingsleder Hans Ove Ringstad og våre

kontaktpersoner Hallbjørn Storruste, Geir Helland og Yngve Skaalerud. Til slutt ønsker vi å

takke våre forelesere ved OsloMet og våre veiledere Kirsten Ribu og Andreas Jacobsen.

Page 4: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

iv

Innholdsfortegnelse

1 Innledning ........................................................................................................................... 1

1.1 Bachelorgruppen ......................................................................................................... 1

1.2 Oppdragsgiver.............................................................................................................. 1

1.3 Oppdragsgivers kunde ................................................................................................. 2

1.4 Bakgrunn for prosjektet ............................................................................................... 2

1.5 Generelt om Avkastningsportal ................................................................................... 3

1.6 Tabelloversikt over Avkastningsportals teknologier ................................................... 6

1.7 Mål og strategi ............................................................................................................. 7

1.8 Teknologier i prosjektet ............................................................................................... 8

1.9 Faglig innhold ............................................................................................................. 12

2 Kravspesifikasjon ............................................................................................................... 13

2.1 Hensikt ....................................................................................................................... 13

2.2 Endringer i krav .......................................................................................................... 13

2.3 Funksjonelle krav ....................................................................................................... 14

2.4 Ikke-funksjonelle krav ................................................................................................ 14

2.5 Spesifisering av rammekrav ....................................................................................... 15

2.6 Hosting ....................................................................................................................... 15

2.7 Levetid ....................................................................................................................... 16

3 Prosessdokumentasjon ..................................................................................................... 17

3.1 Arbeidsmetode .......................................................................................................... 17

3.2 Utfordringer med arbeidsmetode ............................................................................. 19

3.3 Planlegging og arbeidsfordeling ................................................................................ 20

3.4 Utviklingsprosessen ................................................................................................... 21

3.5 Virtuelt utviklingsmiljø ............................................................................................... 23

4 Teknologier og vurderinger............................................................................................... 25

Page 5: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

v

4.1 DevOps ....................................................................................................................... 25

4.2 Tradisjonell VM-arkitektur og konteinerarkitektur ................................................... 28

4.3 Skytjenester ............................................................................................................... 38

4.4 Vurdering av skytjenesteleverandører ...................................................................... 43

4.5 Diskusjon og valg av skytjeneste ............................................................................... 45

4.6 Databaseløsning ........................................................................................................ 46

4.7 Kontinuerlig integrasjon og leveranse ....................................................................... 46

4.8 Andre hensyn ............................................................................................................. 51

4.9 Oppsummering .......................................................................................................... 52

5 Systemdokumentasjon ..................................................................................................... 53

5.1 Oppsett for testing og utvikling ................................................................................. 55

5.2 Oppsett av utvikling og preprod-miljø ...................................................................... 56

5.3 Oppsett av Avkastningsportal i Rancher ................................................................... 57

5.4 Domenenavn til VM ................................................................................................... 70

5.5 Oppsett av egen Rancher Catalog ............................................................................. 72

5.6 Oppsett av produksjonsmiljø – Amazon AWS ........................................................... 73

5.7 CI/CD-pipeline prosessbeskrivelse ............................................................................ 76

5.8 Testing ....................................................................................................................... 80

5.9 Adresser til løsningene .............................................................................................. 81

6 Evaluering .......................................................................................................................... 83

6.1 Evaluering av planlegging .......................................................................................... 83

6.2 Evaluering av metodikk og arbeidsmetode ............................................................... 83

6.3 Evaluering av prosjektgruppen .................................................................................. 84

6.4 Evaluering av løsningen ............................................................................................. 85

6.5 Forbedring og videreutvikling .................................................................................... 87

7 Konklusjon ......................................................................................................................... 89

Page 6: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

vi

7.1 Læringsutbytte ........................................................................................................... 89

7.2 Konklusjon ................................................................................................................. 89

8 Teknisk ordliste ................................................................................................................. 91

9 Referanser ......................................................................................................................... 94

10 Vedlegg 1 - Konfigurasjonsoppsett ............................................................................... 98

10.1 Versjoner brukt i prosjektet ................................................................................... 98

10.2 Oppsett................................................................................................................... 98

11 Vedlegg 2 - Brukerveiledning til oppdragsgiver .......................................................... 124

12 Vedlegg 3 – Testrapport .............................................................................................. 126

12.1 Sammendrag ........................................................................................................ 126

12.2 Avvik i forhold til testplan .................................................................................... 126

12.3 Testens grundighet .............................................................................................. 126

12.4 Avvik i produktet .................................................................................................. 127

12.5 Testplan ................................................................................................................ 127

13 Vedlegg 4 - Oppdragsgivers tilbakemelding ................................................................ 136

Page 7: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

1

1 Innledning

1.1 Bachelorgruppen

Bachelorgruppen består av Alexander Kingdon, Pål Andreassen, Thien Minh Truong og Frode

Kristian Mathiassen, som alle studerer siste semester på Anvendt datateknologi ved OsloMet

- Storbyuniversitetet.

Bachelorgruppen har ikke tidligere jobbet sammen som en enhet, og det er først i

forbindelse med bachelorprosjektet at det ble inngått et samarbeid. Alexander er

deltidsansatt hos oppdragsgiver og fikk tildelt prosjektet sammen med Pål mot slutten av

høsten 2017. En utlysning etter flere prosjektdeltakere førte til et samarbeid med Frode og

Thien, og sammen utgjør vi fire prosjektgruppen.

Alexander Kingdon Pål Andreassen Thien Minh Truong Frode Mathiassen

1.2 Oppdragsgiver

Kantega er et ansatteid IT-konsulentselskap i Oslo sentrum, som lager innovative IT-

løsninger, og spesialiserer seg på sikre portaler basert på tjenesteorientert arkitektur.

Bedriften ble stiftet i 2003 og har rundt 120 medarbeidere. I 2016 hadde de driftsinntekter

på nesten 150 millioner kroner. Kantega driver virksomhet i hele Skandinavia, og har

kontorer både i Oslo og Trondheim (Kantega, udatert).

Page 8: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

2

Kontaktpersoner og veiledere for bachelorprosjektet er Hans Ove Ringstad (avdelingsleder),

Hallbjørn Storruste (utvikler), Geir Helland (DevOps-konsulent) og Yngve Skaalerud (utvikler).

Figur 1-1 - Kantega AS – logo

1.3 Oppdragsgivers kunde

Norsk Pensjon ble stiftet høsten 2006 av syv livsforsikringsselskaper. I samarbeid med Nav

har de som formål å sammenstille informasjon fra private og offentlige

tjenestepensjonsordninger og sammenlignbare data fra individuelle pensjons- og

spareordninger. Bedriften hadde i 2016 driftsinntekter på nesten 9,5 millioner kroner og har

Storebrand og DNB Livsforsikring som sine største aksjonærer (Norsk Pensjon, udatert).

Figur 1-2 - Norsk Pensjon – logo

1.4 Bakgrunn for prosjektet

Avkastningsportal er en webapplikasjon som tilhører Norsk Pensjon og er utviklet av

prosjektgruppens oppdragsgiver Kantega. Oppgaven med å fornye infrastrukturen og

tilrettelegge for å flytte applikasjonen til en skytjeneste er noe oppdragsgiver har

nedprioritert til fordel for andre essensielle tjenester hos Norsk Pensjon, men var allikevel

ønsket gjennomført.

I dag hostes webapplikasjonen på en virtuell server hos driftsleverandøren Basefarm hvor

oppdragsgiver har flere av sine applikasjoner plassert. På sikt er det ønskelig for

oppdragsgiver å flytte flere av sine tjenester over til skytjenester. Det ble derfor avtalt at

prosjektgruppen skulle utføre denne jobben med Avkastningsportal som et pilotprosjekt.

Page 9: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

3

Resultatet vil derfor være et verdifullt vurderingsgrunnlag for oppdragsgiver ved eventuell

migrering av Avkastningsportal, og flere av Norsk Pensjon sine nettjenester, til skyen.

1.5 Generelt om Avkastningsportal

Avkastningsportal er en tjeneste hvor bedrifter kan sende inn data for å se og sammenligne

historisk avkastning på forskjellige pensjonsordninger ut fra kunders porteføljer.

Pensjonsdata innleveres i form av Excel- og XML-filer via en SOAP-tjeneste, som etter

beregninger presenteres i brukergrensesnittet. Beregningene utføres basert på data som

innhentes fra Oslo Børs med FTP og en offentlig webtjeneste for valutakurser.

Applikasjonen finnes på følgende adresse: https://www.norskpensjon.no/rapportering.

Språk og arkitektur

Applikasjonen er skrevet i Java og benytter Spring Boot som er et rammeverk for web-

baserte Java-applikasjoner. I back-end håndterer MySQL lagring av serialiserte java-objekter.

Avkastningsportal er inndelt i fire moduler som prosjektgruppen har jobbet med.

Figur 1-3 - Diagram med oversikt over Avkastningsportal, utlevert av oppdragsgiver

Page 10: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

4

Avkastning WS

• Data leveres via webservice (SOAP). Applikasjonen heter avkastning (avkastning-ws).

• Applikasjonen legger dataene i databasetabellen «mottattdata» som et serialisert

java-objekt.

• Det finnes en testklient i prosjektet: «mottakerTestKlient», som tar en xls-fil som

input og leverer dataene til webtjenesten.

Renteimport

• Java-applikasjon henter data fra Oslo børs via FTP og legger dataene i

databasetabellen.

• Applikasjonen er designet for å kunne importere valutakurser fra Norges bank, men

dette er ikke i bruk hverken i vår versjon eller i nåværende Avkastningsportal.

Beregning

• Når java-applikasjonen «Beregning» kjøres, tar den dataene fra mottattdata,

prosesserer dem med rentene (som er hentet med renteimport) og legger så disse i

databasetabellen «avkastningsdata».

Rapportering

• Henter dataene fra databasetabellen «avkastningsdata» og «organisasjon».

• Består av to ting:

o Web GUI, hvor man kan se avkastningsdataene.

o Webtjeneste (SOAP) for uthenting av avkastningsdata. Dette er en åpen

webtjeneste som brukes av Finansportalen.

Brukergrensesnitt for Avkastningsportal

Brukergrensesnittet til Avkastningsportal tillater brukerne å manipulere visning av tabelldata

med filter for sammenligning av avkastningsdata. Nettsiden er beregnet for sluttbrukere som

har et spesifikt informasjonsbehov og vet hva slags informasjon de er ute etter, såkalt

known-item-seeking (Rosenfeld, Morville & Arango, 2015, s. 45-50 og s. 122).

Page 11: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

5

Avkastningsportal er basert på en databaseorientert struktur og er organisert etter

forhåndsdefinerte kategorier som representerer innholdet på siden.

Figur 1-4 - Skjermbilde av brukergrensesnittet til Avkastningsportal

Brukergrensesnittet har to filter:

• Et for filtrering av risikoklasser etter kategorier.

• Et for filtrering av avkastningsperiode etter år.

Ved siden av risikoklasse filteret finnes en “Avansert/Enkel” knapp som endrer risikoklassene

mellom numeriske verdier og Lav, Medium, Høy.

Figur 1-5 - Filter for risikoklasse Lav, Medium og Høy

Figur 1-6 - Filter for risikoklasse 1-10

Page 12: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

6

Figur 1-7 - Sammenligning av flere pensjonsordninger

1.6 Tabelloversikt over Avkastningsportals teknologier

Java Java er et klassebasert, objektorientert

programmeringsspråk som Avkastningsportal

er skrevet i

Spring boot Spring boot er et rammeverk for å blant

annet lage web-baserte Java-applikasjoner

Maven Verktøy for å forenkle

byggeprosessen av Java-applikasjoner

Page 13: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

7

MySQL Relasjonsdatabase for lagring av data

Jetty HTTP-server for å kjøre web-baserte Java-

applikasjoner

HTML Standard markup-språk for å presentere

websider og webdokumenter

JavaScript Programmeringsspråk som brukes for å lage

interaktive effekter og interaksjon med

grensesnitt på websider

CSS Cascading style sheets er et språk for å lage

presentasjoner og stiler på websider

Figur 1-8 - Tabell med teknologier brukt i Avkastningsportal

1.7 Mål og strategi

Prosjektgruppens målsetting

Vi satt oss som mål å bruke moderne teknologi og effektive metoder for å tilrettelegge

flytting av Avkastningsportal til en skyløsning. For å oppnå dette ville vi bruke

konteinerteknologi, som er fremtidsrettet innen virtualisering i moderne infrastrukturer. Vi

ønsket å automatisere løsningen mest mulig med kontinuerlig integrasjon og levering, med

et endelig mål om at Avkastningsportal skulle kjøre problemfritt i skyen.

Page 14: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

8

Prosjektgruppens strategi og motivasjon

Prosjektet har en helning mot DevOps, som handler om effektivisering og automatisering i

bindeleddet mellom utvikling og drift. Prosjektet handler således om å modernisere

applikasjonen og dens infrastruktur for å muliggjøre kontinuerlig integrasjon og levering. Vi

hadde som mål å oppnå dette ved å benytte ulike verktøy og fremtidsrettede teknologier

ved hjelp av smidige metoder for å tilpasse Avkastningsportal for flytting til en skyløsning.

Motivasjonen var å tilegne oss ny kunnskap om et fagfelt vi ikke hadde kjennskap til, noe

som gir verdifull erfaring til arbeidslivet og ytterligere faglig tyngde.

1.8 Teknologier i prosjektet

Under prosjektperioden tok vi i bruk mange nye teknologier og verktøy, i tillegg til noen vi

hadde tidligere erfaring med. Disse er oppsummert i tabellene nedenfor.

Teknologier i løsningen

Ubuntu 16.04 Ubuntu er et open source

operativsystem og Linux-distribusjon.

Docker 17.12 Docker er en plattform for å bygge,

pakke og kjøre distribuerte

applikasjoner.

Alpine 6.0 Alpine Linux er en nedstrippet og

lettvekts Linux-distribusjon.

Rancher 1.6 Plattform for håndtering og utplassering

av konteinere.

Page 15: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

9

Drone 0.82 Kontinuerlig leveringsplattform for

automatisk bygging og testing av

applikasjoner.

Janitor 1.7.1 Janitor tar seg av automatisk rydding av

ubrukte images på hostene for å spare

diskplass og holde konteinermiljøet

ryddig.

Digital Ocean DigitalOcean er en skyinfrastruktur-

tilbyder.

Amazon Web

Services EC2

AWS EC2 er en skytjeneste som sørger

for enkel og sikker skalering av

skybaserte infrastrukturer.

Amazon RDS Amazon Relational Database Service er

en AWS-tjeneste for relasjonsdatabaser.

Github og Git Github er et versjonskontrollsystem som

benytter Git-teknologien.

Elasticsearch

(ELK stack)

Elasticsearch er en RESTful søkemotor

som indekserer filer og dokumenter.

Page 16: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

10

Logstash

(ELK stack)

Logstash er et verktøy for å samle inn og

strukturere datalogger fra ulike kilder.

Kibana

(ELK stack)

Kibana er et verktøy som fremstiller

visualiseringer av data fra Elasticsearch-

indekser.

Logspout Logspout er et tilleggsverktøy som

henter logger fra kjørende konteinere og

videresender dem til ønsket

destinasjon(Logstash).

Figur 1-9 - Tabell med teknologier brukt i vår løsning av Avkastningsportal

Arbeidsverktøy

IntelliJ IDEA IntelliJ er et Java-integrert utviklingsmiljø

for programvareutvikling.

MySQL

Workbench

Workbench er et verktøy for å designe og

håndtere MySQL-baserte

relasjonsdatabaser.

Figur 1-10 - Tabell med arbeidsverktøy brukt i prosjektet

Page 17: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

11

Verktøy for styring og kommunikasjon

Trello Prosjektstyringsverktøy for styring av

oppgaver og gjøremål. Ble brukt som

Kanban tavle.

Slack Skybasert kommunikasjonstjeneste for

samarbeid. En privat kanal ble opprettet

slik at gruppen kunne kommunisere med

oppdragsgiver over nettet.

Facebook

messenger

Messenger er chat-tjenesten til

Facebook. En intern gruppechat ble

opprettet slik at prosjektgruppen kunne

kommunisere over nettet.

Google Drive Drive er system for lagring og

synkronisering av filer. Drive ble benyttet

gjennom hele prosjektperioden for å

holde orden på filer og dokumenter, og

editering av tekstdokumenter i sanntid.

Microsoft

Word

Word er et skriveprogram som inngår i

Microsoft Office-pakken. Ble brukt til å

utforme og skrive alle tekstdokumenter.

Draw.io Draw er et nettbasert verktøy som ble

brukt for å designe og utforme

diagrammer og illustrasjoner.

Page 18: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

12

Zotero Zotero er et gratis

kildehåndteringsverktøy som ble brukt

for å holde orden på kildereferanser.

Figur 1-11 - Tabell med verktøy for styring og kommunikasjon brukt i prosjektet

1.9 Faglig innhold

I arbeidet med prosjektet måtte vi sette oss inn i ny teknologi og teori vi ikke var kjent med

fra tidligere. Dette har i hovedsak dreid seg om DevOps, konteineriseringsteknologi og

skytjenester. Kontinuerlig integrasjon og leveranse, samt driftstjenester som logging og

overvåkning er andre temaer vi har jobbet med. Utover dette har vi benyttet teori og

praksis fra fag som systemutvikling, operativsystemer, testing av programvare,

informasjonsarkitektur og universell utforming i prosjektet. Det er i tillegg tatt hensyn til

universell utforming og tilgjengelighet ved at rapporten følger WCAG 2.0-standarden.

Page 19: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

13

2 Kravspesifikasjon

2.1 Hensikt

Kravspesifikasjon benyttes under planlegging av prosjekter for å identifisere og beskrive

funksjonelle krav om brukerfunksjonalitet og ikke-funksjonelle krav, som ytelse, robusthet

og sikkerhet. I dette prosjektet har oppdragsgiver stilt svært få spesifikke krav og vi har hatt

høy grad av frihet til å løse oppdraget slik vi selv ønsket.

2.2 Endringer i krav

I utgangspunktet var kravspesifikasjonen kort og kun utviklet av oppdragsgiver. Dette gjaldt

krav om at applikasjonen skal kjøre i skyen, håndtering av innloggingsinformasjon og krav

om oppetid. Vi har tilført nye krav underveis i arbeidsprosessen når ny innsikt avdekket

behov for dette. Tilførte krav har hatt som hensikt å sikre kvalitet i løsningen gjennom

reduksjon i kostnader relatert til drift og hosting av applikasjonen, samt forenkle arbeidsflyt

ved bruk av løsningen. Krav av høy viktighet har blitt prioritert.

På grunn av sikkerhetshensyn bestemte oppdragsgiver at et administrasjonsgrensesnitt,

samt dets funksjonalitet, ikke skulle inngå i vår løsning eller kildekoden vi fikk utlevert. Dette

web-baserte administrasjonsgrensesnittet, hvor Excel- og XML-filer kan lastes opp, brukes i

dag av bedrifter for innlevering av avkastningsdata. Applikasjonen sørger for sikkerhet

gjennom integrasjon med ID-porten via egen kildekode. Også ulike SSL-sertifikater ligger i

kildekoden. Oppdragsgiver mente det kunne bli vanskelig å skulle ta hensyn til sikkerheten

rundt dette og få til integrasjon med ID-porten ved flytting av applikasjonen til skyen.

En mulig løsning på problemet, foreslått av oppdragsgiver, var å implementere en

synkroniseringsfunksjon mellom vår applikasjon i skyen og innrapporterte data på kundens

eksisterende webservere. Denne integrasjonen ble forelagt som en mulig ekstraoppgave

dersom det fantes tid etter at andre oppgaver var løst. Mot slutten av arbeidet med

oppgaven fikk vi vite av oppdragsgiver at det allerede fantes funksjonalitet i kildekoden for å

sette opp en SOAP-basert webtjeneste som avkastningsdata kunne leveres inn mot, ved

hjelp av verktøy som SoapUI. Dette ble vi ikke kjent med før vi var ferdig med den tekniske

delen av oppgaven.

Page 20: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

14

2.3 Funksjonelle krav

Det har ikke blitt stilt funksjonelle krav fra oppdragsgiver ettersom koden i systemet ikke skal

endres. Det har derfor ikke blitt foretatt analyse av brukervennlighet eller bruk av systemet

generelt, foruten å kontrollere at manuelle systemtester for brukergrensesnittet bestås.

Prosjektgruppen har derfor satt egne funksjonelle krav som vi mener er hensiktsmessige.

Krav Viktighet

Oppgradering av applikasjonen skal skje automatisk ved oppdatering av

kildekode i versjonshåndteringssystemet

Middels

Nyutviklet kode skal automatisk testes for feil ved integrasjon og levering Middels

Figur 2-1 - Tabell over funksjonelle krav

2.4 Ikke-funksjonelle krav

Oppdragsgiver har ikke stilt ikke-funksjonelle krav utover at applikasjonen skal kjøre på en

skybasert løsning og håndtere “secrets”1. Vi har derfor utviklet egne krav underveis som skal

sikre kvalitet i løsningen og legge til rette for videreutvikling.

Krav Viktighetsgrad

Applikasjonen skal kjøre i skyen Høy

Applikasjonen skal oppføre seg som i eksisterende løsning med samme

funksjonalitet

Høy

Secrets skal håndteres på en sikker måte og ikke lagres i kildekoden. Høy

Applikasjonen skal kjøre i et miljø som håndterer sikkerhet Høy

1 “Secrets” omfatter sensitiv informasjon slik som påloggingsinformasjon, databasetilkoblingsinformasjon, SSL-nøkler og andre former for autorisasjon som av sikkerhetsmessige hensyn ikke skal bli kjent for utenforstående.

Page 21: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

15

Applikasjonen skal kjøre stabilt med en høy grad av oppetid Høy

Applikasjonen skal kjøre i et konteinerbasert miljø Lav

Applikasjonen skal kjøre i et miljø med lang levetid Middels

Løsningen skal kunne utvides med ytterligere ny funksjonalitet ved å

konfigurere eller legge til nye komponenter for ytterligere grad av

automasjon i leveranseprosessen.

Middels

Figur 2-2 - Tabell over ikke-funksjonelle krav

2.5 Spesifisering av rammekrav

Rammekrav for systemet er krav som gjelder systemet som helhet. Dette innebærer for

eksempel sikring mot tap, ødeleggelse, tyveri og misbruk av data, kapasitet og fremtidig

utvidelse av systemet.

Sikkerhet

Offentlige webtjenester har alltid risiko for å bli utsatt for DDoS-angrep2. Løsningen må

kunne håndtere disse angrepene med minst mulig nedetid. Databasen må ligge i et sikkert

miljø slik at uvedkommende ikke kan få tilgang. Med dataintegritet menes det at

informasjonen som ligger i portalen er korrekt og ikke kan manipuleres.

2.6 Hosting

I forbindelse med skytjeneste-hosting er det fra oppdragsgivers kun krav om høy grad av

oppetid. Stabilitet forutsetter også at hosten støtter de teknologiene som er blitt brukt. Pris

er av mindre betydning på grunnlag av lite trafikk og beskjeden størrelse på applikasjonen.

2 Et DDoS-angrep er når en webtjeneste med vilje blir overbelastet av en gruppe med angripere ofte bestående av et nettverk av infiserte maskiner, såkalt botnet. Resultatet er at tjenesten går ned og ikke lenger kan nås for vanlig bruk

Page 22: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

16

2.7 Levetid

Det er ønskelig at systemet skal ha lengst mulig levetid. Dette innebærer at teknologi som

benyttes i løsningen må opprettholdes av utgiver. Ulike versjoner av programvare kan ha ulik

grad av støtte fra utgiver. Teknologi som ikke lenger støttes gir ikke garantier for at de

fungerer som de skal eller at kompatibilitet mot andre teknologier og programvare er

opprettholdt.

Page 23: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

17

3 Prosessdokumentasjon

3.1 Arbeidsmetode

Det er forskjellige måter å praktisere smidig utvikling på. I dette prosjektet har vi benyttet

elementer fra Lean metodikk og smidig utvikling som vi har tilpasset etter våre behov med et

overordnet fokus på å levere verdi til kunden. Lean er en helstøpt filosofi og har sitt utspring

fra Toyota Production Systems allerede på 1940-tallet. Lean handler om å forstå hva som er

av verdi for kunden og maksimere verdi så mye som mulig, samtidig som sløsing av ressurser

minimeres. Det handler om å kontinuerlig forbedre for å standardisere arbeid. Lean er

opprinnelig beregnet for industri- og produktutvikling, men passer også for programvare og

utviklingsprosjekter («Hva er Lean?», udatert).

Smidig arbeidsmetodikk vektlegger samspill mellom mennesker ansikt til ansikt, og ønsker

endringer i krav velkommen, selv sent i utviklingsprosessen. Kundens behov er av høyeste

prioritet. Utviklere jobber i selvstyrte team for å løse problemer mer effektivt. Dette blir

gjort gjennom hyppige iterasjoner med kontinuerlig leveranse hvor målet er å lage

fungerende programvare av fremragende kvalitet (“Manifesto for Agile Software

Development,” udatert). Dette bunner ut i 12 prinsipper som fungerer som veiledning og

manifest for smidig utvikling:

1. Vår høyeste prioritet er å tilfredsstille kunden gjennom kontinuerlige leveranser av

verdifull programvare.

2. Ønsk endringer i krav velkommen, selv sent i utviklingsperioden. Smidige prosesser

gjør endringer til konkurransefortrinn for kunden.

3. Lever fungerende programvare ofte, fra noen uker til noen måneder. Helst på kortest

mulig tid.

4. Forretningsfolk og utviklere må jobbe sammen daglig gjennom hele prosjektet.

5. Bygg prosjekter rundt motiverte individer. Gi dem miljøet og støtten de trenger, og

stol på at de får jobben gjort.

Page 24: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

18

6. Den mest effektive metoden for å overføre informasjon i et utviklingsteam er å

snakke ansikt til ansikt.

7. Fungerende programvare er hovedmåleenheten for progresjon.

8. Smidige prosesser fremmer bærekraftig utvikling. Sponsorer, utviklere og brukere bør

holde samme tempo.

9. Kontinuerlig fokus på teknisk overlegenhet og god design forbedrer smidighet

10. Simplisitet, kunsten av å minimere arbeidsmengde er essensielt.

11. De beste krav og løsninger kommer fra selvstyrte team.

12. I regelmessige intervall, reflekter på hvordan bli mer effektiv og juster atferd

deretter.

Vi benyttet Kanban for å styre gjøremål og effektivisere kommunikasjon i prosjektet.

Gjennom visuell håndtering av arbeidsoppgaver, optimaliseres arbeidsflyt og sløsing

reduseres i henhold til Lean metodikken. En Kanban-tavle kan være noe så enkelt som et

whiteboard med post-it lapper, som er inndelt i kolonner bestående av arbeidsoppgaver som

viser hva som skal gjøres og når, hva som er under arbeid og hvilke oppgaver som er utført.

Vi har brukt en digital Kanban-tavle i Trello for holde styring på arbeidsoppgaver. Dette ga

oss enkel tilgang til og administrering av oppgavene.

Kanban er basert på fire prinsipper, som underbygger og støtter Lean-metodikken, og som

ifølge LeanKit (2018) hjelper for å redusere sløsing og maksimere verdi.

• Visualisere arbeidsoppgaver

• Begrense arbeid under arbeid

• Fokus på flyt

• Kontinuerlig forbedring

Page 25: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

19

Figur 3-1 - Kanban-tavle (LeanKit, 2018)

3.2 Utfordringer med arbeidsmetode

I starten av arbeidet gikk det mye tid på tilegning av kunnskap, noe som gjorde det vanskelig

å planlegge arbeidet etter en bestemt arbeidsmetodikk. Vi hadde under store deler av

prosjektperioden begrenset oversikt over detaljene, og jobbet derfor med større

overordnede arbeidsoppgaver som vi løste i plenum. Selv om vi ikke har fulgt en agil

arbeidsprosess til punkt og prikke har det likevel vært god arbeidsflyt i prosjektet. Det viste

seg utfordrende å jobbe smidig på grunn av manglende erfaring med prosjektets tematikk. Vi

har likevel tilpasset oss situasjonene som oppsto, og håndtert problemstillinger og

kravendringer underveis.

På grunn av vesentlige endringer i krav og arbeidsoppgaver opplevdes det som ekstraarbeid

uten særlig utbytte å opprettholde definerte oppgaver på kanban-tavlen. Vi kom i stedet

frem til at direkte kommunikasjon innad i gruppen fungerte bedre. Vår erfaring med Trello

tilsier at dette og andre arbeidsstyringsverktøy kommer bedre til sin rett i større prosjekter

hvor koordinasjon og kommunikasjon er en større utfordring.

Page 26: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

20

3.3 Planlegging og arbeidsfordeling

Under forprosjektet forsøkte vi å kartlegge hvilke arbeidsoppgaver som måtte løses og i

hvilke faser av arbeidet disse skulle utføres. Vi opprettet faser med milepæler som virket

fornuftige på bakgrunn av forarbeidet vi hadde gjort. Ut i fra dette laget vi en overordnet

fremdriftsplan.

Milepæler i prosjektet

1. Valg av arkitektur og tjenestetilbyder

2. Utvikling av fungerende applikasjon i preproduksjon

3. Migrering og testing av eksisterende løsning over til skyløsning

4. Produksjonssetting av applikasjon

5. Ferdigstille sluttrapport

6. Ferdigstille presentasjon

Figur 3-2 - Fremdriftsplan

I tidlig fase av prosjektet trodde vi at løsningen vår skulle tjene reelle brukere av

Avkastningsportal. Vi så derfor for oss en ekstensiv testfase vedrørende tilgjengelighet,

sikkerhet og arbeidsmengde hos tjener. I møte med oppdragsgiver ble det imidlertid avklart

at dette ikke var tilfelle. Testingen i dette prosjektet har i stedet hovedsakelig bestått av

regresjonstesting. Testfasen i fremdriftsplanen fremkommer derfor som mer omfattende

enn den i praksis har vært.

Page 27: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

21

Oppdragsgiver anbefalte oss tidlig å løse oppgavene mest mulig i plenum for best mulig

læringsutbytte. God dialog med oppdragsgiver gjorde at vi kunne diskutere og resonnere oss

frem til mulige løsninger, og gjorde det enklere å se helhetlig hvordan problemstillingene

kunne løses. Etterhvert som tekniske oppgaver ble tydeligere definert, delte vi

arbeidsoppgaver som rapportskriving og utvidelser i løsningen som ble løst individuelt.

Det har ikke vært anledning til å arbeide hos oppdragsgiver, med unntak av møter som ble

avholdt hos Kantega. Prosjektgruppen har derfor møttes på universitetet to til tre ganger i

uken gjennom mesteparten av arbeidsprosessen. I tillegg til felles arbeidsøkter har vi jobbet

individuelt. Det individuelle arbeidet har i stor grad bestått av informasjonssøk og forskning

rundt temaer og teknologier som var relevante for vårt arbeid. Resultater av teknisk arbeid

og forskning ble dokumentert underveis. Arbeidet med sluttrapporten ble gjennomført i den

avsluttende fasen av prosjektet, hvor vi møttes oftere for å unngå tidspress under

ferdigstilling av oppgaven.

3.4 Utviklingsprosessen

Før oppdraget var ferdig utformet og kontrakten ble inngått med oppdragsgiver, var det

aktuelt at modernisering av applikasjonen skulle inngå i oppgaven. Dette gjaldt migrasjon av

løsningen over til Java 8 og implementasjon av ny funksjonalitet som lambda-funksjoner og

metodereferanser. Dette er beskrevet i prosjektskissen og forprosjektrapporten som en

mulig oppgave. Denne oppgaven ble imidlertid utført av oppdragsgiver før arbeidet med

prosjektet begynte og har derfor ikke vært aktuelt å jobbe med for prosjektgruppen.

Under det første møtet med oppdragsgiver ble et overblikk av webapplikasjonen og

systemet presentert for oss. På dette tidspunktet var det fremdeles uklart om modernisering

av applikasjonens kildekode skulle være en del av oppgaven. I første omgang fikk vi vite at

brukergrensesnittet ikke skulle oppgraderes. Grunnen til dette var at grensesnittet allerede

var enkelt å bruke, og at brukerne var fornøyde med grensesnittet slik det er i dag. Vi fikk

tidlig vite at det kunne være sikkerhetsmessige utfordringer rundt bruken av ID-porten og

innlogging på websiden for administrasjonsmodulen. Dette viste seg senere å være tilfelle

etter opplysning fra oppdragsgiver, og ble dermed fjernet fra oppdragsbeskrivelsen. Frem til

Page 28: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

22

oppdraget var ferdig spesifisert av oppdragsgiver brukte vi tiden på å sette oss inn i

teknologier og verktøy vi ville vurdere å ta i bruk for å løse oppgaven. Skytjenester var et

tema vi måtte sette oss grundig inn i. Her møtte vi store mengder med informasjon. Vi

hadde foreløpig ikke fastsatt rammer for våre krav og behov til skyløsningen vi skulle bruke,

og hadde heller ikke spesifikasjoner fra oppdragsgiver. Denne vurderingen skulle vi ta selv.

Tidlig i utviklingsfasen gjorde oppdragsgiver oss oppmerksomme på fremtidsrettede og

effektive måter å kjøre applikasjoner i skyen på. Slik ble vi introdusert for Docker, noe

oppdragsgiver utfordret oss til å dra nytte av. Vi hadde ikke tilgang til kildekoden før

slutten av januar, og brukte derfor mye tid på å tilegne oss kunnskap om konteinerteknologi

og mikrotjenester frem til vi fikk tilgang til koden. Det gikk også mye tid på å få

Avkastningsportal til å kjøre på våre lokale datamaskiner etter at kildekoden ble utdelt.

I første omgang forsøkte vi å sette opp lokale utviklingsmiljøer på Windows 10 Home som

ikke hadde Hypervisor3 og dermed heller ikke støtte for virtualisering. Fremfor å installere

Windows 10 Pro eller Enterprise som har støtte for dette, bestemte vi oss for å kjøre Docker

på en Linux-distribusjon (Ubuntu 16.04), som også er et krav for å kjøre Rancher.

Vi innså tidlig at det var hensiktsmessig å ha et felles utviklingsmiljø på høgskolens

serverpark. Slik kunne vi eksperimentere fritt uten å være redd for å ødelegge noe eller

risikere unødvendige utgifter. Et ferdigutviklet miljø og oppsett kunne derfor enklere og

raskere gjenskapes på skytjenesten. Siden oppdraget ble noe avgrenset fra oppdragsgivers

side ønsket vi å utvide løsningen ved å tilrettelegge for kontinuerlig integrasjon og levering.

Vi har derfor satt opp og konfigurert automasjonsserveren Drone. I tillegg har vi satt opp

Janitor, som kjører i Rancher og frigjør diskplass ved å slette ubrukte konteiner-images.

Etter at vi hadde en fungerende løsning kjørende med kontinuerlig integrasjon på skolens

VM, opprettet vi konto hos Amazon Web Services og DigitalOcean. Slik hadde vi tre miljøer

med hvert sitt formål å jobbe på:

3 Hypervisor er en teknologi som tillater brukeren å lage virtuelle maskinvareressurser. Dette er ikke tilgjengelig i Home-versjonen av Windows 10.

Page 29: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

23

• Utviklingsmiljø (VM hos OsloMet)

• Preprod-miljø4 (VM hos DigitalOcean)

• Produksjonsmiljø (Amazon AWS EC2)

Slik fikk vi testet ut automasjon i kontinuerlig integrasjon og leveranse ved implementasjon.

Vi brukte den resterende tiden i utviklingsfasen på å sette opp utvidelser i Rancher.

Utfordringer med lokale utviklingsmiljøer

Første installasjonsoppsett på lokale maskiner gjorde vi hovedsakelig i felleskap på egne

maskiner. Etter at vi alle hadde fått Avkastningsportal til å kjøre med Windows installert,

fant vi ut at Home versjonen ikke støtter virtualisering. Docker krever Windows Pro eller

Enterprise. Vi installerte derfor Linuxdistribusjonen (Ubuntu 16.04) siden dette er et krav for

å kjøre Rancher. Vi opplevde noen utfordringer med å få applikasjonen til å kjøre i Ubuntu,

men etter flere tapte forsøk, utviklet vi en installasjons- og konfigurasjonsguide for å gjøre

prosessen enklere ved andre anledninger. Denne har senere blitt omskrevet til vedlegget

Konfigurasjonsoppsett.

3.5 Virtuelt utviklingsmiljø

Vi fikk tildelt en virtuell server fra universitet med operativsystemet Ubuntu 16.04 installert.

VM-en har følgende adresse: http://hp5.vlab.cs.hioa.no.

Utfordringer med ressurser og tilgang

Den virtuelle maskinen vi fikk fra universitet viste seg lite egnet til å kjøre Rancher med de

ressursene vi fikk tildelt til å begynne med: én CPU med 2GB minne og 3GB lagringskapasitet.

Serveren var treg og uresponsiv før vi fikk tilgang på ressursene vi trengte for å kunne

eksperimentere med programvaren. Forespørsler om ytterligere ressurser

måtte etterspørres i flere omganger. Vi opplevde problemer med brannmuren på

universitetets nettverk, og ble blokkert når vi å la til host i Rancher. Problemene ble

etterhvert løst, men dette tok mye tid og frustrasjon som forhindret arbeid og fremdrift og

4 “Preprod” er oppdragsgivers navn på et staging-miljø. Dette er et testmiljø laget for å ligne så mye som mulig på et produksjonsmiljø og brukes til testing av løsninger som er antatt produksjonsklare.

Page 30: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

24

medførte at vi heller leide en virtuell server fra DigitalOcean vi selv kunne administrere.

Kostnader for leie av VM-en har blitt tilbakebetalt fra oppdragsgiver.

Page 31: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

25

4 Teknologier og vurderinger

4.1 DevOps

DevOps-fenomenet dreier seg om en filosofi og et tankesett som har fått mye

oppmerksomhet i IT-verden de senere år hvor skytjenester og effektive metoder er den nye

trenden for å utvikle og levere tjenester over internett. Dette prosjektet trekker inn enkelte

elementer fra DevOps-praksiser, hvor målet er å oppnå effektiv drift og vedlikehold av

Avkastningsportal. Løsningen so mer utviklet i prosjektet legger bedre til rette for

implementasjon av DevOps-praksis hos oppdragsgiver.

Som ordsammensetningen DevOps antyder, (eng: Development and Operations) er samspill

og delt ansvar mellom utvikling (Dev) og drift (Ops) essensen bak tankegangen. Formålet er

å akselerere levering, ved å benytte prosesser og verktøy for å drive effektiv utvikling og

drift. Leveranse til kunde foregår derfor hyppig og kontinuerlig, og misforståelser mellom

teammedlemmer reduseres slik at problemer kan løses raskere og mer effektivt. Med en

DevOps tilnærming når ny funksjonalitet raskere frem til markedet, og kan derfor gi fordeler

for både it-selskaper, kunder og ikke minst brukere (Ebert, Gallardo, Hernantes, & Serrano,

2016).

I følge Jabbari, bin Ali, Petersen, & Tanveer (2016) som har forsket på definisjoner og

praksiser i DevOps, ble det konkludert med følgende definisjon:

“DevOps er en utviklingsmetode som har til formål å tette gapet mellom utvikling og drift,

som vektlegger kommunikasjon og samarbeid, kontinuerlig integrasjon, kvalitetssikring og

levering med automatisert distribusjon og utplassering ved å benytte et sett med

utviklingspraksiser”.

I praksis innebærer DevOps følgende faser:

• Bygging

• Kontinuerlig Integrasjon (CI)

• Utplassering (CD)

• Drift

Page 32: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

26

• Logging

• Overvåking

Kulturskifte

For å kunne omfavne DevOps må utviklere ifølge Ebert et al., (2016), ta en full-stack utviklers

tilnærming, hvor de tar ansvar for både testing og utplasseringsmiljøet. Utviklere må mestre

et sett ferdigheter utover kunnskap om kode, som for eksempel databaseadministrasjon,

automasjon og testing. I så måte kan utviklere jobbe sammen med testere, hvor begge

parter kan tilegne seg teknisk kunnskap fra hverandre. Fra et driftsperspektiv påvirker

DevOps i stor grad deres disipliner, som tilsier at driftsteam må samarbeide tett sammen

med utviklere der flytende kommunikasjon essensielt for å kunne lykkes. Videre peker Ebert

et al. (2016) på fire nøkkelpunkter som er nødvendig for å legge til rette for DevOps.

• Det er nødvendig å bryte ned komplekse arkitekturer og funksjonssett til små biter

som blir produsert og utplassert uavhengig av hverandre.

• Det er nødvendig å opprettholde konfigurasjon og bygge miljøer som tilbyr konstant

synlighet av hva som brukes, med versjoner og deres avhengigheter.

• Det er nødvendig å introdusere et spesialtilpasset utviklings og produksjonsmiljø som

stammer fra produktets livssyklushåndteringsmiljøer.

• Det er nødvendig å tette gapet mellom tradisjonelle kulturer innen utvikling og drift.

DevOps, smidig utvikling, lean og kontinuerlig levering

DevOps blir sett på som en utvidelse av smidig utvikling der endringer ønskes velkomne og

responderes på raskt under korte iterasjoner. I følge Lwakatare, Kuvaja, & Oivo (2016) som

har sett på relasjonen mellom DevOps, smidig utvikling, lean metodikk og kontinuerlig

levering, er det indikasjoner på at DevOps stammer fra kontinuerlig levering som en

evolusjon av smidig utvikling med Lean prinsipper som bakgrunn. Dette kommer spesielt av

prinsipper i det agile manifestet som fremmer mål om å tilføye drift de samme verdier, ideer

og praksiser fra agile metoder som utviklere. Det ble også konkludert med at for å få en

vellykket adopsjon av DevOps er det et krav å praktisere smidig utvikling. Forutsetningen er

Page 33: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

27

at utviklings- og driftsteam jobber tett sammen og forstår hverandres behov og

prioriteringer, på samme måte som agile metoder krever at utviklere jobber tett sammen

med kunder for å forstå deres forretningsbehov og løser problemene sammen. Lwakatare

et.al (2016) belyser også at det er flere elementer i DevOps. Eksempler på disse er

håndtering av kode-branching, kontinuerlig integrasjon (CI) og levering (CD), samt

automatisert testing som er bakt inn i prosessen.

DevOps er et tema som ofte forbindes med kontinuerlig integrasjon, konteinere og

byggeverktøy som bransjestandard. Dette er nyttige verktøy i DevOps, men det blir også

uttrykt i artikkelen at det beste tilfellet for å oppnå DevOps kan være så enkelt som at en

ansatt fra driftsavdelingen setter seg ned sammen med en utvikler og planlegger

infrastrukturen i fellesskap. Læring, kunnskap og samarbeid trekkes også frem, noe som

bryter ned kunnskapssiloer, forenkler og muliggjør kommunikasjon, og alt i alt øker

organisasjoners kompetanse (Lwakatare, Kuvaja, & Oivo, 2016, side 1-11).

DevOps oppsummert

DevOps bygger på Lean-metodikk og smidige praksiser som påvirker hele IT- og

programvareindustrien. DevOps betyr kort og godt en ende-til-ende automatisering innen

programvareutvikling og levering, og vil være vanskelig å oppnå med en standardoppskrift

og -tilnærming. Utviklere spesielt vil tjene godt på bedre samhandling med driftsteam, noe

som typisk oppnås gjennom delt forståelse for krav i forhold til vedlikehold og

videreutvikling. Slik kan kostnader ifølge Ebert et al. (2016) reduseres med opptil 20 prosent,

men ettersom produkter og livssyklusprosesser varierer i stor grad er det nødvendig for

organisasjoner å tilpasse sin egen kultur med arkitektur og verktøy for å kunne oppnå

DevOps i praksis.

Prosjektoppgaven handler om å effektivisere drift og vedlikehold av Avkastningsportal med

konteineriseringsteknologi. Oppdragsgiver har uttrykt ønske om å gjøre tilsvarende arbeid

med flere av sine systemer, og vi har fått veiledning av deres nyansatte DevOps-konsulent. Vi

antar derfor at DevOps er noe oppdragsgiver ønsker å satse på. Likevel har vi kun en

grunnleggende forståelse av arbeidskulturen hos Kantega og kan vanskelig si hva et slikt

kulturskifte vil måtte innebære for å dra fullt nytte av DevOps.

Page 34: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

28

Figur 4-1 - Illustrasjon av DevOps-syklus (Atlassian, udatert)

4.2 Tradisjonell VM-arkitektur og konteinerarkitektur

Skytjenester baserer seg på virtualiseringsteknologi og gir fleksibilitet ved deling av ressurser

i stor skala og utnytter ressursene på en maskin i større grad enn fysiske maskiner.

Virtualiseringsteknologi er en essensiell del av moderne skytjenester og har vært grunnlaget

for arkitekturen som er brukt i skytjenestene. Hovedfokuset til virtuelle maskiner er

administrering og allokering av fysiske maskinressurser og dermed ofte tilbudt som en IaaS-

tjeneste (Infrastructure as a Service). Dagens virtuelle servere/skytjenester kjører på fysiske

maskiner med hjelp av hypervisor, lokalisert på store datasentre omkring i verden.

Hypervisor er et program som kjøres på fysisk maskin for muliggjøring av virtualisering.

I praksis betyr dette at en kraftig maskin kan deles opp i mange mindre virtuelle maskiner

med egne operativsystemer og kan brukes på samme måte som en tradisjonell fysisk maskin.

Teknologien muliggjør en mer effektiv arkitektur, samt isolering av applikasjoner hvor for

eksempel forskjellige deler av applikasjonen kjøres på forskjellige virtuelle maskiner

opprettet på samme fysiske maskin. For eksempel kan webjenesten i en større applikasjon

kjøres fra en virtuell webserver, mens endringer samtidig kan utføres i back-end på en annen

del av applikasjonen som kjører på andre virtuelle maskiner, en såkalt reverse proxy løsning.

Page 35: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

29

Fremveksten av virtuelle maskiner har drastisk redusert kostnadene ved IT-drift. Denne

kostnadsreduksjonen gjør det enklere for bedrifter å skille ut egen IT-drift til leverandører

med tilgang til datasentre. I tillegg til kostnadsreduksjon har virtualiseringsteknologi fordeler

som blant annet raskere republisering av maskiner, enklere backup, bedre støtte for testing,

katastrofeløsninger, klyngehåndtering av maskiner og enklere migrering til skyen

(Techrepublic, 2013).

Figur 4-2 - Tradisjonell VM-arkitektur vs. konteinerbasert arkitektur (Pahl, 2015)

Til tross for effektiviteten ved tradisjonell virtualisering er det fremdeles mulig dra bedre

nytte avressursbruk på virtuelle maskinene. Ved bruk av konteinerteknologi er det mulig å

effektivisere ressursbruken på datasentre med ytterligere 10%, og dette er et tall som

fremdeles vokser (M.J Scheepers, 2014). Konteinerteknologi er ikke en erstatning for

tradisjonelle VM-er, men kan heller ses på som en naturlig evolusjon innen virtualisering.

I motsetning til tradisjonell virtualiseringsteknologi med statiske ressurser låst til hver VM, er

konteinerteknologi mer fleksibelt med dynamisk bruk av ressurser. Konteinerteknologi er

laget for å pakke, isolere og sende kildekode med dets avhengigheter uavhengig av andre

konteinere, og benytter kun de fysiske ressursene konteineren har behov for. Låste ressurser

står derfor ikke ubrukt slik som det gjør ved tradisjonell virtualisering.

Dette tillater større fleksibilitet ved utvikling, drift og endringer av IT-systemer. Det finnes i

Page 36: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

30

flere typer konteinerteknologier, men Docker er mest utbredt. Tabellen nedenfor viser

hovedforskjellene mellom tradisjonell VM og konteinerteknologi.

Virtuell maskin Docker

Virtuelle maskiner kjører på virtuell

hardware, og gjeste operativsystemet vil bli

lastet inn i sitt eget minne(RAM).

Gjester deler samme operativsystem, som

host OS, som er lastet inn i fysisk minne

(RAM).

Kommunikasjon mellom gjester via

nettverksenheter kan være programvare.

Kommunikasjon mellom gjester er gjennom

pipes, sockets, bridges etc.

Sikkerhet kommer an på type hypervisor. Mangler sikkerhetstiltak?

Mer overhead på grunn av kompleksitet. Mindre overhead på grunn av lettvekts

konteinere.

Tar tid å starte opp (boote). Raskt å starte opp (boote).

Bruker mer minne ettersom hele OS må

lagres for hver gjest.

Mindre minnebruk ettersom konteinere

deler gjeste-OS.

Figur 4-3 - Tabell med hovedforskjeller mellom tradisjonell VM vs. konteinerisering med Docker (Preeth & Mulerickal, 2015)

Både tradisjonell VM med hypervisor og konteinerbasert virtualisering tilbyr portabilitet,

isolering og optimalisering av hardware-ressurser. Hvilken teknologi som er hensiktsmessig å

bruke avhenger av hva slags applikasjon som skal kjøres og hvordan den skal brukes.

Tradisjonelle VM-er egner seg godt dersom ressurser skal deles likt på systemet. Dersom

mange små uavhengige prosesser skal kjøres, er konteineriseringsteknologi et bedre

alternativ. Siden Avkastningsportal allerede er delt opp i moduler var det et enkelt valg for

oss å modernisere applikasjonen ved bruk av konteinerarkitektur.

Page 37: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

31

Mikrotjenestearkitektur

“Cloud native”-arkitektur, også omtalt som mikrotjenester, er små uavhengige

mikrotjenester som arbeider sammen i et system og kommuniserer gjennom et RESTful API.

Innen utvikling er dette fordelaktig ettersom mikrotjenester er språknøytralt og fremmer

frihet til å benytte programmeringsspråk og teknologier som best løser problemstillingen.

Det er enklere å gjøre endringer på uavhengige mikrotjenester i motsetning til endring av

kildekode på en monolittisk arkitektur, hvor hele systemet må oppgraderes for å tilpasse

endringene. Med Avkastningsportal var det praktisk at applikasjonen allerede var delt inn i

de tre tjenestene beregning, rapportering og renteimport. Det var derfor ikke nødvendig

med kodeendringer før vi kunne lage konteinere av løsningen.

Figur 4-4 - Forskjellen på monolittisk arkitektur og mikrotjenestearkitektur (Malav, 2017)

Konteinerteknologi - Docker

Konteinerteknologi legger til rette muligheten for å dele opp og pakke applikasjoner som

små isolerte tjenester. Konteinere lages og pakkes med kildekode og nødvendige

avhengigheter som sørger for at konteinere kjøres uavhengig av hverandre. Tanken med

Page 38: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

32

dette er å isolere miljøer for å mitigere “single point of failure”5. Konteinere pakkes tettere

på serveren siden de ikke trenger et fullverdig operativsystem for å kjøre. Fordelen med

dette er at lettvekts-operativsystemer som eksempelvis Alpine Linux kan installeres direkte

på konteiner sammen med annen ønsket programvare.

Videre legger konteinerteknologi til rette for DevOps- prosesser og effektivisering av

prosesser rundt integrasjon, leveranse og skalering av applikasjoner. Dette kan i situasjoner

tilpasset DevOps gi positive utslag i forhold til ressursbruk og driftskostnader hos IT-

selskaper. Med vårt mål om å modernisere arkitekturen til Avkastningsportal ble det tidlig

avgjort å ta i bruk Docker, som er en ledende aktør innen konteinerteknologi. Oppdragsgiver

ønsket at vi utviklet en løsning som støttes fremover i tid, og det oppfylles ved å bruke

Docker. Det finnes utfyllende dokumentasjon som gjør det enkelt å jobbe med teknologien.

En vesentlig fordel med Docker er at applikasjoner får bedre portabilitet og kan kjøres på alle

operativsystemer og plattformer som har Docker installert. En annen fordel er økt sikkerhet

siden prosesser i konteinere kjører med en ikke-priviligert bruker som ikke har root- eller

administratortilgang til host-maskinen. Det finnes muligheter for å ytterligere kunne øke

sikkerheten til konteinere. Dette kan for eksempel for eksempel gjøres ved å ta i bruk

sikkerhetsmoduler som AppArmor, SELinux eller GRSEC for Linux-kjerner (docs.docker.com,

2018).

Docker-arkitektur

Docker bruker en klient-server-arkitektur [Se figur 4-5]. Kort beskrevet er det klienten som

snakker med Docker daemon som tar seg av bygging, kjøring og distribuering av Docker-

konteinere. Klienten og Docker daemon kommuniserer ved hjelp av et sett med REST API,

hvor daemon lytter etter Docker API-forespørsler og håndterer Docker-objekter som images,

konteinere, nettverk eller volumer. Et Docker-image er en kjørbar pakke av en avgrenset

løsning som kan publiseres til et register lignende Git. Brukere av løsningen kan så hente ut

ønsket versjon fra registeret. Siden det er Docker som tar imot disse imagene vil de oppføre

seg likt uavhengig av hvilket operativsystem Docker kjører på. Imaget inneholder en

5 Et single point of failure (SPOF), er et kritisk systemkomponent med evne til å ødelegge hele systemet (What is a Single Point of Failure (SPOF)?, udatert).

Page 39: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

33

Dockerfile som er et sett med instruksjoner for hva som skal utføres ved kjøring av

konteineren. Når en bruker kjører et Docker-image, lages det en ny uavhengig konteiner som

utfører oppgaver definert i Dockerfilen. Det er også mulig å bygge videre på et image, og

legge til ønsket funksjonalitet på en eksisterende installasjon.

For å bygge et image skriver man en Dockerfil som definerer stegene som inngår i byggingen

av imaget. Konteineren som blir produsert er en kjørbar instans av imaget som kan startes,

stoppes, flyttes eller slettes ved hjelp av Docker API-et eller kommandolinjen. Prosessen

med å sette opp dette imaget lokalt hos en utvikler er kun én kommando: “docker run

<navn-på-image>”. Denne kommandoen vil laste ned eventuelle avhengigheter samt imaget

som skal kjøres og starter det opp. Videre finnes det måter å legge inn flere Docker images i

én fil ved å bruke Docker-compose. Disse defineres under hverandre i en og samme fil og

kan også startes ved å kjøre en konsollkommando. Dersom compose-filen refererer til et

image som ikke finnes lokalt vil det lastes ned på samme måte som for enkeltstående

images. Et eksempel på bruksområde for dette er hvis man vil sette opp en database

samtidig som en webserver uten å måtte starte tjenestene hver for seg.

Figur 4-5 - Illustrasjon av Docker-arkitektur (docs.docker.com, 2018)

Page 40: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

34

Valg av operativsystem til konteinerne

I møte med oppdragsgiver i januar diskuterte vi størrelsen på konteinerne vi skulle lage og

hvilket operativsystem de skulle kjøre på. En mulighet var å bruke Ubuntu 16.04 men dette

ville krevd unødvendig mye diskplass for å kjøre de tre modulene til Avkastningsportal.

Konteinere av mindre størrelse går raskt å bygge og krever lite ressurser i drift. Vi fant at

Alpine Linux var godt egnet til konteinere og fungerte uten problemer til dette formålet.

Med Alpine fikk vi et grunn-image på 5 MB, i motsetning til et Ubuntu-image på omtrent 188

MB ("Docker Image Size Comparison", 2015). Videre var det nødvendig å ha Java-JDK

installert på operativsystemet for kunne kjøre å Java-applikasjoner. Til dette brukte vi et

Docker-image for operativsystemet som allerede inneholder en JDK6, kalt “alpine-java”.

Figur 4-6 - Oversikt over størrelse på operativsystemer brukt til konteinerløsninger - ("Docker Image Size Comparison", 2015)

Konteinerhåndteringsplattform

En konteinerisert applikasjon av en viss størrelse består ofte av mange konteinerinstanser.

En slik løsning kan fungere godt for applikasjoner med høy trafikk hvor det er ønskelig å

fordele arbeidsmengde på flere maskiner med lastbalansering. Samlingen av konteinere

kalles en klynge og administreres med en konteinerhåndteringsplattform eller

konteinerorkestreringsplattform. Plattformen skal sørge for at klyngen til enhver tid har

6 Java Development Kit, brukt for å skrive Java-programmer.

Page 41: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

35

tilstrekkelig antall kjørende instanser av konteinerne, kalt skalering, for å opprettholde

tjenestene applikasjonen skal tilby. Plattformen skal også sørge for samhandling mellom

konteinere i klyngen og mot eksterne ressurser.

Konteinerorkestreringsplattformer defineres av Khan (2017) som et system som leverer

rammeverk på forretningsnivå for storskala integrasjon og håndtering av konteinere.

Systemet skal forenkle initiell konteinerutplassering og håndtering av flere konteinere som

én entitet med tanke på tilgjengelighet, skalering og networking. Videre fremhever Khan

(2017) syv hovedoppgaver for konteinerorkestreringsplattformer:

• Klyngetilstandshåndtering og planlegging av oppgaver skal ivaretas av programvaren.

Vedlikeholdsoppgaver som eksempelvis backup, garbage-collection og indeksering

planlegges etter ulike mønstre som skal minimere innvirkningen på kjøring av

applikasjonen.

• Tilby høy tilgjengelighet og feiltoleranse gjennom komponentredundans, oppdagelse

av feil og reallokering av oppgaver til fungerende komponenter. Dette kan gjøre at

systemer som ved feil ville brutt sammen kan fortsette operasjoner, eventuelt med

begrenset kapasistet. Ved å benytte lastbalansering reduseres faren for

overbelastning av komponenter samtidig som ressursbruk optimaliseres for å

maksimere ytelse og minimere responstid.

• Sørge for sikkerhet. Plattformen må påse at konteiner-image’ene er signerte og

kommer fra et sikkert register. Videre må den håndtere skreddersydde tilganger for

ulike brukere å gjøre endringer på systemet etter hvilken rolle de har. Secrets som

sertifikater, SQL-tilkoblingsstrenger, kontonøkler, SSH-nøkler, krypteringsnøkler m.m.

må også håndteres av plattformen. Disse kan oppbevares i et register som

konteinerne i systemet har tilgang til.

• Forenkle networking gjennom dynamisk håndtering av porter og IP-adresser for å

sikre sømløs tilkobling av konteinere i klynger. Behovet for ytelse i kommunikasjonen

innad i løsningen må balanseres mot behovet for sikkerhet gjennom isolasjon og

lagdeling.

Page 42: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

36

• Tilgjengeliggjøre service discovery via et serviceregister. Dette registeret skal

inneholde IP og port for hver kjørende serviceinstans eller konteiner som leverer en

mikrotjeneste. Klienter skal kunne sende en spørring til dette registeret, ofte

gjennom en load balancer på serversiden, og deretter rutes til en konteiner som ikke

er overbelastet.

• Muliggjøre kontinuerlig leveranse ved å støtte automatiseringsverktøy som Jenkins

eller Drone.

• Tilby overvåkning og styring av både infrastrukturen konteinerne kjører på og

aktiviteten i konteinerne. På infrastruktursiden bør nettverk, sikkerhet, prosessor- og

minnebruk monitoreres. I konteinerne bør ytelse monitoreres for å oppdage feil som

minnelekkasje eller overdreven ressursbruk. Samtidig må logging og hvitboks-sporing

av forespørsler være mulig. Plattformen må ha regler for håndtering av feil.

Valg av konteinerhåndteringsplattform - Rancher

For å sørge for at vi ikke låste oss til en leverandør valgte vi bort skytjenestetilbydernes egne

konteinertjenester som Amazon ECS og Azure Fabric. Grunnen til dette var å sørge for

portabilitet slik at oppdragsgiver enkelt kan skifte hostingleverandør dersom det skulle bli

aktuelt. Etter å ha sett på ulike muligheter og etter å ha snakket med både oppdragsgiver og

andre bekjente i IT-bransjen ble vi gjort oppmerksomme på Rancher som

konteinerhåndteringsplattform.

Vi testet ut programvaren etter en gjennomgang av dokumentasjon på Rancher sine

nettsider og videoressurser av Codemy på youtube. Deretter presenterte vi en liten demo

for oppdragsgiver for å få tilbakemelding på arbeidet vi hadde gjort. En av veilederne hos

oppdragsgiver hadde inngående kjennskap til Rancher, og løsningen vi presenterte ble

mottatt med begeistring.

Page 43: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

37

Rancher publiserer og konfigurerer konteinere, sørger for overvåking av dem og tilbyr

sikkerhetshåndtering ved hjelp av Active Directory og LDAP7. Dette er funksjoner som Docker

ikke har mulighet til å bruke av seg selv. Det ble også tatt et valg om å bruke Ubuntu 16.04

som operativsystem siden Rancher oppgir det som en av de anbefalte og mest utprøvde

Linux-distribusjonene. Konteinerhåndteringsplattformene bruker et underliggende system

for å administrere konteinere. Kubernetes og Cattle er begge eksempler på slike systemer

som håndterer automatisert deployment, skalering og håndtering av konteinerbaserte

applikasjoner. Vi valgte å bruke Cattle med standard konfigurasjon som er Rancher sin egen

variant av Kubernetes.

Rancher består av fire hovedkomponenter:

• Infrastrukturorkestrering

• Konteinerorkestrering

• Applikasjonskatalog

• Tilgangsstyring hvor team og enkeltpersoner kan få ulike rettigheter

Figuren nedenfor viser Ranchers disse fire hovedkomponenter og deres egenskaper

Figur 4-7 - Rancher-arkitektur

7 Active Directory er en katalog for administrering av brukere og sikkerhetsgrupper, og LDAP er protokollen som brukes.

Page 44: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

38

4.3 Skytjenester

Datakraft, lagring, applikasjoner og it-ressurser leveres over internett som skytjenester med

en prismodell hvor man betaler for det man bruker. Dette kan ha en rekke fordeler fremfor

tradisjonelle hostingløsninger som Avkastningsportal hostes fra i dag. Gandhi, V. A., &

Kumbharana, C. K. (2014) påpeker flere fordeler og hovedtrekk ved skytjenester som:

• Redusering av kostnader

• Enhets- og lokasjonsuavhengighet

• Maks lastkapasitet-økning

• Forbedret stabilitet

• Skalerbarhet

• Sikkerhet

• Enkelt vedlikehold

Det er mange tilbydere å velge mellom og vi ønsket derfor å snevre inn søket vårt slik at vi

fant en god skyløsning som passet til våre behov. Amazon Web Services, Google Cloud

Platform og Microsoft Azure, samt Basefarm er store aktører som tilbyr løsninger vi

vurderte. Av disse var Amazon Web Services og Microsoft Azure aktuelle for oss på bakgrunn

av god integrasjon med Rancher som beskrevet tidligere.

Skytjenestemodeller

Skytjenestetilbydere leier ut datakraft og ressurser til kunder i form av tjenester som

defineres ved ulike skytjenestemodeller. Modellene baseres på hvilke ressurser som er

inkludert i dem, og om det er kunde eller leverandør som har ansvaret for disse.

Illustrasjonen nedenfor gir en god oversikt over tjenestemodellene IaaS, Paas og SaaS.

Page 45: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

39

Figur 4-8 - Skytjenestemodeller (Kavis, 2014)

IaaS (Infrastructure as a Service) er en tjeneste som leverer maskinkraft og fysiske ressurser

for håndtering av lagring og prosessering. Tjenesten er ment for sluttbrukere som vil å kjøre

virtuelle maskiner eller nettverk og load balancing med mer etter behov. IaaS erstatter

fysiske servere og fysiske ressurser hvor hele infrastrukturen leveres over internett.

PaaS (Platform as a Service) tilbyr et utviklingsmiljø over internett som en tjeneste, hvor det

er mulig å utvikle applikasjoner med forskjellige teknologier og verktøy. Tjenesten tilbyr en

plattform til sluttbrukere hvor applikasjoner kan hostes.

SaaS (Software as a Service) er en tjeneste som tilbyr kjørende applikasjoner i skyen, typisk

brukt for applikasjoner som aksesseres og brukes via internett av forskjellige klienter fremfor

å installere applikasjonen på en lokal maskin.

Page 46: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

40

I prosjektoppgaven var det mest naturlig å bruke IaaS slik at vi kunne ha full kontroll over

ressursene i systemet vi lagde. Dersom vi hadde gått for et av de andre alternativene ville

oppsettet vært enklere, men vi hadde risikert å låse oss til en bestemt leverandør og deres

måte å håndtere oppsettet på. Med IaaS er det derimot enkelt å bytte hosting-leverandør.

Dette kan gjøres ved å eksportere konfigurasjonsfilene fra én server til en annen.

Skytjenesteleverandører

Amazon Web Services

Amazon er pioneren innen skytjenester og lanserte i 2006 AWS Elastic Compute Cloud (EC2).

AWS har lenge vært den ubestridte markedslederen av skytjenesteløsninger. I 2017

dominerte AWS det offentlige markedet for skytjenester med 32% markedsandel, som utgjør

nesten en tredjedel av hele skytjenestemarkedet (Hollander, R., 2018).

Figur 4-9 - Markedsandel for skytjenestetilbydere (Hollander, 2018)

Page 47: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

41

Elastic Compute Cloud (EC2) og Elastic Container Service (ECS)

EC2 er en kommersiell tjeneste som tilbyr skybaserte plattformer med skalerbare virtuelle

miljøer for infrastruktur og programvare. EC2 lar brukeren selv administrere plattformen og

installere nødvendig programvare.

ECS er en skalerbar konteinerhåndterings- og orkestreringstjeneste med høy ytelse som

støtter Docker-konteinere. Tjenesten tillater kjøring og skalering av konteinerbaserte

applikasjoner og kan eliminere behovet for håndtering og skalering av virtuelle maskiner.

ECS tilbyr to launch types: Fargate og EC2. En launch type beskriver infrastrukturen

applikasjoner og tjenester skal kjøres på. Fargate er en teknologi som tilbyr kjøring av

konteinere uten at man selv må håndtere servere og klynger ettersom den tilbyr en

serverløs infrastruktur i henhold til mikrotjenestearkitektur. Med Fargate launch type

trenger man kun å pakke applikasjonen i konteinere, spesifisere CPU, minne og

nettverksregler, og deretter kjøre applikasjonen. EC2 launch type ligner mer tradisjonell

VM/server-infrastruktur og gir bedre brukerkontroll på servernivå og kan skalere og

håndtere ressursbruk for EC2-instanser i ECS.

Figur 4-10 - EC2 vs. Fargate (aws.amazon.com)

Microsoft Azure

Microsoft lanserte i 2010 Windows Azure, som i 2014 endret navn til Microsoft Azure. Azure

tilbyr skytjenester for bygging, publisering og håndtering av applikasjoner gjennom et globalt

nettverk av datasentre, med integrerte verktøy for DevOps-praksiser og brukerstøtte. Azure

Page 48: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

42

er den nest største aktøren innenfor skytjenester etter AWS, med en markedsandel på rundt

14% (Hollander, R., 2018).

Azure Service Fabric

Azure Service Fabric er en distribuert systemplattform for enklere pakking, publisering og

håndtering av mikrotjenester som konteinere. Systemet er i tillegg til dette også en

orkestreringstjeneste for publisering av mikrotjeneste-/konteinerbaserte applikasjoner.

Tjenesten baserer seg på mikrotjenestearkitektur med serverløs infrastruktur og eliminerer

problemer knyttet til system, skalerbarhet, administrasjon og ventetid.

Figur 4-11 - Azure Service Fabric (docs.microsoft.com, 2018)

Page 49: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

43

4.4 Vurdering av skytjenesteleverandører

Leverandører som ble valgt bort

Basefarm er en leverandør av blant annet skytjenester med datasentre både i Norge og

ellers i Europa. Vi ønsket i utgangspunktet å vurdere deres skytjenester med tanke på at

oppdragsgiver allerede leier servere av dem til hosting for blant annet Avkastningsportal.

Siden Basefarm ikke hadde innebygget integrasjon med Rancher, ble den ikke tatt med

videre i vurderingen av skytjenester.

DigitalOcean er en skyleverandør som fokuserer på å selge billige virtuelle servere (kalt

“droplets”) med brukervennlig og superraskt oppsett. I motsetning til AWS hvor virtuelle

servere er en av mange tjenester som tilbys har DigitalOcean manglende støtte for

databasehosting, og er primært en IaaS-leverandør for utviklere som trenger et sted for å

kunne utplassere og teste applikasjoner. Vi fant derfor at DigitalOcean ikke tilbød det vi

hadde behov for til produksjonsmiljøet.

Google Cloud Platform kommer best ut blant konkurrentene når det kommer til oppetid

ifølge statistikk fra 2017, og har blitt jevnt bedre og bedre siden 2015 (MacLaughlin og

Sullivan, 2017). Manglende integrasjon mot Rancher gjorde likevel at Google ikke ble vurdert

som et alternativ.

Packet tilbyr tilsvarende tjenester som DigitalOcean med den samme begrensningen i form

av manglende støtte for databasehåndtering. Packet ble derfor heller ikke tatt med som et

alternativ.

Håndtering av secrets

Secret er sensitive data som passord, krypteringsnøkler, API-nøkler, sertifikater og tokens.

Dette bør ikke lagres i kildekoden av opplagte sikkerhetsmessige årsaker og bør heller

håndteres på en sikker måte, noe som også er et absolutt krav fra oppdragsgivers side. Både

AWS og Azure har løsninger for å håndtere secrets, og for å lagre dem i skyen. AWS tilbyr

AWS Secret Manager og Azure har en tjeneste som kalles Azure Key Vault. Rancher tilbyr

også lignende funksjonalitet. Alle tre lar utviklerne legge inn sensitiv informasjon som så blir

kryptert og dermed utilgjengelig for andre. Informasjonen blir gjort tilgjengelig som

Page 50: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

44

miljøvariabler. En applikasjon kan så bruke disse referansene i koden eller konfigurasjonsfiler

uten å tenke på at de blir tilgjengelig for utenforstående.

Pris

Vi har ikke gransket ikke kostnader som er relatert til pris på hostingtjenester ettersom dette

ikke var aktuelt etter kravendringer. For å kunne estimere kostnader ville det vært

nødvendig med tilgang på informasjon om oppdragsgivers nåværende kostnader, i tillegg til

informasjon om nettverkstrafikk på Avkastningsportal. Denne informasjonen har vi ikke hatt

tilgang til. Konkurrentene AWS og Azure har ifølge Utley (2018) ligget relativt tett inntil

hverandre i pris de siste årene. Vi anså derfor ikke pris som en avgjørende faktor i

forbindelse med vurderingene vi gjorde.

Oppetid og stabilitet

For å kunne ta stilling til kravet om oppetid søkte vi etter informasjon og statistikk for å

undersøke hvordan Amazon og Microsoft hadde skilt seg fra hverandre over tid.

CloudHarmony er et selskap som blant annet sammenligner skytjenester ved å levere

objektive ytelsesanalyser og -rapporter. I følge MacLaughlin et al. (2017), som henviser til

data levert av CloudHarmony, fremstilles markante forskjeller mellom tilbyderne og deres

nedetid. Microsoft Azure kommer spesielt dårlig ut i forhold til Amazon og Google, hvor det i

2017 ble målt 740 minutter med nedetid for Azure mot 205 minutter for Amazon.

MacLaughlin et.al. (2017) belyser også at Amazon hadde totalt 448 minutter nedetid fra

2015 til 2017, hvorav 40% var knyttet til en enkeltepisode i 2017. Microsoft målte totalt

1652 minutter under den samme perioden.

Page 51: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

45

Figur 4-12 - Antall minutter nedetid hos Amazon, Microsoft og Google (MacLaughline et.al. (2017)

4.5 Diskusjon og valg av skytjeneste

Amazon og Microsoft tilfredsstiller begge kravet om håndtering av secrets og stilte likt på

dette punktet. For å differensiere tilbyderne har vi blant annet støttet oss på funn beskrevet

i kapittel 4.3.3, hvor det fremkommer at Amazon ville være et godt valg med tanke på høy

grad av oppetid. Ettersom dette var et krav fra oppdragsgivers side, anså vi derfor Amazon

Web Services som et trygt valg.

Amazon ECS med Fargate launch type kunne vært et godt valg for å beholde mikrotjeneste-

/konteineriseringsprinsippene på både applikasjons- og infrastrukturnivå. Denne løsningen

er cloud-native og kan kjøre på en black-box serverløs infrastruktur som medfører mindre

arbeid, ansvar, drift og vedlikehold. Fargate kunne vært en god og enkel løsning hvor

administrasjonen av konteinerne gjøres hos Amazon. Det er også mulig å kjøre EC2-instanser

med ECS, men vi valgte heller å gå for en ren EC2-løsning. Siden Rancher er en komplett

plattform for administrering av konteinere låste vi oss ikke til en leverandør.

Page 52: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

46

4.6 Databaseløsning

For å hindre tap av data ved bruk av konteinerisert database bruker vi RDS (Relational

Database Service) fra Amazon i produksjonsmiljøet. Denne løsningen tillater konfigurasjon

av databasen og fungerer på samme måte som andre AWS-produkter ved at

man enkelt kan legge til sikkerhetsgrupper og andre rettigheter. Sikkerhetsinnstillingene

inkluderer muligheten for å begrense tilgang til databasen utenfra. Dette er

implementert i vår produksjonssatte applikasjon, og databasen er konfigurert slik at den kun

aksepterer tilgang fra sikkerhetsgruppen EC2-instansen kjører på. Det vil si at det kun er

de tre konteinerne vi har i produksjon som kan aksessere databasen. Videre har RDS

konfigurerbar automatisk backup. Ved bruk av en konteinerisert database vil man selv måtte

sørge for dataintegritet og backup, mens bruk av RDS gjør dette for deg. Vi har

kommet frem til at dette er den beste måten å sørge for at data blir bevart og at det gjør det

enklest mulig for en utvikler å gjøre endringer på applikasjonen uten å måtte tenke på

problemer som omhandler databasen.

4.7 Kontinuerlig integrasjon og leveranse

Kontinuerlig integrasjon og leveranse8 er en utviklingspraksis som går ut på at utviklere

publiserer kode til et repository flere ganger daglig. Dette er en prosess for å bygge og

utplassere kode, samt kjøre tester automatisk når ny kode blir pushet til et repository. Disse

prosessene kjører på en separat server, i vårt tilfelle ved hjelp av applikasjonen Drone. En

slik arbeidsflyt kan gi enorme fordeler ved å vite om alle jobbene som er konfigurert

fungerer som de skal, i tillegg til rask feedback for feilmeldinger med detaljerte beskrivelser

om hvilke feil som er oppstått på hvilke jobber, hvor, og av hvem (Sneha, 2018).

Illustrasjonen nedenfor viser arbeidsflyten i et typisk kontinuerlig integrasjonssystem.

8 Kontinuerlig integrasjon og leveranse refereres heretter til som “CI/CD” (continuous integration / continuous delivery) eller “pipeline”.

Page 53: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

47

Figur 4-13 - Prosess for kontinuerlig integrasjon (RHD Blog, 2017)

Det er flere fordeler med å bruke et CI/CD-system som Drone eller Jenkins sammen med

konteinere. En av disse er at løsningen man bygger automatisk vil kunne utplasseres til

skyen. Dersom utviklerne selv skulle gjøre dette på en tradisjonell måte ville de måtte

kopiere over ferdig bygde JAR- eller WAR-filer og konfigurasjonsfiler til en virtuell

maskin/skytjeneste via programmer som SCP (Secure Copy) for å legge over filene til

leverandør av hosting, og SSH (Secure Shell) for å sette riktige rettigheter på filene på server.

Utvikleren må også sørge for at filene ligger i riktig mappe på server og må eventuelt

restarte en UNIX-service på serveren for å sørge for at det faktisk er den nye versjonen som

kjører og ikke en gammel versjon.

Slik vi kjenner til oppdragsgivers arbeidsmetode benytter utviklerne deres VPN for å få

tilgang til hostingleverandørens servere. Dette må gjøres for både preprod-miljøet for

testing og for produksjonsmiljøet når applikasjonen er klar for produksjonssetting. En vanlig

måte å sørge for at man er i riktig miljø, observert hos oppdragsgiver, er å sette en bestemt

bakgrunnsfarge på terminalvinduet når man skal legge noe ut i produksjon. Dette virker som

Page 54: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

48

en ekstra sikkerhet for utvikleren slik at han eller hun ikke sletter data i produksjon ved en

feiltakelse. Fordelen med å bruke Rancher og Drone i vår oppgave er at logikken for

utplassering til preprod og til produksjon er bestemt i konfigurasjonsfiler, og at utvikleren

derfor ikke trenger å tenke på å logge seg inn i riktig miljø via terminal.

Alt som skal til er å publisere en endring ved hjelp av Git og så vil CI/CD-verktøyene sørge for

at alt havner der det skal. Bruken av konteinere gjør at ingen manuell kopiering er nødvendig

og bruken av Drone lar hele prosessen med testing, deployment og restart av applikasjonen

skjer automatisk. Videre er vårt oppsett slik at kun en teamleder vil kunne publisere

endringer i master-branchen i Git og en utvikler vil derfor aldri kunne legge ut nye versjoner i

produksjon uten at en teamleder har godkjent endringene. Ved bruk av terminalvinduer og

manuell kopiering er det lettere å gjøre denne feilen, mens det i vår løsning ikke er mulig å

gjøre dette ved en feil. For å verifisere applikasjonen før produksjonssetting må teamleder

påse at systemtest er utført, samt foreta en manuell gjennomgang av oppdatert kildekode.

Drone og Jenkins

Kontinuerlig integrasjon og levering er en viktig del av prosjektet, og det ble naturlig å først

ta i bruk Jenkins, som er industristandard for automatisering av byggeprosesser. Etter å ha

kikket nærmere på temaet om CI oppdaget vi Drone som er konteinerbasert og derfor passer

godt inn i vårt konteinerbaserte miljø. I en sammenligning av Drone og Jenkins på Rancher

sine nettsider presiseres det at en plugin i Drone er et konteiner-image. Avhengigheter i

programvaren trenger derfor ikke å håndteres separat, siden de er bakt inn i et konteiner-

image, i motsetning til Jenkins som må konfigureres for å kunne snakke med Docker.

Sammenlignet med Jenkins kommer Drone godt ut i en konteinerbasert sammenheng på

grunn av dens simplisitet, og blir fremstilt som et populært valg for mindre team og

prosjekter. Dette syntes vi passet godt til oppgaven og bestemte oss derfor å ta i bruk Drone

(Rancherlabs, 2018).

Page 55: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

49

Janitor

Janitor er programvare som kjører på alle hosts og sletter alle ubrukte Docker images og

uallokerte datavolum. Denne prosessen sørger for at filsystemet (ofte i katalogen

“/var/lib/docker”) ikke fylles opp med gamle og ubrukte konteiner images som ikke lenger er

i bruk.

ELK-Stack

For å ytterligere underbygge DevOps-tankegangen ønsket vi å sette opp en en sentralisert

logging-tjeneste for overvåking av systemet. Vi har brukt ELK stack, som er et sett med gratis

åpen kildekode verktøy. Sentralisering av loggene er hensiktsmessig fordi løsningen kjører på

flere konteinere og hoster i flere miljøer som genererer store mengder med loggdata. For å

få verdi av disse datastrømmene må dataene struktureres for å få bedre synlighet og

lesbarhet, slik at informasjonssøking i systemet blir enklere. I forbindelse med drift,

vedlikehold og overvåking gir indekserte data et godt overblikk over status og historikk på

systemet i sanntid.

Elasticsearch er en distribuert søkemotor som tilbyr horisontal skalering, og muligheter for

sanntidssøk med fulltekst. ES sine egenskaper er eksponert med JSON-data over et RESTful

API som tillater dynamisk indeksering av data som gir rask respons på sanntidssøk ettersom

indekser blir brukt for tekstsøk.

Logstash er et sentralisert dataprosesseringsverktøy som brukes for å samle inn, behandle

og analysere varierte strukturerte og ustrukturerte data som blir generert av forskjellige

systemer i datapipelinen. Ved hjelp av plugins som tilbys for applikasjonen kan man koble til

flere forskjellige inputstrømmer og plattformer. Dette gjør det mulig å effektivt prosessere

logger, hendelser og andre datakilder som ofte kommer i ulike dataformater. Fordelen med

dette er at alle datakilder blir konvertert til ett enkelt dataformat, noe som er meget

hensiktsmessig ved håndtering av større mengder data. Andre muligheter med Logstash er å

bruke filtre, som tilbys både klare til bruk og med støtte for å kunne lage egne (Chhajed,

2015).

Page 56: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

50

Kibana er en visualiseringsplattform som brukes for fremstilling av data som blir lagret i

Elasticsearch-indekser. Kommunikasjonen foregår gjennom ES sitt eksponerte REST api, som

Kibana benytter for å presentere grafiske fremstillinger av JSON-data for sluttbrukere. Det er

et kraftig verktøy med uendelige muligheter som blir mye brukt til å vise og dele blant annet

histogrammer, kakediagrammer, kart og tabeller på et dynamisk dashboard. Verktøyet er

ment for å gi brukervennlig innsikt i store mengder med data, og gir fleksible muligheter til

alt fra analyse og debugging i sanntid til BI (eng: “business intelligence”). Illustrasjonen

nedenfor viser en typisk data-pipeline i ELK stack (Chhajed, 2015).

Bildet nedenfor viser at logger fra tre forskjellige applikasjonsservere blir sendt med

”Logstash shipper”, til den sentraliserte” Logstash indexeren” med output data til

Elasticsearch. I dette leddet kan Kibana kan utføre indeksbaserte spørringer på gjennom det

eksponerte RESTful API-et til Elasticsearch for å visualisere JSON-data.

Figur 4-14 - Illustrasjon av en ELK-stack datapipline (Chhajed, 2015)

Page 57: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

51

Logspout er en logg-ruter for Docker-konteinere som tilfører ELK stack

funksjonalitet. Logspout kobler seg til alle kjørende konteinerinstanser på hosten, fanger

opp deres logger som går gjennom stderr og stdout9, og deretter sender de videre til

Logstash.

4.8 Andre hensyn

Let’s Encrypt

For å få HTTPS-tilkobling er det nødvendig å få utdelt et signert sertifikat som bekrefter

identiteten til en server. Vanligvis er dette noe man betaler for, men det finnes også et gratis

alternativ kalt Let’s Encrypt. Denne tjenesten utsteder signerte sertifikater så lenge man kan

bevise at man eier en server. Prosessen innebærer at man kjører et skript fra Let’s Encrypt

på sin egen server.

Studentlisenser og kostnader

Som studenter hadde vi fått utdelt lisenser for både Microsoft Azure og for Amazon Web

Services, som begge kommer med $100 i studentkreditt. Kostnader utover de som ikke ble

dekket av studentlisenser har blitt refundert av oppdragsgiver etter avtale om dette.

Datasikkerhet og personvern (GDPR)

GDPR (General data protection regulation) er en stor endring i regulering av personvern,

som ble vedtatt av EU parlamentet i April 2016, og som trer i kraft 25. mai 2018. Loven er

utformet for å harmonisere personvernlover i Europa og beskytte all personlig data og

borgeres personvern. Dette er noe alle organisasjoner og selskaper må ta stilling til, inkludert

oppdragsgiver. GDPR er derimot er ikke noe vi behøver å ta høyde for ettersom

Avkastningsportal kun benytter offentlige data (EU GDPR Information Portal, 2018).

9 stderr står for Standard Error og stdout for Standard Out. Begge to er inputstrømmer hvor dataflyten i operativsystemet går

Page 58: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

52

4.9 Oppsummering

Vi valgte å bruke Docker og konteinerteknologi i stedet for en tradisjonell infrastruktur hvor

applikasjonen manuelt må legges over på host-maskinen for hver gang den bygges. Dette var

en enkel endring siden applikasjonen allerede var inndelt i mikrotjenester. Det var derfor et

naturlig valg å bruke Docker for å legge disse modulene inn i selvstendige konteinere. For å

kunne håndtere dette valgte vi Rancher som konteinerhåndteringsplattform. Med Rancher

kan arbeidsgiver selv velge å bytte skytjenestetilbyder dersom de senere skulle ønske dette.

Det er forholdsvis små endringer som skal til for å bytte ut leverandøren, og all konfigurasjon

av applikasjoner og tjenester er håndtert i Rancher som tilbyr eksportering av

konfigurasjonsfiler ved behov.

Vi landet på Amazon EC2 som skytjenesteplattform. I motsetning til ECS lot dette lot oss selv

bestemme hvilken administrasjonsplattform for konteinere som skulle benyttes. Tilbyderne

av skytjenester vurderes for vår problemstilling som tilnærmet like dersom man kun ønsker å

benytte seg av en virtuell maskin i skyen, og begge tilbyderne med integrasjon til Rancher

tilfredsstilte kravene om håndtering av secrets. Det ble også valgt å bruke Amazon sin egen

databaseløsning, RDS, som utfører automatisk backup og unngår problemer med tapt data

som kan forekomme dersom det benyttes en konteinerisert database.

For å støtte et DevOps-tankesett er det blitt valgt å sette opp kontinuerlig integrasjon og

levering ved hjelp av Drone som både er lettere og mer tilpasset et konteinermiljø enn

Jenkins. På grunn av tidsbegrensninger har vi kun satt opp standard konfigurasjon av ELK-

stack, da konfigurasjon av stacken er omfattende. Vi har testet forskjellige oppsett av ELK på

skolens VM, men ikke kommet frem til et oppsett som passet å implementere i løsningen.

Sentralisering av loggene er derfor ikke implementert. I tillegg satt vi opp Janitor for enklere

drift og administrasjon av maskinvareressurser. Vi benyttet også Let’s Encrypt for å få HTTPS-

tilkobling til preprod-miljøet.

Page 59: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

53

5 Systemdokumentasjon

Dette kapitlet beskriver løsningen som er satt opp. Resultatet av den tekniske delen av

prosjektoppgaven er en CI/CD-pipeline som forenkler utviklernes arbeidsflyt og -metode ved

å håndtere utplassering av oppdaterte applikasjoner automatisk ved en kodeendring. Når en

utvikler publiserer kode ved hjelp av Git vil automasjonsverktøyet Drone starte en prosess

med å bygge, pakke og publisere den nye versjonen av Avkastningsportal. Byggingen

håndteres av en Maven-plugin i Drone, pakkingen av en Docker-plugin og publiseringen

håndteres til slutt av en Rancher-plugin. Etter dette er Drone ferdig med sin del av prosessen

og Rancher sørger for at de nye versjonene legges ut enten i preprod eller produksjon hos

henholdsvis DigitalOcean og Amazon EC2.

I figuren på neste side er den øverste boksen hele Avkastningsportal med de ulike modulene,

databasen og den innebygde webserveren som gir tilgang til grensesnittet. Neste steg er

pilen mellom de to boksene som viser at det er via GitHub at koden til Avkastningsportal blir

tilgjengeliggjort for Rancher-serveren og dermed Drone.

Page 60: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

54

Figur 5-1 - Prosessflyten i løsningen

I boksen i midten er det en prosessflyt fra Drone. Når koden er hentet ned fra GitHub bygges

prosjektet i Drone ved hjelp av en plugin-konteiner som inneholder Maven, verktøyet for å

bygge Java-prosjekter. Dersom en test feiler vil Drone avbryte byggeprosessen og gi en

tilbakemelding. Ved hjelp av webhooks mot GitHub gjennom OAuth-applikasjonen vil det

også være synlig på GitHub om en commit førte til feil i koden. Det samme gjelder hvis noe

Page 61: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

55

feiler i et annet ledd i prosessen, for eksempel dersom konteiner-registeret ikke er oppe og

Drone dermed ikke kan publisere nye images. En mer detaljert oversikt over CI/CD-pipelinen

i systemet finnes i sekvensdiagrammet under.

Figur 5-2 - Sekvensdiagram for løsningen

5.1 Oppsett for testing og utvikling

Vi benyttet Ubuntu 16.04 som operativsystem på våre maskiner av to grunner: (1) for å ha

likt utgangspunkt når vi jobbet med det tekniske, og (2) for å være sikre på at Docker kunne

brukes. Som nevnt tidligere hadde vi fra før Windows 10 Home som ikke støttet Docker. For

lokal testing og utvikling installerte vi følgende programvare:

• MySQL Server versjon 5.5

• MySQL Workbench (nyeste versjon)

• Intellij IDEA (nyeste versjon)

• Maven (nyeste versjon)

• Git (nyeste versjon)

• Oracle JDK 8

Page 62: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

56

• Docker (versjon 17.12)

5.2 Oppsett av utvikling og preprod-miljø

VM fra OsloMet – utviklingsmiljø

Utviklingsmiljøet var fra begynnelsen av satt opp på VM-en vi fikk tilgang til fra universitetet.

Operativsystemet var det samme som vi brukte på lokalt på våre egne datamaskiner –

Ubuntu 16.04. Vi fikk tildelt en standardbruker som vi kunne logge oss inn med. Vi installerte

så de samme programmene som nevnt i avsnittet over, bortsett fra Intellij IDEA og MySQL

Workbench. Disse verktøyene trenger et grafisk grensesnitt og vi valgte å kun bruke SSH via

terminalvinduer mot VM-en. Rancher-server (versjon 1.6.16) ble deretter installert slik at vi

kunne begynne det grunnleggende arbeidet med å administrere konteinerne vi lagde.

VM fra DigitalOcean – preprod-miljø

Når vi etterhvert fikk problemer med brannmuren hos universitet leide vi en VM fra

DigitalOcean, slik at kunne vi ha full kontroll på ressurser, konfigurasjon og sikkerhet. Vi

brukte en ferdig «droplet» som var klar til bruk med med Ubuntu 16.04 installert og

opprettet personlige brukere for hvert medlem i prosjektgruppen. SSH-nøkler ble generert

på maskinene til hver bruker for å forenkle innloggingen til VM-en uten passord og kopiert

over til VM-en. Vi installerte så de samme programmene som på VM-en fra universitetet. Til

slutt satt vi opp en grunnleggende brannmur ved hjelp av programmet ufw i Ubuntu, og satt

opp tillatelser for SSH og alle nødvendige porter som skulle eksponeres ut fra VM-en. Etter

at oppsettet hos DigitalOcean var ferdig brukte vi kun denne VM-en til å administrere

konteinerne fra Rancher.

Page 63: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

57

Figur 5-3 - Regler i brannmuren

5.3 Oppsett av Avkastningsportal i Rancher

For å sette opp Rancher må Docker først installeres før man starter opp Rancher-serveren

med kommandoen:

$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server

Etter noen minutter er installasjonen ferdig og man kan logge inn i Rancher ved å gå til

http://<server-ip>:8000, hvor <server-ip> i vårt tilfelle er ip-adressen til VM-en. Første gang

man går inn i en ny Rancher-installasjon blir man bedt om å sette opp adgangskontroll, og vi

brukte brukernavn og passord som autentisering. Etter dette må man legge til en «host». En

host er en maskin som skal kjøre konteinerne som administreres med Rancher, og det

trenger ikke å være den samme maskinen som kjører Rancher-serveren. I vårt tilfelle var det

enklest å la VM-en være host for preprod-miljøet.

Page 64: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

58

Figur 5-4 - Legge til ny host i Rancher

Rancher kommer fra før med en integrasjon mot DigitalOcean hvor man kan legge inn en

nøkkel som genereres fra innloggingssiden på digitalocean sine nettsider. Ved å legge til

denne nøkkelen vil Rancher selv sette opp de nødvendige containerne for at maskinen skal

virke som en host, og dermed kunne administreres fra Rancher-serveren.

Figur 5-5 - Legge til DigitalOcean som host i Rancher

Dersom man bruker en host som ikke har integrasjon i Rancher fra før, slik som VM-en fra

universitetet, må man velge «custom» i skjermbildet over. Brukeren legger inn ip-en til

maskinen som skal være Rancher host, og det genereres til slutt en konsollkommando som

må kjøres for at oppsettet skal fullføres. Etter et par minutter er hosten klar til å brukes og

den dukker opp som i figur 5-5.

Figur 5-6 - Konsollkommando for å legge til host i Rancher

Page 65: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

59

Figur 5-7 - Ferdig oppsett av host i Rancher (ip-adressen er skjult)

Containere til Avkastningsportal

Vi lagde tre konteinere – en for hver modul av Avkastningsportal som inngår i

prosjektoppgaven: «Rapportering», «Beregning» og «Renteimport». Vi lagde et Docker

image for hver modul, hvor hver av dem brukte Alpine Linux som grunn-image, og la til

nødvendige JAR-filer og konfigurasjonsfiler i Dockerfilen.

Databasecontainer til testing

Vi lagde en konteiner til bruk under testing og under kjøring av CI/CD-pipelinen. Her brukte

vi et offisielt MySQL-image som grunnlag og la til konfigurasjonsfiler og testdata i imaget slik

at databasen enklest mulig kunne startes og stoppes ved behov.

Page 66: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

60

Docker registry

Et Docker registry ble installert på VM-en for å kunne pushe ferdiglagde images til et sentralt

register slik at Rancher kunne hente ut images og kjøre dem på de ulike hostene. Etter at

registeret var satt opp ble konteinerne til Avkastningsportal og testdatabasen publisert dit.

Dette er en to-trinns prosess hvor man først «tagger» et image med versjonsnummer og så

pusher det til registeret.

Figur 5-8 - Kjørende Docker-register i Rancher

Et Docker-register kommer også med et eget RESTful API som brukes til kommunikasjon. Det

medfører at brukere med tilgang til registeret kan bruke en nettleser til å se innholdet ved å

gå inn på http://<register-adresse>/v2/_catalog.

Page 67: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

61

Figur 5-9 - JSON-respons fra Docker-registeret

Avkastningsportal-stack

I Rancher kan det defineres egne grupper av tjenester som kjører sammen, og dette kalles

for en stack. Vi fant det mest naturlig å opprette en egen stack for Avkastningsportal. For å

gjøre dette går man inn i Rancher og velger «Add Stack» fra hovedsiden. På den påfølgende

siden velger man et navn for stack-en og den blir lagt til i Rancher som en tom gruppe.

Figur 5-10 - Oppsett av Stack i Rancher

Vi satt opp en tjeneste («Service») for hver av modulene i Avkastningsportal i tillegg til

databasekonteineren. Siden konteiner-image’ene allerede var publisert til registeret kunne

vi nå hente dem ut ved hjelp av Rancher.

Page 68: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

62

Figur 5-11 - Oppsett av tjenester i en stack ved bruk av eget register

Oppsettet for hver konteiner inneholder en rekke ulike konfigurasjonsmuligheter slik som

secrets, porter som skal brukes, miljøvariabler og hvilke hosts som skal kjøre tjenesten. Vi

definerte først tjenesten for databasen på grunn av at alle modulene til Avkastningsportal

trenger denne for å kunne hente ut data. Under oppsettet av modulene ble det også

spesifisert at de skulle lenkes sammen med databasekonteineren. Dette gjør at konteinere

alltid vil ha tilgang til databasen gjennom det navnet man velger å kalle lenken for. Det

trengs derfor ikke tas hensyn til dynamisk ip-adresse på databasen siden Rancher og Docker

håndterer dette automatisk. Konfigurasjonsfilene til Avkastningsportal har definert

databaseadressen til å være «avkastning-db» som er navnet vi ga lenken mellom databasen

og modulene.

Figur 5-12 - Ferdig oppsatt stack til Avkastningsportal med testdatabase

Page 69: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

63

Drone

Drone tilbys som en konfigurerbar pakke man kan hente ut fra Rancher Community Catalog.

Installasjonen av Drone er konfigurert til å interagere med GitHub, hvor det først ble satt

opp en egen applikasjon (OAuth) for å håndtere autorisasjon ved hjelp av GitHubs eget API.

Når applikasjonen er satt opp genereres det en klient-ID og -Secret som må legges inn i

konfigurasjonen til Drone.

Figur 5-13 - Drone hentet i Rancher Community Catalog

Når OAuth-applikasjonen er satt opp og drone kjører kan installasjonen aksesseres på

http://<drone-server-adresse>:<port>/. Brukeren vil så bli sendt til GitHub for innlogging og

blir bedt om å autorisere OAuth-applikasjonen slik at systemene kan kommunisere med

hverandre.

Page 70: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

64

Figur 5-14 - Gruppens registrerte OAuth-applikasjoner

Til slutt kan brukeren se sine GitHub-repositories og velge hvilke av disse Drone skal følge

med på. For prosjektgruppen er det Avkastningsportal som er interessant og er det eneste

som ble lagt til. Når dette er lagt inn i Drone kan man konfigurere hendelser som trigger

Drone til å sette i gang en CI-prosess. Hendelsene legges inn i GitHub og kalles «webhooks».

Konfigurasjon er satt til å trigge Drone ved en push til Avkastningsportal på GitHub.

Figur 5-15 - Prosjektgruppens GitHub-repository lagt til i Drone

For at Drone skal kunne gjøre noe som helst må det lages en konfigurasjonsfil med

standardnavnet «.drone.yml», og filen plasseres i rotkatalogen til prosjektet. Når Drone

kjører CI-prosessen sin vil den først hente ut prosjektet fra GitHub og dermed oppdage

konfigurasjonen som skal kjøres. Utfyllende beskrivelse av prosessen med CI/CD-pipeline

kommer i kapittel 5.7.

Page 71: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

65

Janitor

Verktøyet legges inn på samme måte som Drone via Rancher Community Catalog. For vårt

behov var standardkonfigurasjonen god nok. Den bestemmer at Janitor skal kjøre en gang i

timen og kun slette ubrukte Docker images og ikke konteinere. På denne måten blir ingen

ting slettet uventet. Vi opplevde stor plassbesparelse av å la Janitor kjøre i bakgrunnen,

siden det ved hver kjøring av CI/CD-pipelinen ble liggende igjen gamle Docker images av

Avkastningsportal og testdatabasen. Hvert av disse har en størrelse på mellom 140 og 210

MB og totalstørrelsen på alle fire er rundt 700 MB. Testing av applikasjonen krevde svært

mange forsøk og vi opplevde at VM-en fra OsloMet raskt gikk tom for diskplass. Etter at

Janitor var satt i gang var ikke dette et problem lenger.

Figur 5-16 - Henting av Janitor fra Rancher Community Catalog

ELK-stack og Logspout

Sentralisering av logger er viktig for å strukturere og gi verdi til loggdata som genereres av

systemet. ELK-stack ble satt opp ved hjelp av rancher-compose-kommandoer hvor vi først

installerte Elasticsearch. Dette deployer elasticsearch clusteret bestående av fire konteinere

med tjenestene master, data og client node, samt kopf som er web-brukergrensesnittet for

elasticsearch.

Page 72: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

66

Figur 5-17 - Elasticsearch-stack i Rancher

Webgrensesnittet var som standard konfigurert til å bruke port 80 men i og med at denne

porten allerede var i bruk ble det benyttet port 85. Webgrensesnittet nås via nettleser ved

ip-adresse/url på port 85 (http://hp5.vlab.cs.hioa.no:85), og tillater konfigurasjon av

elasticsearch.

Figur 5-18 - Kopf - Webgrensesnitt for elasticsearch

Etter at Kopf kjører og er tilgjengelig installeres logstash som starter opp 3 konteinere med

tjenestene Redis, logstash collector og logstash indexer. Når disse er oppe kan man peke

loggene til adressen logtstash://host:5000.

Page 73: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

67

Figur 5-19 - Logstash-stack i Rancher

For å legge til rette for enklere logg-konfigurering la vi til logspout som samler logger fra alle

kjørende konteinerinstanser og dirigerer de til samme destinasjon. Logspout er en

tilleggstjeneste og er ikke nødvendig for at ELK stack skal fungere.

Figur 5-20 - Logspout-stack i Rancher

Til slutt ble Kibana installert for visualisering av loggdata som er generert av systemet.

Kibana starter opp konteinerne kibana-vip og nginx-proxy og tilbyr et webgrensesnitt for

visualisering av data. Dette webgrensesnittet var også som standard satt til å bruke port 80,

som var allerede i bruk. Porten ble derfor endret til port 92, og kan nås via en nettleser på ip-

adresse/url (http://hp5.vlab.cs.hioa.no:92).

Figur 5-21 - Kibana-stack i Rancher

Page 74: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

68

Figur 5-22 - Kibanas webgrensesnitt

Lastbalansering

For å kunne allokere nødvendig maskinvare for å kjøre containere finnes det funksjonalitet i

Rancher for å bruke en lastbalanserer. Funksjonaliteten er innebygd i Rancher og legges til

enten selvstendig eller som del av en stack. Ved å konfigurere lastbalansereren og stacken

kan Rancher følge med på tjenestene som kjører, og starte opp flere instanser dersom

tilkoblingen til en eksisterende stack går sakte. Dette kan komme av treg internett-tilkobling

eller for stor trafikk inn mot en enkelt Rancher host som ikke har kapasitet til å håndtere alle

brukerne. I løsningen er dette konfigurert, men på grunn av begrenset trafikk inn til

applikasjonen har ikke funksjonaliteten vært nødvendig eller avgjørende for stabiliteten.

Figur 5-23 - Ferdig oppsatt lastbalanserer på VM-en hos DigitalOcean

Page 75: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

69

Ferdig Docker-oppsett på VM

Etter at alle konteinerne var satt opp på VM-en endte vi opp med instansene vist i figurene

under. Den første figuren er beskrivelsen som kommer i terminalen ved å bruke Docker-

kommandoer, mens den siste viser tilsvarende beskrivelse hentet ut fra Rancher. Her blir

flere fordeler med bruk av Rancher synlige: 1) Mer utfyllende beskrivelse av hver konteiner,

2) vi får en oversikt over maskinvareressurser som er tilgjengelige og oppbrukt, og 3)

administrasjonen av konteinere blir enklere ved hjelp av det grafiske grensesnittet i Rancher.

Figur 5-24 - Oversikt over kjørende Docker-konteinere på VM-en

Page 76: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

70

Figur 5-25 - Tilsvarende oversikt i Rancher

5.4 Domenenavn til VM

Let’s Encrypt og Duck DNS

For å kunne sikre applikasjonen med HTTPS10 fant vi ut av vi kunne benyttes en tjeneste fra

Let’s Encrypt (https://letsencrypt.org/). Ved å kjøre et script på en server med et registrert

domenenavn vil Let’s Encrypt lage et godkjent SSL-sertifikat. Dette lagres så på serveren og

kan legges inn i Rancher for å sette opp HTTPS. Ved hjelp av lastbalansereren beskrevet i

forrige avsnitt kan man også bestemme hvilke tjenester som skal ha mulighet til å bruke

HTTPS. Oppsettet for dette er i figur 5-21. Let’s Encrypt finnes også som en Stack i Rancher

Community Catalog som vi brukte for å sette det opp.

10 HTTPS (Hyper Text Transfer Protocol Secure) er en protokoll for sikker kommunikasjon over internett.

Page 77: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

71

Figur 5-26 - Sikker tilkobling til Rancher og Avkastningsportal

Som nevnt er det nødvendig med et domenenavn for å kunne bruke Let’s Encrypt. Når vi

leide VM-en fra DigitalOcean fikk vi utdelt ip-adressen til VM-en. Siden ip-en er statisk kunne

vi så sette opp et domenenavn ved hjelp av en dns-tjeneste. For å unnslippe kostnader og

formaliteter rundt registrering av et «ekte» .no- eller .com-domene undersøkte vi

kostnadsfrie alternativer. Det beste alternativet vi fant heter Duck DNS

(https://www.duckdns.org/), og her registrerte vi en bruker og la inn ip-adressen til VM-en.

Domenenavnet «avkastningsportal.duckdns.org» var ledig og vi fikk registrert det til ip-

adressen. Endringen var gjort på sekunder og vi kunne med en gang bruke domenenavnet i

stedet for ip-adressen for å koble oss til VM-en.

Figur 5-27 - Registrering av domenenavn hos Duck DNS

Page 78: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

72

5.5 Oppsett av egen Rancher Catalog

Det har i guiden flere steder blitt referert til Rancher Community Catalog som inneholder

ulike pakker for å legge til tjenester i Rancher. Vi fant ut at vi kunne lage vår egen katalog

som inneholdt modulene til Avkastningsportal. Dette ble løst ved hjelp av dokumentasjonen

til Rancher11, og består av et eget repository på GitHub med to konfigurasjonsfiler: en for

Docker-containerne og en for oppsettet av egen Stack i Rancher med innstillingene som

kreves. Logoen til Norsk Pensjon er tatt med i registeret for enklere gjenkjenning. Det går

også an å legge til variabler kalt «questions», slik at oppsettet blir konfigurerbart når man

legger til løsningen i Rancher.

Verdien i dette oppsettet ligger i at en utvikler ikke trenger å definere tjenester og lage egen

Stack i Rancher for å legge ut Avkastningsportal på nytt. Dette er tidsbesparende for

utviklerne og gjør portabilitet mellom skytjenesteleverandørene trivielt. Dersom det fra

oppdragsgivers side blir bestemt at løsningen heller skal ligge på Microsoft Azure i stedet for

Amazon EC2 trengs det kun å legges til en ny host i Rancher, og så finne Avkastningsportal i

den egendefinerte katalogen som vist under. Etter at man trykker på «View Details» er det

kun ett museklikk som skal til for å ha en kjørende instans av Avkastningsportal hvor som

helst.

Figur 5-28 - Avkastningsportal som publiserbar pakke i Rancher

11 https://rancher.com/docs/rancher/v1.6/en/catalog/private-catalog/.

Page 79: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

73

5.6 Oppsett av produksjonsmiljø – Amazon AWS

Amazon EC2

Med Rancher som plattform for administrering av konteinere kan man også sette opp ulike

miljøer. Alt som er omtalt i systembeskrivelsen så langt har vært for preprod-miljøet med

testdatabase. For å faktisk kjøre Avkastningsportal med konteinere i skyen måtte vi legge til

en EC2-instans fra Amazon AWS. Vi satt opp et nytt miljø i Rancher og brukte integrasjonen

mot Amazon EC2 for å sette opp instansen. Dette gjøres ved hjelp av en Access Key og en

Secret Key som genereres hos Amazon.

Figur 5-29 - Oppsett av EC2-host i Rancher

Når instansen er kjørende dukker EC2 opp som en egen host i Rancher under miljøet «Prod».

Vi brukte deretter vår egen Rancher-katalog for å publisere Avkastningsportal til Amazon, og

satt opp Janitor for å sørge for plassbesparelse i skyen.

Page 80: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

74

Figur 5-30 - Ferdig oppsatt Avkastningsportal og Janitor i skyen hos Amazon.

Figur 5-31 - Kjørende EC2-instans hos Amazon

Amazon RDS

For å sørge for integriteten til databasen opprettet vi en databaseinstans ved hjelp av

tjenesten RDS (Relational Database Service). RDS tilbyr flere ulike typer database, og i vårt

tilfelle fortsatte vi å bruke MySQL. Avkastningsportal inneholder en rekke

databasemigreringer som det ville tatt mye tid å konfigurere på nytt dersom vi valgte en

annen databasetype. Vi anså det derfor som lite hensiktsmessig å bytte ut databasetypen

siden RDS tilbyr MySQL som løsning.

Page 81: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

75

Figur 5-32 - Oppsett av database i RDS

Figur 5-33 - Valg av versjon i RDS

Når instansen til databasen var ferdig satt opp brukte vi MySQL Workbench for å legge inn

de nødvendige migreringene i databasen slik at den var klar til bruk. Vi satte også opp en

Page 82: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

76

egen sikkerhetsgruppe til databasen slik at den kun tillot tilkoblinger fra sikkerhetsgruppen

som Avkastningsportal bruker i skyen. Etter at migreringene var på plass ble databasen

videre konfigurert til å ikke tillate tilkoblinger utenfra Amazon-miljøet. Med disse

sikkerhetsinnstillingene på plass vil det være svært krevende for utenforstående å få tilgang

til databasen. Vi anser derfor på dette punktet at dataintegriteten er ivaretatt. Konfigurerbar

backup av databasen fra Amazon sin side sørger også for at data ikke går tapt ved

uforutsette hendelser.

Figur 5-34 - Kjørende databaseinstans hos Amazon RDS

5.7 CI/CD-pipeline prosessbeskrivelse

Prosessflyt

Hvis alle prosessene til Drone kjører som de skal vil løsningen bygges, pakkes, publiseres til

Docker-registeret og til slutt legges ut som nye versjoner enten i preprod- eller

produksjonsmiljøet avhengig av hvilken branch på GitHub som ble endret.

Page 83: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

77

Figur 5-35 - Feil under publisering til Docker-registeret

Page 84: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

78

Figur 5-36 - Komplett kjøring av Drone med utplassering av Avkastningsportal i produksjon

Det vil være synlig i Rancher at containerne har blitt oppgradert. Fordelen med dette er at en

bruker kan gå inn i applikasjonen, enten i preprod eller produksjon, og bekrefte at den kjører

som forventet. Hvis applikasjonen ikke oppfører seg tilfredsstillende vil Rancher raskt kunne

avbryte oppdateringen og gå tilbake til forrige fungerende versjon. Hvis applikasjonen er

oppgradert riktig og kjører som forventet går man inn i Rancher og bekrefte dette slik at

gammel versjon fjernes og den nye settes ut i produksjon.

Page 85: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

79

Figur 5-37 - Oppgraderte tjenester sett i Rancher

Drone - arbeidsoppgaver

Hvis vi ser tilbake på figur 5-35 kan vi se ni ulike trinn i prosessen til Drone:

1. Hent ut prosjektet fra GitHub («clone»)

2. Sett opp testdatabase for å kunne kjøre enhets- og integrasjonstester

3. Bygg prosjektet ved hjelp av Maven-plugin til Drone

4. Lag konteiner til Rapportering og legg den ut på vårt Docker-register ved hjelp av

Docker-plugin i Drone

5. Lag konteiner til Beregning og legg den ut på vårt Docker-register ved hjelp av

Docker-plugin i Drone

6. Lag konteiner til Renteimport og legg den ut på vårt Docker-register ved hjelp av

Docker-plugin i Drone

7. Legg ut oppgradert versjon av Rapportering i produksjon ved hjelp av Rancher-plugin

i Drone

8. Legg ut oppgradert versjon av Beregning i produksjon ved hjelp av Rancher-plugin i

Drone

9. Legg ut oppgradert versjon av Renteimport i produksjon ved hjelp av Rancher-plugin i

Drone

Page 86: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

80

I stegene 4-6 får konteinerne i dette tilfellet versjonsnavn («tag») «latest». Dette er gjort for

å skille mellom preprod- og produksjonsversjoner. Tilsvarende versjonsnavn for en preprod-

versjon er «preprod».

I stegene 7-9 brukes det et sett med API-nøkler generert i Rancher for å kunne autorisere

Drone til å interagere med Rancher. Disse nøklene er unike for hvert miljø i Rancher og det

er derfor to sett med nøkler, ett for preprod og ett for produksjon. Disse nøklene er lagret

som secrets i Drone og er derfor ikke synlige for utenforstående selv om de får tak i

konfigurasjonsfilen til Drone. Alt som er synlig er referanser til variabler som

«rancher_access_key» og «rancher_secret_key». På denne måten er sikkerheten til

applikasjonen ivaretatt ved at Rancher ikke vil autorisere brukere uten disse nøklene.

Konfigurasjonen til Drone har satt inn betingede steg for å skille mellom preprod- og

produksjonsmiljøene. Dette sørger for at en utvikler ikke kan legge ut endringer i produksjon

uten at en leder har godkjent endringene i preprod. Dette har vi løst ved at de ulike stegene i

konfigurasjonsfilen til Drone har fått påsatt betingelser. Det betyr at konteinerne til preprod

kun vil bygges og legges ut dersom en utvikler pusher endringer til en egen branch på

GitHub, og at konteinerne til produksjon kun vil bygges og legges ut hos Amazon når en pull

request til master-branchen lages og godkjennes av en leder. I figur 5-35 er det

produksjonsvarianten som har kjørt som vi kan se ved at de siste seks stegene har navn som

«release» og «prod». Prosessen i figuren er altså startet automatisk i Drone ved at en pull

request mot master-branchen har blitt opprettet.

5.8 Testing

Kravspesifikasjonen beskriver at nyutviklet kode automatisk skal testes før integrasjon og

levering. Enhets- og integrasjonstestene kjøres under bygging av prosjektet. Utover disse har

ikke oppdragsgiver hatt ønsker om testing av løsningen. Vi har likevel fått tilgang til Kantegas

systemtester for brukergrensesnittet. Disse omhandlet blant annet testing av

innrapportering av data i forbindelse med administrasjonsmodulen. Denne modulen er ikke

en del av løsningen vi har jobbet med og utgikk derfor fra testplanen.

Vi har utført enhets- og integrasjonstester, systemtest for brukergrensesnitt og systemtest

for automasjon av av bygging, integrasjon og levering. Testrapport for disse med testplan

Page 87: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

81

ligger vedlagt rapporten. Systemtest for automasjon har vi utviklet selv. Tester utviklet av

Kantega skal kjøres i forbindelse med endringer av Avkastningsportal for å påse at

endringene ikke har uønskede effekter på applikasjonens funksjonalitet. Enhetstestene

utlevert fra Kantega har dekningsgrad på 72% av kildekodens klasser og 48% av dets linjer,

men vi har ikke satt oss mål om å videreutvikle enhetstestene for å øke dekningsgraden

siden dette verken har vært et krav eller fokus i oppgaven.

Før endringer i Avkastningsportal settes i produksjon må enhetstester, integrasjonstester og

systemtest for brukergrensesnitt kjøres og bestå. Enhets- og integrasjonstestene kjøres av

Maven ved bygging av prosjektet gjennom vår automatiserte leveranse-pipeline. Siden

dekningsgraden av enhetstestene er lav er videre verifisering av produktet før

produksjonssetting avgjørende for å sikre systemet mot feil. Systemtest for

brukergrensesnittet må gjennomføres av teamleder med endringsrettigheter i

Avkastningsportals master-branch før endringer settes ut i produksjonsmiljøet. Dette for å

sikre at produksjonssatt applikasjon fungerer som den skal. Automatisering av systemtest er

en mulig videreutvikling av systemet og er beskrevet i systemevalueringen. I tillegg til å påse

at testene utføres bør teamleder gjøre en manuell kodegjennomgang. Dette blir i praksis

enklest om utviklere skriver utfyllende oppdateringsnotater12 over hva som er endret ved ny

kode slik at teamleder kan se over disse endringene.

5.9 Adresser til løsningene

Løsning Adresse Beskrivelse

Rancher (utviklingsmiljø) http://hp5.vlab.cs.hioa.no/ Rancher-installasjon brukt til

utvikling. Brukernavn og

passord er bachelorprosjekt

/ avkastningsportal

Avkastningsportal

(produksjon)

http://ec2-18-197-78-223.eu-

central-

1.compute.amazonaws.com:9

016/rapportering/

Produksjonssatt versjon hos

AWS

12 Her menes en “commit message” i Git.

Page 88: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

82

Kopf (elasticsearch) http://hp5.vlab.cs.hioa.no:85/ Grensesnitt for elasticsearch

Kibana http://hp5.vlab.cs.hioa.no:92/ Grensesnitt for Kibana

Figur 5-38 – Tabell over adresser til utviklede løsninger

Page 89: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

83

6 Evaluering

6.1 Evaluering av planlegging

Planlegging og estimering av hvordan prosjektet skulle utføres var en utfordrende oppgave.

Dette var på grunn av mange uklarheter om innholdet i oppgaven i starten av prosjektet.

Som et resultat av dette lagde vi overordnede arbeidsoppgaver som måtte utføres basert på

tidligere erfaringer og kunnskap tilegnet gjennom systemutviklingsfaget. Estimering var noe

vi fant vanskelig og vi ser i etterkant at vi har bommet ganske mye på estimeringen. Dette

gjelder både hvor lang tid det tar å utvikle de forskjellige delene av systemet og hvilke

arbeidsoppgaver vi måtte utføre. Endringer i krav, ansvarsområder og arbeidsoppgaver

gjorde at hvordan vi faktisk arbeidet og hvordan vi planla å løse prosjektet ikke stemte

overens. Planlagte arbeidsoppgaver som for eksempel omfattende testing av ikke-

funksjonelle krav ble ikke like aktuelt, mens tilrettelegging for automatisering ble en større

del av prosjektet. Prosjektet, slik det først ble presentert fra oppdragsgiver, var mindre i

omfang og omfattet kun tilrettelegging for flytting av løsningen til skyen. Vi brukte derfor

mye tid på å definere og utføre ekstraoppgaver til prosjektet. Dette påvirket ikke

planleggingen nevneverdig da vi har jobbet smidig gjennom hele prosjektperioden. I et

større prosjekt ville det muligens vært hensiktsmessig å gå tilbake til planleggingsfasen ved

endringer.

6.2 Evaluering av metodikk og arbeidsmetode

Prosjektgruppen har under arbeid med prosjektet forsøkt å benytte en smidig

utviklingsprosess for å utvikle løsningen med hyppige møter 1-2 ganger i uken. Dette har

fungert godt, og vi har jobbet iterativt for å løse de problemstillingene som kom frem under

utviklingen. På denne måten klarte vi å bryte ned store utfordringer til håndterlige

arbeidsoppgaver vi kunne løse.

Selv om vi har brukt en smidig tilnærming var det ytre faktorer som gjorde at vi ikke kunne

ha faste sprinter innenfor definerte tidsblokker. Påvente av tilgang til kildekode og

dokumentasjon, samt svar på tekniske spørsmål var de største faktorene som førte til noe

Page 90: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

84

ventetid og påvirket progresjonen. Som et resultat av dette var det enkelte perioder med

noe kortere gruppemøter med mindre progresjon. Vi kunne hatt tettere kontakt med

veiledere både fra skolen og fra oppdragsgiver for å få mer hjelp underveis i prosjektet. Selv

om arbeidet har gått bra kunne problemstillinger blitt løst raskere dersom vi hadde utnyttet

disse ressursene bedre. Det må nevnes at vi til tider opplevde at det var vanskelig å få

teknisk veiledning ettersom ressurser både fra skole og oppdragsgiver har vært utilgjengelige

i perioder. Vi kunne også vært raskere til å få oversikt over hvilke teknologier og muligheter

som var aktuelle for å løse oppdraget. Som følge av dette har vi oppdaget konsepter og

aktuelle løsninger sent i prosjektet som ikke kunne implementeres på grunn av

tidsbegrensninger.

I utgangspunktet vurderte vi Scrum som arbeidsmetode, men det viste seg lite passende

med tanke på omfanget av læring og tilegning av kunnskap med temaer og konsepter vi ikke

hadde kjennskap til. Dette ville gjort det vanskelig å definere sprinter med konkrete

arbeidsoppgaver. Oppdragsgiver anbefalte oss å løse oppgavene mest mulig i plenum, som

var medvirkende årsak for å ikke benytte Scrum som arbeidsmetodikk. Prosjektgruppen

kunne vært flinkere til å dele opp problemstillingene til mindre oppgaver slik at vi kunne

brukt kanban mer aktivt.

Et problem ved arbeidsprosessen var tilgang til testmiljø for utvikling. Vi brukte først en

virtuell maskin tildelt fra OsloMet. Denne viste seg å ikke ha tilstrekkelig med ressurser og vi

valgte heller å leie vår egen VM fra DigitalOcean som kunne administreres slik vi selv ønsket.

Før vi byttet til DigitalOcean opplevde vi flere ganger å måtte be om ytterligere ressurser og

tilganger. Dette forsinket arbeidet og progresjonen unødig siden vi måtte vente på

tilbakemelding før den tekniske utviklingen kunne fortsette. Etter at vi byttet til DigitalOcean

var det ikke lenger problemer med administrasjon av utviklingsmiljøet.

6.3 Evaluering av prosjektgruppen

Som nevnt innledningsvis i sluttrapporten hadde ikke prosjektgruppen jobbet sammen

tidligere. Prosjektmedlemmene hadde derimot jobbet to og to sammen i grupper gjennom

mesteparten av bachelorgraden. Før arbeidet med oppgaven startet hadde vi flere

Page 91: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

85

avklaringsmøter for å diskutere samarbeid, oppgavefordeling og kulturen rundt

møtevirksomhet. Under disse møtene ble det klart at prosjektgruppen tenkte forholdsvis likt

rundt disse temaene og det ble ikke oppdaget noen konflikter eller uenigheter rundt

arbeidsprosessen. Det dukket heller ikke opp noen problemer med samarbeidet etter hvert

som arbeidet med oppgaven kom i gang. Prosjektgruppen har samarbeidet godt gjennom

hele prosessen og ingen av medlemmene har uttrykt misnøye underveis.

6.4 Evaluering av løsningen

Oppnåelse av funksjonelle krav

Begge kravene er oppnådd gjennom bruken av Drone med webhooks mot GitHub. Ved hver

publisering av oppdatert kode blir CI/CD-prosessen kjørt og den oppdaterte løsningen blir

utplassert i preprod eller produksjon. Enhets- og integrasjonstester kjøres ved hver

oppdatering og Drone vil stoppe byggingen dersom noen av disse feiler.

Oppnåelse av ikke-funksjonelle krav

Secrets

Håndtering av secrets var et absolutt krav fra oppdragsgiver. I begynnelsen av prosjektet

gjaldt dette tilkoblingen til sftp-serveren hos Oslo Børs for uthenting av avkastningsdata.

Som nevnt i kravspesifikasjonen står det beskrevet at vi ikke skulle bruke denne serveren

allikevel. De gjenstående områdene hvor secrets ble benyttet i prosjektet er i integrasjon

mellom Drone og Rancher når nye versjoner av Avkastningsportal legges ut i preprod eller

produksjon. Secrets håndteres i dette tilfellet av Drone, hvor de er lagt inn slik at de

eksponeres som miljøvariabler og kun er tilgjengelige for Drone-konteinerne. Dersom

funksjonaliteten for å hente data fra Oslo Børs skulle implementeres ville det blitt løst på

samme måte i Rancher som tilbyr tilsvarende håndtering av secrets. Vi anser derfor kravet

oppfylt.

Page 92: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

86

Pris

Pris falt bort som krav på grunn av applikasjonens beskjedne nettverkstrafikk og behov for

maskinvare.

Oppetid, stabilitet og sikkerhet

Vårt valg av skytjeneste sørger for god oppetid og stabilitet. Kravene anses som godt

oppnådd. Videre er preprod-miljøet sikret med HTTPS gjennom Let’s Encrypt for å forhindre

at utenforstående får tilgang til miljøet.

Integritet av data og sikkerhet i databasetilkobling

Bruk av Amazon RDS som databasetilbyder i produksjon har vist seg å være et godt valg.

Integriteten av data er opprettholdt ved at utenforstående ikke har tilgang til databasen og

sikkerheten i tilkobling til database er håndtert gjennom sikkerhetsgrupper i Amazon AWS.

Kravene anses som godt oppnådd.

Levetid på miljøet applikasjonen kjører i

Med Ubuntu LTS som operativsystem der Rancher-serveren kjører er levetiden ved hver

oppgradering av operativsystem fem år. Docker-versjoner er aldri støttet i mer enn et år av

gangen. Docker Enterprise Edition har utgivelser årlig og støttes dermed lengst. Vi måtte

bruke Docker Community Edition da det fra oppdragsgivers side ble bestemt at lisenser for

Docker Enterprise Edition ble for dyrt. Vi har valgt å bruke Docker CE Stable som har

utgivelser hver tredje måned over Docker CE Edge som har månedlige oppdateringer.

Miljøet er egnet for oppgraderinger gjennom pakkesystemet til Ubuntu. Kravet anses som

oppnådd.

Applikasjonens funksjonalitet

Ved bruk av system- og regresjonstester underveis i prosessen har vi kommet frem til at

applikasjonens funksjonalitet er, med begrensningene i prosjektoppgavens omfang tatt i

betraktning, godt ivaretatt. Alle funksjoner gruppen er kjent med virker likt som dagens

produksjonssatte Avkastningsportal. Kravet anses som oppfylt i sin helhet.

Page 93: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

87

6.5 Forbedring og videreutvikling

Vi har under utviklingsprosessen fått en økt forståelse av infrastruktur, konteinerteknologi,

skytjenester og i retrospekt innsett at det er fremdeles muligheter for å ytterligere forbedre

løsningen. De umiddelbare forbedringene som vi kan identifisere er som følgende:

Optimalisering

Konteinerne som kjører selve Avkastningsportal kan optimaliseres for å bruke mindre minne

og diskplass. Dette kan gjøres ved å manuelt definere størrelsen på ressursene som blir

tildelt hver konteiner.

ELK

ELK-stack har mange muligheter for å gjøre overvåking av systemet brukervennlig, oversiktlig

og effektivt. Ideelt sett ønsket vi å konfigurere ELK-stack til å kunne hente og visualisere mer

data enn det vi fikk tid til. Konfigurasjon for henting av konteinerlogg, systemlogg og

nettverkslogger ville vært en naturlig forbedring i løsningen. Det ville også vært

hensiktsmessig å sentralisere data fra Log4J-rammeverket som allerede er implementert i

applikasjonen. Kibana gir muligheter for å utforme dashboards med aggregerte data fra

sentraliserte logger, noe som ville gitt brukervennlig monitorering i sanntid og innsikt i

systemets loggførte data.

Automasjon av systemtest

I løsningen vi har utviklet legges det opp til manuell systemtesting for brukerinteraksjoner på

grensesnittet til Avkastningsportal, og det er også lagd systemtest for hele

automasjonsprosessen. Det finnes muligheter for å automatisere disse testene med verktøy

som Selenium. Selenium kan utføre skriptede operasjoner på en nettleser med eksempelvis

museklikk, og teste resultat av handlinger mot forventet resultat.

Automasjon av tester kan være verdifullt og ressursbesparende for selskaper som driver

med hyppige leveranser og testdrevet utvikling. Dette er også en videre forbedring av

produktets kvalitetssikring siden testing foregår kontinuerlig og er konsistent. Automatiserte

Page 94: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

88

systemtester er hensiktsmessige og noe vi ønsket å implementere for å redusere

mulighetene for menneskelige feil, men tidsbegrensninger gjorde at dette ikke ble utviklet.

Synkronisering av innrapportering

Ved videreutvikling av løsningen kunne det være aktuelt å implementere synkronisering av

databasen. Slik kan produksjonsdatabasen spiles mot databasen i løsningen vi har utviklet.

Dette kan gjøres ved å hente ut data fra eksisterende database ved nye innrapporteringer og

legge disse inn i vår database ved hjelp av en SOAP-basert webtjeneste.

Page 95: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

89

7 Konklusjon

7.1 Læringsutbytte

Læringsutbyttet har vært verdifullt for samtlige medlemmer i prosjektgruppen, og vi sitter

igjen med kunnskap som er ettertraktet på arbeidsmarkedet. Læringsutbyttet oppsummeres

i listen under.

• Teori og praksis om arkitektur og infrastruktur for webapplikasjoner

• Utvikling og kvalitetssikring av digitale løsninger

• Kontinuerlig og effektiv leveranse av applikasjoner

• Bruk av skytjenester

• Konteinerteknologi og flytting av eksisterende løsninger til konteinere

• Verdien av prosjektstyringsverktøy og agile arbeidsmetoder

• Praktisk erfaring med fremtidsrettede teknologier

• Erfaring med arbeidslivet i et IT-selskap

7.2 Konklusjon

Gjennom løsningen vi har utviklet kjører Avkastningsportal problemfritt i skyen, og

hovedmålet med prosjektoppgaven er oppnådd. Videre har vi utvidet løsningen ved å legge

til elementer som har tilført tilleggsverdi for oppdragsgiver. Dette har hovedsakelig dreid seg

om tilretteleggelse for kontinuerlig integrasjon og levering gjennom automasjonsverktøyet

Drone. Konteinerisering av applikasjonen med Docker sikrer økt stabilitet, robusthet og

mindre ressursbruk. Konteinerne håndteres av Rancher som tar seg av administrering og

utplassering.

Alle kravene, både fra arbeidsgiver og de som er utarbeidet av prosjektgruppen, har blitt

oppfylt selv om det fremdeles er forbedringspotensiale ved løsningen. Verdien for

oppdragsgiver ligger i enklere arbeidsflyt og dermed besparelser i arbeidstid vedrørende

utvikling, vedlikehold og overvåking. Løsningen gir også oppdragsgiver grunnlag for å

vurdere om de skal flytte øvrige applikasjoner ut til skyen.

Page 96: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

90

Tidsbegrensninger tillot oss dessverre ikke å ferdigstille hele løsningen slik vi ønsket. Vi kan

heller ikke med sikkerhet si hvordan en produksjonssatt versjon med reelle brukere ville

oppført seg siden dette ikke har vært en del av oppgaven.

Under prosjektperioden har vi tilegnet oss kunnskap med moderne teknologi og fått en

forsmak på hvordan bedrifter jobber i dag for å forbedre og effektivisere drift og vedlikehold

av webapplikasjoner.

Page 97: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

91

8 Teknisk ordliste

Term Beskrivelse

Agil Fellesbegrep for smidige prosesser

Back-end Serverprogrammering hvor logikken i applikasjonen

ligger

Branch En kopi av kode i versjonshåndteringssystemet hvor

utviklere gjør sine endringer

Build/Bygging Bygging av applikasjoner

CD - Continuous Delivery Kontinuerlig levering er en utviklingspraksis

CI - Continuous Integration Kontinuerlig integrasjon er en utviklingspraksis

DevOps Developer and Operations

Front-end Klientprogrammering hvor funksjonalitet i et grensesnitt

ligger

FTP Protokoll for filoverføring

Host Server som inneholder applikasjon og kan aksesseres

over nettverk.

Image En statisk lesbar fil med kjørbar kode som mal for

oppsett av en konteiner

IP Internet Protocol, format for data som skal sendes over

et nettverk

Konteiner / Container En kjørende instans av et konteiner-image

Konteinerhåndteringsplattform System for å administrere containere og deres

utplassering

Page 98: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

92

Linux Et UNIX-basert distrubusjonssystem basert på åpen

kildekode, utviklet av Linus Torvalds

Merging Sammenstilling av kode fra flere branches

Networking Prosessen med å lage eller bruke et datanettverk

Node En vertsmaskin eller knutepunkt i et nettverk hvor

kommunikasjonslinjer møtes og kobles sammen

Open source Åpen kildekode

Pipeline Et sett med ledd som data går igjennom

Preprod-miljø Et utviklingsmiljø som ligner så mye som mulig på en

produksjonssatt applikasjon. Dette benyttes som en test

før produksjon og er brukt for å teste versjoner som er

antatt klare for produksjonssetting.

Produksjonsmiljø Teknisk miljø hvor en ferdig produksjonssatt applikasjon

befinner seg

Pull Hente kode fra et versjonshåndteringssystem

Pull request Forespørsel om å legge inn endret kode i en annen

branch

Push Lagre kode i et versjonshåndteringssystem

Read-Only Rettigheter til å lese en fil, men ikke skrive til den

SOAP Meldingsprotokoll for dataoverføring i webtjenester

Stack Et sett med tjenester som henger sammen. Brukes i

Rancher for å strukturere løsninger

Utviklingsmiljø Et utviklingsmiljø med den infrastrukturen som trengs for

å utvikle applikasjoner

Page 99: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

93

VM Virtuell maskin

Webapplikasjon Applikasjon kjørende på internett som nås via nettleser

Figur 8-1 - Tabell med teknisk ordliste

Page 100: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

94

9 Referanser

Amazon Web Services. (2017). Introducing AWS Fargate – Run Containers without Managing

Infrastructure | Amazon Web Services. Hentet fra

https://aws.amazon.com/blogs/aws/aws-fargate/

Apache Maven Project. (2018). Maven - Introduction. Hentet fra

https://maven.apache.org/what-is-maven.html

Atlassian. (udatert). What is DevOps? Hentet fra https://www.atlassian.com/devops

Chakraborty, S. (2017). ELK Stack Tutorial with Example - HowToDoInJava. Hentet fra

https://howtodoinjava.com/microservices/elk-stack-tutorial-example/

Chhajed, S. (2015). Learning ELK Stack. Packt Publishing Ltd. Hentet fra

https://books.google.no/books?hl=en&lr=&id=EfqoCwAAQBAJ&oi=fnd&pg=PP1&dq=

elk+stach+buisness+intelligence&ots=lPF0oUfHB3&sig=BdH6xSmKuupbKHtV26H7xjiU

1ww&redir_esc=y#v=onepage&q=buisness&f=false

Christner, B. (2015). Docker Image Size Comparison [Bilde]. Hentet fra

https://www.brianchristner.io/docker-image-base-os-size-comparison/

Chugh, S. (2018). DigitalOcean vs AWS EC2: 8 Factors to Decide Who’s the Winner?

ServerGuy.com. Hentet fra https://serverguy.com/comparison/digitalocean-vs-aws-

ec2/

Codemy School. (2016). Docker: An introduction to Rancher [Videoklipp]. Hentet fra

https://www.youtube.com/watch?v=C8H0TdLB2aA&index=10&list=PLjQo0sojbbxViG

EbI_87SPXpb3neuVqDL

DashBouquet. (2017, 4. oktober). AWS vs. DigitalOcean: Which Cloud Server is Better. Hentet

fra https://hackernoon.com/aws-vs-digitalocean-which-cloud-server-is-better-

1386499a6664

Docker. (2018). Docker Documentation [Bilde]. Hentet fra

https://docs.docker.com/engine/docker-overview/#the-docker-daemon

Page 101: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

95

Docker. (2018). Docker Documentation. Hentet fra

https://docs.docker.com/engine/security/security/#conclusions

Drone Continuous Delivery. (2018). Drone IO: Installation Overview. Hentet fra

http://docs.drone.io/installation/

Ebert, C., Gallardo, G., Hernantes, J., & Serrano, N. (2016). DevOps. IEEE Software, 33(3), (ss.

94–100). https://doi.org/10.1109/MS.2016.68

EU GDPR Information Portal. (2018). EU GDPR Portal. Hentet fra https://www.eugdpr.org/

Hollander, R. (2018). The global cloud market jumped 46% in Q4. Hentet fra

http://www.businessinsider.com/global-cloud-market-q4-2018-2

Jabbari, R., bin Ali, N., Petersen, K., & Tanveer, B. (2016). What is DevOps?: A Systematic

Mapping Study on Definitions and Practices. In Proceedings of the Scientific Workshop

Proceedings of XP2016 (ss. 12:1–12:11). New York, NY, USA: ACM.

https://doi.org/10.1145/2962695.2962707

Jaramillo, D., Nguyen, D. V., & Smart, R. (2016, mars). Leveraging microservices architecture

by using Docker technology. In SoutheastCon, 2016 (ss. 1-5). IEEE.

Kantega AS. (udatert). Hvem er vi. Hentet fra https://www.kantega.no/hvemervi/

Kavis, M. J. (2014). Architecting the Cloud: Design Decisions for Cloud Computing Service

Models (SaaS, PaaS, and IaaS). Somerset, UNITED STATES: John Wiley & Sons,

Incorporated. Hentet fra

http://ebookcentral.proquest.com/lib/hioa/detail.action?docID=1605593

Khan, A. (2017). Key Characteristics of a Container Orchestration Platform to Enable a

Modern Application. IEEE Cloud Computing, 4(5), (ss. 42-48).

LeanKit. (2018, 2. mai). What is Kanban? Hentet fra https://leankit.com/learn/kanban/what-

is-kanban/

Lean Communications. (udatert). Hva er Lean. Hentet fra

https://www.leancommunications.no/om-oss/hva-er-lean/

Page 102: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

96

Lwakatare, L. E., Kuvaja, P., & Oivo, M. (2016). Relationship of DevOps to Agile, Lean and

Continuous Deployment. In Product-Focused Software Process Improvement (ss. 399–

415). Springer, Cham. https://doi.org/10.1007/978-3-319-49094-6_27

MacLaughlin, K., Sullivan, M. (2017, mars) How AWS Stacks Up Against Rivals on Downtime.

Hentet fra https://www.theinformation.com/articles/how-aws-stacks-up-against-

rivals-on-downtime

Malav, B. (2017, 16. desember). Microservices vs Monolithic architecture. Hentet fra

https://medium.com/startlovingyourself/microservices-vs-monolithic-architecture-

c8df91f16bb4

Manifesto for Agile Software Development. (udatert). Hentet fra http://agilemanifesto.org/

Microsoft. (2017). Overview of Service Fabric on Azure. Hentet fra

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-overview

Pahl, C. (2015). Containerization and the Paas cloud. IEEE Cloud Computing, 2(3) (ss. 24-31).

Poppendieck, M., & Poppendieck, T. (2003). Lean Software Development: An Agile Toolkit:

An Agile Toolkit. Addison-Wesley. Hentet fra

https://books.google.no/books?id=IJ1gAgAAQBAJ

Preeth, E. N., Mulerickal, F. J. P., Paul, B., & Sastri, Y. (2015, november). Evaluation of Docker

containers based on hardware utilization. In Control Communication & Computing

India (ICCC), 2015 International Conference on (ss. 697-700). IEEE.

Rancher Labs. (2018). CICD Debates: Drone vs Jenkins. Hentet fra

https://rancher.com/drone-vs-jenkins/

Rightscale.com. (2017). Cloud Computing Trends: 2017 State of the Cloud Survey. Hentet fra

https://www.rightscale.com/blog/cloud-industry-insights/cloud-computing-trends-

2017-state-cloud-survey

Rosenfeld, L., Morville, P., & Arango, J. (2015). Information architecture: for the web and

beyond. Sebastopol (CA): O’Reilly Media.

Page 103: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

97

RHD Blog. (2017). Continuous Integration: A "Typical" Process - RHD Blog. Hentet fra

https://developers.redhat.com/blog/2017/09/06/continuous-integration-a-typical-

process

Sala-Zárate, M., & Colombo-Mendoza, L. (2012). CLOUD COMPUTING: A REVIEW OF PAAS,

IAAS, SAAS SERVICES AND PROVIDERS. Lámpsakos, 0(7) (ss. 47-57). Hentet fra

http://www.funlam.edu.co/revistas/index.php/lampsakos/article/view/844/811

Scheepers, M. J. (2014, juni). Virtualization and containerization of application

infrastructure: A comparison. In 21st Twente Student Conference on IT (Vol. 21).

Selenium. (2018). Introduction — Selenium Documentation. Hentet fra

https://www.seleniumhq.org/docs/01_introducing_selenium.jsp

Sneha S.K. (2018). What is Jenkins? - Vmokshagroup.com. Hentet fra

https://vmokshagroup.com/blog/what-is-jenkins/

Taipale, O., Kasurinen, J., Karhu, K., & Smolander, K. (2011). Trade-off between automated

and manual software testing. International Journal of System Assurance Engineering

and Management, 2(2) (ss. 114–125). https://doi.org/10.1007/s13198-011-0065-6

Techopedia. (udatert). What is a Single Point of Failure (SPOF)? - Definition from Techopedia.

(udatert). Hentet fra https://www.techopedia.com/definition/4351/single-point-of-

failure-spof

Utley, G. (2018, april). Microsoft Azure vs. AWS – How They Stack Up in 2018. Hentet fra

https://www.cwps.com/blog/microsoft-azure-vs.-aws-how-they-stack-up-in-2018

Wallen J. (2013). 10 benefits of virtualization in the data center. - TechRepublic.com. Hentet

fra https://www.techrepublic.com/blog/10-things/10-benefits-of-virtualization-in-

the-data-center/

Page 104: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

98

10 Vedlegg 1 - Konfigurasjonsoppsett

10.1 Versjoner brukt i prosjektet

• Docker 17.12

• Rancher 1.16.14

10.2 Oppsett

• Installer Docker via hjelpescript fra Rancher:

$ curl https://releases.rancher.com/install-docker/17.12.sh |sh

• Installer Rancher-serveren via Docker:

$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:stable

• Vent et par minutter og gå til http://localhost:8080 for å få opp Rancher-serveren.

Når serveren er i gang er første steg å legge til en host

• Gå tilbake til Rancher og velg “Add Host”. Legg til IP til ønsket maskin som skal være

Rancher host. Denne vil bli lagt til i Rancher og kjøre de konteinerne som den

skeduleres for

Figur 10-1 - Inntasting av ip-adresse for Rancher host

• Til slutt kopierer du ut kommandoen fra steg 5 og kjør den i terminal. Etter et par

minutter vil ny host dukke opp i Rancher

Page 105: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

99

Konfigurasjon av Docker

Scriptene runBeregning.sh og runRenteimport.sh må kopieres inn og tilpasses

mappestruktur og filsystem for å kjøre tjenestene på rett måte. Renteimport vil som før

trenge renteimport-spring.properties med informasjon om sftp-server hos Oslo Børs.

Renteimport og beregning har også definert en log4j.xml-fil i sine oppstartsscripts. Et

eksempel på denne ligger nederst i dette avsnittet

Rapportering

Dockerfile

FROM anapsix/alpine-java

COPY Rapportering/target/rapportering-jetty-console.war

/home/avkastning

COPY config/src/main/resources/avkastning.properties

/home/avkastning

Bygging og pakking

sudo docker build -t rapportering .

sudo docker tag rapportering <docker-registry-

url>/rapportering

sudo docker push <docker-registry-url>/rapportering

Beregning

Dockerfile

FROM anapsix/alpine-java

COPY beregning-2.3-SNAPSHOT.jar /home/beregning/

COPY avkastning.properties /home/beregning/

COPY runBeregning.sh /home/beregning/

Bygging og pakking

sudo docker build -t beregning .

sudo docker tag beregning <docker-registry-url>/beregning

Sudo docker push <docker-registry-url>/beregning

Renteimport

Dockerfile

Page 106: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

100

FROM anapsix/alpine-java

COPY renteimport-2.3-SNAPSHOT-exec.jar /home/renteimport/

COPY avkastning.properties /home/renteimport/

COPY runRenteimport.sh /home/renteimport/

COPY log4j.xml /home/renteimport/

Bygging og pakking

sudo docker build -t renteimport .

sudo docker tag renteimport <docker-registry-url>/renteimport

Sudo docker push <docker-registry-url>/renteimport

Log4j.xml

Denne logger til konsoll med debug og er grei å bruke til testing:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration debug="true"

xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="console"

class="org.apache.log4j.ConsoleAppender">

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern"

value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"

/>

</layout>

</appender>

<root>

<level value="DEBUG" />

<appender-ref ref="console" />

</root>

</log4j:configuration>

Logging til både konsoll og fil med loggnivå INFO:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration debug="true"

xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="console"

class="org.apache.log4j.ConsoleAppender">

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern"

Page 107: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

101

value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L -

%m%n" />

</layout>

</appender>

<appender name="file"

class="org.apache.log4j.RollingFileAppender">

<param name="append" value="false" />

<param name="maxFileSize" value="10MB" />

<param name="maxBackupIndex" value="10" />

<param name="file" value="applikasjonsnavn.log" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern"

value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L -

%m%n" />

</layout>

</appender>

<root>

<level value="INFO" />

<appender-ref ref="console" />

<appender-ref ref="file" />

</root>

</log4j:configuration>

Konfigurasjon av Rancher

Avkastningsportal-stack - lokalt og preprod-miljø

1. Det må opprettes en stack i rancher for å samle tjenestene. Velg “Add stack” fra

hovedsiden. Alle stegene i denne seksjonen legges til som nye services under samme

stack

2. For å kjøre Avkastningsportal lokalt og i preprod-miljøet opprettes en

databasecontainer. Konfigurasjonen av denne er lagd for å ligne så mye som mulig på

slik databasen til dagens Avkastningsportal er satt opp, og dette beskrives i større

detalj lenger ned

3. En tjeneste for Rapportering ble definert. Denne ble i Rancher linket sammen med

mysql-tjenesten og har startkommandoen ‘java -jar /home/avkastning/rapportering-

jetty-console.war --headless --forwarded --port 9016 --contextPath /rapportering’.

Porten en brukt for testing og må endres når før produksjonssetting Videre ble det i

Rancher definert en miljøvariabel for å få inn en nødvendig konfigurasjonsfil slik:

Page 108: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

102

variabel ‘AV_ENV’ med verdien ’file:/home/avkastning/avkastning.properties’. Vi har

brukt versjonsnavn “latest” for konteinerne som brukes i preprod/staging.

Figur 10-2 - Oppsett for Rapportering i preprod

4. Når tjenestene linkes sammen i Rancher vil man kunne bruke navnet på linken som

adresse til databasen. I vårt tilfelle heter linken “avkastning-db”, og for å få

tjenestene til å kommunisere sammen endres konfigurasjonsfilen

avkastning.properties til å peke på “avkastning-db:3306” som adresse til databasen.

5. Tilsvarende oppsett ble gjort for beregning og renteimport. Startkommandoene er

like, men tjenestene er satt opp til å kun kjøre på kommando ved å gå inn i Rancher.

Dette står i motsetning til rapportering som kjører hele tiden.

Figur 10-3 - Ferdig oppsatt stack for Avkastningsportal lokalt og preprod

Page 109: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

103

Eksportert konfigurasjon fra Rancher

Rancher-compose.yml:

version: '2'

services:

database:

scale: 1

start_on_create: true

rapportering:

scale: 1

start_on_create: true

renteimport:

scale: 1

start_on_create: true

beregning:

scale: 1

start_on_create: true

Docker-compose.yml:

version: '2'

services:

database:

image: <docker-registry-url>/avkastning-drone-db:latest

environment:

MYSQL_ROOT_PASSWORD: <ønsket databasepassord>

stdin_open: true

tty: true

labels:

io.rancher.container.pull_image: always

rapportering:

image: <docker-registry-url>/rapportering:latest

environment:

AV_ENV: file:/opt/rapportering/avkastning.properties

stdin_open: true

tty: true

links:

- database:avkastning-db

labels:

io.rancher.container.pull_image: always

renteimport:

image: <docker-registry-url>/renteimport:latest

environment:

AV_ENV: file:/opt/renteimport/avkastning.properties

stdin_open: true

tty: true

links:

- database:avkastning-db

labels:

io.rancher.container.pull_image: always

Page 110: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

104

io.rancher.container.start_once: 'true'

beregning:

image: <docker-registry-url>/beregning:latest

environment:

AV_ENV: file:/opt/beregning/avkastning.properties

stdin_open: true

tty: true

links:

- database:avkastning-db

labels:

io.rancher.container.pull_image: always

io.rancher.container.start_once: 'true'

Avkastningsportal-stack - produksjonsmiljø

Stacken opprettes på samme måte som over. I vårt tilfelle lagde vi et eget Rancher

environment kalt “prod” hvor vår Amazon EC2-instans er lagt til som eneste host. Databasen

er en RDS-instans fra amazon og det blir derfor ingen databasekonteiner i stacken. Vi har

brukt en avkastningPROD.properties-fil for å legge inn jdbc-adressen slik som det er gjort fra

før i vår utleverte versjon av Avkastningsportal.

Når servicene blir lagt til har de hos oss fått versjon “prod” av de ulike Docker-image’ene i

vårt registry. Hva man kaller versjonene for kan bestemmes i konfigurasjonen til Drone.

Figur 10-4 - Oppsett for rapportering i produksjon

Page 111: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

105

Figur 10-5 - Ferdig oppsatt stack for Avkastningsportal i produksjon

Eksportert konfigurasjon fra Rancher

Rancher-compose.yml:

version: '2'

services:

rapportering:

scale: 1

start_on_create: true

renteimport:

scale: 1

start_on_create: true

beregning:

scale: 1

start_on_create: true

Docker-compose.yml:

version: '2'

services:

rapportering:

image: <docker-registry-url>/rapportering:prod

environment:

AV_ENV: file:/opt/rapportering/avkastningPROD.properties

stdin_open: true

tty: true

ports:

- 9016:9016/tcp

labels:

Page 112: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

106

io.rancher.container.pull_image: always

renteimport:

image: <docker-registry-url>/renteimport:prod

environment:

AV_ENV: file:/opt/renteimport/avkastningPROD.properties

stdin_open: true

tty: true

labels:

io.rancher.container.pull_image: always

io.rancher.container.start_once: 'true'

beregning:

image: <docker-registry-url>/beregning:prod

environment:

AV_ENV: file:/opt/beregning/avkastningPROD.properties

stdin_open: true

tty: true

labels:

io.rancher.container.pull_image: always

io.rancher.container.start_once: 'true'

Tjenester i Rancher

Janitor

Janitor brukes for å frigi diskplass. Den virker ved å slette gamle ubrukte docker images som

ikke lenger er i bruk. For å sørge for at den ikke sletter ting som er i bruk har vi satt den opp

til å ikke slette konteinere under noen omstendigheter. Dette er nødvendig fordi to av

modulene i Avkastnings-stacken kun kommer til å kjøre på faste tider ved bruk av en

scheduler. I andre tilfeller slik som oppsett av Drone er det konteinere som kun oppretter

datavolum, og disse vil også kun kjøre første gang Drone settes opp. Disse ville ha blitt slettet

av Janitor hvis den var konfigurert til å fjerne alt som ikke var i bruk. Ved å bruke

standardinnstillingen kjører Janitor en gang i timen og beholder alle konteinere, og kun

ubrukte docker images blir fjernet.

Page 113: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

107

Figur 10-6 - Janitor stack fra Rancher Community Catalog

Figur 10-7 - Konfigurasjon av Janitor

Oppsett av Drone CI

For å knytte Drone opp mot GitHub måtte det først opprettes en OAuth-applikasjon inne på

GitHub. Oppsettet for denne ser på VM-en vi fikk fra HiOA slik ut:

Page 114: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

108

Figur 10-8 - Definisjon av GitHub OAuth-applikasjonen

Page 115: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

109

Dette oppsettet spesifiseres når man legger til Drone stack på Rancher, og det er da Client ID

og Client Secret som må defineres. Videre ble port 8000 valgt til Drone.

Endelig oppsett av en Drone stack kan se slik ut:

Figur 10-9 - Oppsett av Drone stack i Rancher

Figur 10-10 - Ferdig utplassering av Drone stack i Rancher

Page 116: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

110

Oppsett for å kjøre CI/CD med Drone CI

Drone ble satt opp til å kjøre en konteiner med MySQL for å forenkle testingen. For at dette

skulle fungere var det nødvendig å gjøre følgende:

Det ble opprettet en egen avkastningDRONE.properties for å kjøre i test og preprod/staging.

Kun første verdi i filen er endret slik:

avkastning.database.mysql.hostname=avkastning-db

I Drone-konfigurasjonsfilen vist under (.drone.yml) er databasen satt opp som en tjeneste

(service). Navnet på denne tjenesten, i vårt tilfelle “database”, vil også virke som et

hostname inne i konteinere Drone setter opp, og det er derfor endringen i

avkastningDRONE.properties er nødvendig.

Konfigurasjon av API keys i Rancher

For å oppdatere applikasjonen i Rancher etter at de bygges i Drone er det nødvendig å sette

opp API-nøkler som Drone bruker for å kommunisere med Rancher. Dette gjøres fra Rancher

sin meny. Første steg er å velge riktig environment i Rancher, altså preprod/staging eller

prod avhengig av hvilke nøkler man skal sette opp. Dette må gjøres for begge miljøene for at

Drone skal kunne oppdatere tjenestene.

Figur 10-11 - Menyvalg for å lage API-nøkler i Rancher

Inne på denne siden velges “Advanced options” og så “Add Environment API Key”. Det lages

så en access key og en secret key som oppføres som secrets inne i Drone og senere refereres

i konfigurasjonsfilen til Drone som beskrives i neste kapittel. Man må også notere seg

Endpoint-adressen til rancher. Denne er unik for hvert environment man har lagd og må

Page 117: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

111

også refereres til i Drone-konfigurasjonsfilen. I vårt tilfelle har vi brukt versjon 1 av

endpointet siden versjon 2 står listet som en beta-versjon.

Oppsett av webhooks og secrets i Drone CI

Første gang man går inn i Drone vil man redirectes til GitHub eller tilsvarende der hvor

OAuth-applikasjonen ble satt opp. Man logger så inn og bekrefter at man vil bruke OAuth-

applikasjonen. Etter at dette er gjort vil Drone få oversikt over repository-ene og man velger

det som skal brukes til bygging av prosjektet. Etter at dette er gjort kan man sette opp

nødvendige webhooks i Drone og disse blir så automatisk lagt til hos GitHub eller annen Git-

løsning.

Figur 10-12 - Menyen i Drone

Figur 10-13 - Menyvalg for innstillinger

I vårt tilfelle bruker vi “push” som webhook. Tanken er at det kun er en teamleder som har

tilgang til å pushe til master, og at de andre som jobber på prosjektet bruker sin egen feature

branch. Når en utvikler pusher til sin feature branch vil Drone kjøre en CI/CD-pipeline og

legge ut nye versjoner i preprod/staging. Når teamleder til slutt godkjenner en pull request

til master vil Drone legge ut endelige versjoner i produksjon. Hvordan dette settes opp

beskrives i neste kapittel.

Page 118: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

112

Figur 10-14 - Oppsett av webhooks i Drone

For å legge inn secrets i Drone går man tilbake til menyen øverst til høyre og velger Secrets.

Det er viktig at man bruker riktig navn på secrets da disse oppdages automatisk av plugins til

Drone. Hva som er riktig navn finner man i plugin-dokumentasjonen på

http://plugins.drone.io/. I vårt tilfelle trenger vi secrets til Rancher-pluginen som er ansvarlig

for å oppdatere tjenestene for både preprod/staging og for produksjon. Riktig navn på

secrets er “rancher_access_key” og “rancher_secret_key”, og dette er API-nøklene som ble

lagd i forrige kapittel. Siden vi bruker Rancher-pluginen både til preprod/staging og til

produksjon må vi gi et annet navn til produksjonsnøklene, og disse kan i konfigurasjonsfilen

til Drone refereres til ved et annet navn. Dette beskrives i neste kapittel.

Figur 10-15 - Ferdig oppsett av nødvendige secrets i Drone

Page 119: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

113

Konfigurasjonsfil til Drone CI

Konfigurasjonsfilen som vises under inneholder all nødvendig konfigurasjon for både

preprod og for produksjon.

Filen er delt inn i seksjonene “pipeline” og “service”. I seksjonen “pipeline” ligger alle

stegene i rekkefølge slik Drone vil kjøre dem når prosjektet skal bygges og deployes i skyen.

Steg 1 - build

Dette steget bruker Drone sin maven-plugin for å bygge prosjektet. Til slutt kjøres filen

buildProjects.sh for å gjøre klar filene som trengs til å bygge de tre ulike docker images.

Dette scriptet er beskrevet lengre ned under overskriften “buildProjects.sh”.

Stegene 2-4 - bygg containere til preprod

Disse stegene bruker Drone sin docker plugin for å bygge docker images av hver av de tre

modulene som ble ferdigstilt i steg 1. Legg merke til siste del av hvert steg, hvor betingelsen

for hvilken git branch det skal bygges fra defineres. Siden preprod -containerne kun skal

bygges fra branches som ikke er master er denne betingelsen satt på, og disse tre stegene vil

derfor kun kjøres når det utvikles i en feature branch. I stegene er det også bestemt at de

ferdigstilte docker images skal ha tag “latest”, slik som ble beskrevet tidligere under

overskriften “Avkastningsportal-stack - lokalt og preprod/staging-miljø”.

Stegene 5-7 - bygg containere til produksjon

Disse stegene er like som de tre forrige, bortsett fra at begrensningen er satt til at de kun

skal kjøres dersom man pusher til master. Docker-image’ene som bygges her vil få tag-en

“prod”, og blir derfor liggende i vårt docker registry som separate versjoner fra de som

bygges til bruk i preprod/staging. Slik sørger vi for å skille mellom de ulike versjonene av

modulene når vi i de siste stegene definerer hvilke versjoner som skal brukes hvor.

Stegene 8-10 - legg ut nye versjoner i Rancher for preprod/staging

Nå benytter vi oss av Drone sin Rancher-plugin. Denne lar oss integrere med Rancher-

installasjonen og vi kan definere hvilken stack og hvilke services som skal oppgraderes. Likt

som i de to forrige overskriftene er betingelsen om at branch på git ikke skal være master til

stede. Vi refererer så til API-nøklene til rancher som vi la til som secrets i forrige kapittel.

Page 120: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

114

Stegene 11-13 - legg ut nye versjoner i Rancher for produksjon

Disse stegene er like som de forrige, bortsett fra at betingelsen om git branch nå er satt til å

kun gjelde for master. Videre må vi referere til secrets på en annen måte siden de nå ikke

har default navn slik som Rancher plugin forventer. Her benytter vi oss av source/target-

konvensjonen til Drone ved å si at nøkkelen som heter “rancher_access_key_prod” skal

brukes som pluginen sin forventede nøkkel “rancher_access_key”, og det samme gjelder for

secret key.

.drone.yml:

pipeline: build: image: maven:3.5.3-jdk-8

commands: - export

AV_ENV=file:/drone/src/github.com/akingdon/Avkastning/config/s

rc/main/resources/avkastningDRONE.properties - mvn clean install -B -

Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4

jMavenTransferListener=warn

- chmod 755 buildProjects.sh - ./buildProjects.sh

rapportering-container-latest:

image: plugins/docker repo: <docker-registry-url>:<docker-registry-

port>/rapportering registry: <docker-registry-url>:<docker-registry-port>

tag: latest dockerfile: /drone/containers/rapportering/Dockerfile context: /drone/containers/rapportering/

debug: true launch_debug: true storage_driver: overlay insecure: true

when: branch: exclude: master beregning-container-latest:

image: plugins/docker repo: <docker-registry-url>:<docker-registry-

port>/beregning

registry: <docker-registry-url>:<docker-registry-port> tag: latest dockerfile: /drone/containers/beregning/Dockerfile context: /drone/containers/beregning/

Page 121: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

115

insecure: true

when: branch: exclude: master

renteimport-container-latest: image: plugins/docker repo: <docker-registry-url>:<docker-registry-

port>/renteimport

registry: <docker-registry-url>:<docker-registry-port> tag: latest dockerfile: /drone/containers/renteimport/Dockerfile

context: /drone/containers/renteimport/ insecure: true when: branch:

exclude: master

rapportering-container-release: image: plugins/docker repo: <docker-registry-url>:<docker-registry-

port>rapportering registry: <docker-registry-url>:<docker-registry-port> tag: prod

dockerfile: /drone/containers/rapportering/Dockerfile context: /drone/containers/rapportering/ insecure: true when:

branch: master beregning-container-release: image: plugins/docker

repo: <docker-registry-url>:<docker-registry-

port>/beregning registry: <docker-registry-url>:<docker-registry-port> tag: prod

dockerfile: /drone/containers/beregning/Dockerfile context: /drone/containers/beregning/ insecure: true

when: branch: master renteimport-container-release: image: plugins/docker

repo: <docker-registry-url>:<docker-registry-

port>/renteimport registry: <docker-registry-url>:<docker-registry-port>

tag: prod dockerfile: /drone/containers/renteimport/Dockerfile context: /drone/containers/renteimport/ insecure: true

when: branch: master

Page 122: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

116

rapportering-rancher-preprod:

image: peloton/drone-rancher url: https://<rancher-url>/v1/projects/1a5 secrets: [ rancher_access_key, rancher_secret_key ]

service: avkastningsportal/rapportering docker_image: <docker-registry-url>:<docker-registry-

port>/rapportering:latest when:

branch: exclude: master beregning-rancher-preprod:

image: peloton/drone-rancher url: https://<rancher-url>/v1/projects/1a5 secrets: [ rancher_access_key, rancher_secret_key ] service: avkastningsportal/beregning

docker_image: <docker-registry-url>:<docker-registry-

port>/beregning:latest when: branch:

exclude: master renteimport-rancher-preprod: image: peloton/drone-rancher

url: https://<rancher-url>/v1/projects/1a5 secrets: [ rancher_access_key, rancher_secret_key ] service: avkastningsportal/renteimport docker_image: <docker-registry-url>:<docker-registry-

port>/renteimport:latest when: branch:

exclude: master

rapportering-rancher-prod: image: peloton/drone-rancher url: https://<rancher-url>/v1/projects/1a25

secrets: - source: rancher_access_key_prod target: rancher_access_key

- source: rancher_secret_key_prod target: rancher_secret_key service: avkastningsportal/rapportering docker_image: <docker-registry-url>:<docker-registry-

port>/rapportering:prod when: branch: master

beregning-rancher-prod: image: peloton/drone-rancher url: https://<rancher-url>/v1/projects/1a25 secrets:

- source: rancher_access_key_prod target: rancher_access_key - source: rancher_secret_key_prod

Page 123: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

117

target: rancher_secret_key

service: avkastningsportal/beregning docker_image: <docker-registry-url>:<docker-registry-

port>/beregning:prod

when: branch: master renteimport-rancher-prod: image: peloton/drone-rancher

url: https://<rancher-url>/v1/projects/1a25 secrets: - source: rancher_access_key_prod

target: rancher_access_key - source: rancher_secret_key_prod target: rancher_secret_key service: avkastningsportal/renteimport

docker_image: <docker-registry-url>:<docker-registry-

port>/renteimport:prod when: branch: master

services: database: image: <docker-registry-url>:<docker-registry-

port>/avkastning-drone-db environment: - MYSQL_ROOT_PASSWORD=***

Page 124: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

118

Etter at Drone har kjørt CI-prosessen ser sluttrapporten slik ut:

Figur 10-16 - Fullført kjøring av Drone for preprod

Page 125: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

119

Figur 10-17 - Oppgradert stack i Rancher etter at Drone er ferdig

buildProjects.sh:

Dette scriptet er ansvarlig for å kopiere nødvendige filer til undermapper i prosjektet slik at

containerne kan oppdatere seg. For hver av de tre modulene i Avkastningsportal kopierer

scriptet ut en kjørbar .jar- eller .war-fil sammen med nødvendige konfigurasjonsfiler inn i

hver sin undermappe. Dette er et ledd i prosessen for at Drone skal kunne kjøre docker-

pluginen sin. Denne pluginen bygger opp nye docker images og legger de ut på vårt eget

registry. Scriptet er kopiert inn under:

#!/bin/bash

avkastning_home=/drone/src/github.com/akingdon/Avkastning/

container_home_directory=/drone/containers

mkdir -p $container_home_directory

properties=config/src/main/resources/avkastning.properties

rapportering_container_directory=$container_home_directory/rap

portering

mkdir -p $rapportering_container_directory

cp $avkastning_home/Rapportering/target/rapportering-jetty-

console.war $rapportering_container_directory

cp $properties $rapportering_container_directory

cp $avkastning_home/Rapportering/Dockerfile

$rapportering_container_directory

cd $rapportering_container_directory

cd $avkastning_home

beregning_container_directory=$container_home_directory/beregn

ing

mkdir -p $beregning_container_directory

Page 126: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

120

cp $avkastning_home/beregning/target/beregning-2.3-

SNAPSHOT.jar $beregning_container_directory

cp $properties $beregning_container_directory

cp $avkastning_home/beregning/runBeregning.sh

$beregning_container_directory

cp $avkastning_home/beregning/log4j.xml

$beregning_container_directory

cp $avkastning_home/beregning/Dockerfile

$beregning_container_directory

cd $beregning_container_directory

cd $avkastning_home

renteimport_container_directory=$container_home_directory/rent

eimport

mkdir -p $renteimport_container_directory

cp $avkastning_home/valutaimport/target/renteimport-2.3-

SNAPSHOT-exec.jar $renteimport_container_directory

cp $properties $renteimport_container_directory

cp $avkastning_home/valutaimport/runRenteimport.sh

$renteimport_container_directory

cp $avkastning_home/valutaimport/log4j.xml

$renteimport_container_directory

cp $avkastning_home/valutaimport/Dockerfile

$renteimport_container_directory

Egendefinert MySQL-container

Vi opprettet et egendefinert MySQL container image for å legge inn testdata i databasen, og

dette la vi ut på vårt eget Docker-registry. Denne databasen brukes kun i preprod/staging, og

i produksjon er databasen satt opp med Amazon sin egen databasetjeneste RDS som sørger

for ukentlig backup og vedlikehold. Grunnen til dette valget er at containerisert database er

mer sårbar, og hvis den blir slettet vil all data forsvinne samtidig. Amazon sin egen

databasetjeneste tar hånd om disse problemene automatisk og tilbyr også ulike

sikkerhetsinnstillinger som er vanskelige å implementere i en container.

Det ligger også ved en databasekonfigurasjon for å sette MySQL til å ignorere case sensitivity

i tabellnavn. Dette er tatt inn som en migrering i databaseoppsettet til Avkastningsportal,

men databasecontaineren vil ikke virke som forventet med mindre det settes spesifikt.

Konfigurasjonsfilen heter “custom-mysql.cnf” og beskrives under.

Page 127: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

121

Dockerfile

FROM mysql:5.5 COPY custom-mysql.cnf /etc/mysql/conf.d/

COPY create_db.sql /docker-entrypoint-initdb.d/ COPY create_org_nr.sql /docker-entrypoint-initdb.d/ COPY create_test_data.sql /docker-entrypoint-initdb.d/

Custom-mysql.cnf

[mysqld]

lower_case_table_names=1

Deploy av container

sudo docker build -t avkastning-drone-db .

sudo docker tag avkastning-drone-db:latest <registry-

adresse>/avkastning-drone-db

sudo docker push <registry-adresse>/avkastning-drone-db:latest

Figur 10-18 - Oppsett for konteinerisert database til testing og preprod

Databasen opprettes i service avkastningsportal på Rancher med miljøvariabelen

MYSQL_ROOT_PASSWORD=***

Page 128: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

122

Figur 10-19 - Definisjon av miljøvariabel for root-passord i databasen

Installasjon av ELK-Stack

ELK stack intstallajonsguide:

https://rancher.com/running-our-own-elk-stack-with-docker-and-rancher/

1: Klon følgende Git repository:

$ git clone https://github.com/rancher/compose-templates.git

2: Elastic search

1. $ cd compose-templates/elasticsearch

2. $ rancher-compose -p es up

3. Når Knopf er oppe, klikk på konteineren i Rancher, og få tak i IP’en som noden kjører

på.

4. Åpne en ny tab i nettleseren og gå til IP’en. Her skal man se en datanode på siden

3: Logstash.

1. $ cd ../logstash

2. $ rancher-compose -p logstash up

3. Følgende services kommer opp: Redis - logstash-collector - logstash-indexer

4. Nå kan applikasjonene peke på logtstash://<host>:5000.

4: Logsput

1. $ cd ../logspout

2. $ rancher-compose -p logspout up

5: Kibana 4

1. $ cd ../kibana

Page 129: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

123

2. $ rancher-compose -p kibana up

3. Åpne en ny tab i nettleseren og gå til IP’en. Her skal man se Kibana dashboard.

Kopf Webgrensesnitt: http://<host>:85/

Kibana Webgrensesnitt: http://<host>:92/

Page 130: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

124

11 Vedlegg 2 - Brukerveiledning til oppdragsgiver

Arbeidet med testing og publisering av løsninger har blitt enklere enn tidligere. Som før

jobbes det i egen feature branch for det som skal utvikles. Ved en push til Git-tilbyder vil

løsningen bygges, pakkes og legges ut i preprod. Det er derfor antatt at testing gjøres lokalt,

og systemet legger opp til en DevOps-tankegang med hyppig utplassering av endringer i

preprod. I løsningen er det tiltenkt bruk av egne team i Git-tilbyderen hvor kun teamleder

har anledning til å pushe til master. Dersom en test feiler under bygging vil prosessen som i

dag avsluttes og Drone gir beskjed på samme måte som Jenkins gjør.

Figur 11-1 - Komplett kjøring i Drone uten feil

Page 131: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

125

Utplasseringen av nye versjoner i preprod skjer som sagt automatisk ved hjelp av Drone, og

CI/CD-prosessen ender med at tjenestene som det er utviklet på vil oppgraderes i Rancher.

Etter at dette er gjort vil man kunne gå inn på Avkastningsportal i preprod og sjekke at alt

har gått som forventet.

Når endringene som er gjort har blitt godkjent og er produksjonsklare opprettes det en pull-

/merge-request i Git-tilbyderen og det er opp til en teamleder å godkjenne endringene. Når

requesten en godkjent, og dermed tatt inn i master-branchen, vil CI/CD-prosessen kjøre på

nytt mot produksjonsmiljøet. Tjenestene blir i Rancher oppgradert på samme måte som for

preprod og man har anledning til å enten akseptere eller avvise en oppgradering avhengig av

om den oppfører seg som forventet eller ikke.

Figur 11-2 - Oppgradert stack i Rancher

Page 132: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

126

12 Vedlegg 3 – Testrapport

12.1 Sammendrag

Det er gjennomført tilstrekkelig testing for å sikre at Avkastningsportals funksjonalitet er

ivaretatt etter migrasjon til skyen og at automasjons av integrasjon og leveranse fungerer

som planlagt. Dette er gjort gjennom enhets-, integrasjons-, og systemtester utviklet av

Kantega AS, samt systemtest for automasjon utviklet av prosjektgruppen.

12.2 Avvik i forhold til testplan

Alle tester er gjennomført i henhold til testplanen.

12.3 Testens grundighet

Enhets- og integrasjonstestene i denne testen er utviklet av Kantega i forbindelse med

utvikling av Avkastningsportal. Dekningsgraden av disse enhetstestene er 72% for klassene

og 48% av linjene i prosjektet. Dette kan virke lavt, men vi har ikke tatt stilling til denne

dekningsgraden da vi ikke har jobbet med applikasjonens kildekode og ikke kan avgjøre om

dekningsgraden er tilstrekkelig. Vi har heller ikke grunnlag for å evaluere dekningen av

integrasjonstestene da dette krever inngående kjennskap til og ettersyn av kildekoden. Vi

forutsetter derfor at dekningen av enhets- og integrasjonstester er tilstrekkelig slik de er

utviklet av Kantega.

Figur 12-1 - Kodedekning i Avkastningsportal

Page 133: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

127

Systemtesten for brukergrensesnittet tar for seg funksjonalitet forbundet med

tabellvisningen, detaljvisningen av individuelle porteføljer og sammenligningen av

porteføljer. Dette er i vår applikasjon all funksjonalitet tilgjengelig for brukeren og testene

regnes derfor som dekkende.

Systemtesten for automasjon vil kun bestå ved suksess i bygge-, integrasjons- og

leveranseprosessene.

12.4 Avvik i produktet

Det er ikke funnet avvik i produktet ved noen av testene. Logg fra kjøring av enhets- og

integrasjonstester viser at 106 av 108 tester har bestått. De resterende to testene er ikke

gjennomført da de er annotert med “@Ignore” i kildekoden og ikke skal kjøres. Disse skal

ignoreres fordi de støtter funksjonalitet som ikke er inkludert i vår versjon av

Avkastningsportal. Dette er beskrevet i kravspesifikasjonen. Også samtlige systemtester har

bestått da observert resultat samsvarer med forventet resultat.

12.5 Testplan

Innledning

Testplanen gjelder applikasjonen Avkastningsportal etter migrering til skyen. Den omfatter

enhets-, integrasjons-, og systemtester produsert av Kantega AS under utvikling av

applikasjonen og systemtester utviklet av bachelorgruppen. Samlet skal disse testene

bekrefte både at applikasjonens eksisterende funksjonalitet fortsatt fungerer etter migrasjon

til skyen og at nyutviklet leveranseautomasjon fungerer opp imot de ulike produksjons- test-

og utviklingsmiljøene.

Testobjekter

Alle metoder i kildekoden til Avkastningsportal som har enhetstester ferdigskrevet av

Kantega ved bacheloroppgavens oppstart skal enhetstestes, og det samme gjelder for

ferdigskrevne integrasjonstester. Applikasjonens brukergrensesnitt skal testes ved hjelp av

Kantegas ferdigproduserte systemtest. Automatisering av kontinuerlig integrasjon og

leveranse for Avkastningsportal skal testes gjennom nyutviklede systemtester.

Page 134: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

128

Fremgangsmåte

Samtlige enhets- og integrasjonstester kjøres automatisk av Maven under bygging av

prosjektet med Drone i Rancher. Ved feilede enhets- og integrasjonstester stopper

byggeprosessen.

Systemtesten for brukergrensesnittet utføres manuelt i nettleser ved å følge teststegene

definert av Kantega i testbeskrivelsen og observere resultatet.

Systemtestene for automasjon utføres manuelt gjennom observasjon av resultatet av

igangsatt automatisk bygging, integrasjon og leveranse.

Godkjenningskriterier

Testen er godkjent når samtlige tester er gjennomført uten avvik. Enhetstester annotert i

kildekoden med “@Ignore” teller ikke mot antall tester som skal gjennomføres.

Testmiljø

Det er ikke opprettet et eget testmiljø for testing av prosjektet. Testmiljøet tilsvarer dermed

preproduksjonsmiljøet for prosjektet. Enhets- og integrasjonstester er utført ved hjelp av

Maven som kjøres av Drone for å håndtere bygging av prosjektet. Preproduksjonsmiljøet er

satt opp med operativsystem Ubuntu 16.04. Systemtest for brukergrensesnitt er også utført i

preproduksjonsmiljø og utføres dermed på webapplikasjonen hostet hos DigitalOcean.

Resultatet for systemtest av automasjon observeres i Rancher i både preproduksjonsmiljøet

og produksjonsmiljøet. Se systembeskrivelsen i prosjektrapporten for utfyllende beskrivelse

av disse miljøene.

Resultatdokumenter

Logg fra kjøring av enhets- og integrasjonstester

Under følger utsnitt av logg hentet fra Drone etter utført bygging, integrasjon og levering.

Loggutsnittene omhandler enhets- og integrasjonstester kjørt av Maven via Drone i

byggeprosessen. Testene er gruppert slik at hvert sett med tester tilhører et steg i

Page 135: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

129

byggeprosessen i Drone. Resultatene for hver gruppe av tester er uthevet i bunn av hvert

loggutsnitt. Testene er utført 25.04.2018. For lesbarhet er loggene forkortet slik at de kun

viser at testene har kjørt for hver enkelt modul prosjektet er inndelt i. Moduler uten tester

er følgelig ikke en del av loggen.

Figur 12-2 - Eksempel på loggresultat sett i Drone

[INFO] -----------------< no.norskpensjon.avkastning:felles >------------------

[INFO] Building felles 2.3-SNAPSHOT [5/14]

[INFO] --------------------------------[ jar ]---------------------------------

-------------------------------------------------------

T E S T S

-------------------------------------------------------

Results :

Tests run: 26, Failures: 0, Errors: 0, Skipped: 1

[INFO] ---------------< no.norskpensjon.avkastning:avkastning >----------------

[INFO] Building Avkastningdata tjeneste 2.3-SNAPSHOT [6/14]

[INFO] --------------------------------[ war ]---------------------------------

-------------------------------------------------------

T E S T S

-------------------------------------------------------

Results :

Tests run: 10, Failures: 0, Errors: 0, Skipped: 1

[INFO] --------------< no.norskpensjon.avkastning:rapportering >---------------

[INFO] Building Rapportering 2.3-SNAPSHOT [7/14]

[INFO] --------------------------------[ war ]---------------------------------

-------------------------------------------------------

Page 136: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

130

T E S T S

-------------------------------------------------------

Results :

Tests run: 49, Failures: 0, Errors: 0, Skipped: 0

[INFO] ----------------< no.norskpensjon.avkastning:beregning >----------------

[INFO] Building beregning 2.3-SNAPSHOT [9/14]

[INFO] --------------------------------[ jar ]---------------------------------

-------------------------------------------------------

T E S T S

-------------------------------------------------------

Results :

Tests run: 12, Failures: 0, Errors: 0, Skipped: 0

[INFO] ---------------< no.norskpensjon.avkastning:renteimport >---------------

[INFO] Building renteimport 2.3-SNAPSHOT [14/14]

[INFO] --------------------------------[ jar ]---------------------------------

-------------------------------------------------------

T E S T S

-------------------------------------------------------

Results :

Tests run: 9, Failures: 0, Errors: 0, Skipped: 0

Systemtest av brukergrensesnitt

Testdato

25.04.2018

Sammendrag

Testen skal sjekke at brukergrensesnitt fungerer riktig.

Gjennomføring

Testen kan kjøres både i preprod og på np-st.

Forutsetning for alle tester

Page 137: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

131

# Teststeg Forventet resultat Observert

resultat

1 Åpne et nettleservindu

til

<server>/rapportering/

En side med en tabell av porteføljer dukker

opp. Tabellen er sortert etter feltet

"Risikojustert avkastning" i synkende

rekkefølge.

Som

forventet

Filtrer på risikoklasse

# Teststeg Forventet resultat Observert

resultat

1 Velg "lav" som

risikoklasse

Tabell viser kun produkter som har frem til

30% i felt "Målsatt aksjeandel"

Som forventet

2 Velg "Høy" som

risikoklasse

Tabell viser bare produkter som har "Målsatt

aksjeandel " høyere enn 70%

Som forventet

3 Velg "Medium" som

risikoklasse

Tabell viser bare produkter som har "Målsatt

aksjeandel " mellom 30% og 70%

Som forventet

4 Velg alle Tabell viser alle produkter Som forventet

5 Velg Avansert Fordeling endrer seg, nå finnes det 10

risikoklasser

Som forventet

6 Klikk på alle klassene Tabellen oppdaterer seg basert på klassen

som blir valgt.

Ingen porteføljer dukker opp i flere klasser

Som forventet

7 Klikk på enkel Filter kommer tilbake til å inneholde kun 3

klasser

Som forventet

Page 138: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

132

Filtrer på avkastningsperiode

# Teststeg Forventet resultat Observert

resultat

1 Velg 1 år som

avkastningperiode

Tabellen blir oppdatert:

a. Ny verdi vises for felter "Risikojustert

avkastning", "Avkastningsvariasjon" og

"Bruttoavkastning"

b. Tabell er sortert etter "Risikojustert

avkastning"

c. Det vises "Ikke tilgjengelig" for alle

porteføljer i felt Avkastningsvariasjon

Som

forventet

2 Velg 15 år som

avkastningperiode

Tabellen blir oppdatert

Det finnes flere porteføljer som viser "Ikke

tilgjengelig" i felter "Risikojustert avkastning",

"Avkastningsvariasjon" og "Bruttoavkastning"

Som

forventet

3 Velg 5 år som

avkastningperiode

Tabellen blir oppdatert. Det vises data for de

porteføljer som har dette

Som

forventet

Page 139: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

133

Sorter per kolonne

# Teststeg Forventet resultat Observert

resultat

1 Klikk på header til

"Bruttoavkastning"

kolonne

Tabellen blir sortert etter

"Bruttoavkastning" kolonne

Som forventet

2 Klikk igjen på samme header Sortering snur seg Som forventet

3 Klikk på Målsatt aksjeandel Tabellen blir sortert etter Målsatt

aksjeandel

Som forventet

Detaljside

# Teststeg Forventet resultat Observert

resultat

1 Klikk på en av

porteføljenes navn

En ny side dukker opp med detaljer av valgt

portefølje. Siden inneholder en graf som viser

utvikling av portefølje gjennom siste 3 år

Som

forventet

2 Velg 1 år som

avkastningsperiode

Bare grafen oppdaterer seg16 Velg 15 år som

avkastningsperiode Grafen vises ikke, og det

vises en melding som sier at porteføljen ikke har

lang nok historikk

Som

forventet

3 Klikk på et blått

spørsmålstegn

Det vises en blå popup som inneholder

hjelpetekst relatert til feltet

Som

forventet

4 Klikk tilbake Du kommer igjen til oversikttabell Som

forventet

Page 140: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

134

Sammenlign porteføljer

# Teststeg Forventet resultat Observert

resultat

1 Klikk på checkbox ved

siden av 5

forskjellige porteføljer

Sammenlign-knappen blir aktiv Som

forventet

2 Klikk på Sammenlign-

knappen

Du kommer til en ny side som viser detaljer

og graf for alle valgte porteføjer

Hvert portefølje har egen farge i grafen

Det finnes hjelpeikon for alle feltene.

Radene i tabell endrer farge ved

mouseover

Som

forventet

3 Klikk på et av

porteføljenavnene i

grafen

Porteføljen forsvinner fra grafen Som

forventet

4 Klikk på 10 år Grafen viser bare porteføljer som har lang

nok historikk

Som

forventet

Page 141: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

135

Systemtest av kontinuerlig integrasjon og levering

Testdato

25.04.2018

Sammendrag

Testen skal påvise at prosjektet bygges og leveres til riktig produksjonsmiljø ved oppdatering

av kode.

Gjennomføring

Testen igangsettes ved kodeoppdatering i Git. Resultatet blir observert i nettleser gjennom

Ranchers brukergrensesnitt for Avkastningsportal.

Forutsetning for testen:

Åpne ønsket programvare for å pushe kode til prosjektet i Github

Bygg og lever prosjektet til preproduksjonsmiljø

# Teststeg Forventet resultat Observert

resultat

1 Push ny kode til prosjektet

på Github i en branch som

ikke er ‘master’.

Prosjektet bygges i Drone og

Avkastningsportal-stacken i Rancher viser

oppdaterte tjenester i preprod-miljøet.

Som

forventet

Bygg og lever prosjektet til produksjonsmiljø

# Teststeg Forventet resultat Observert

resultat

1 Push ny kode til

prosjektet på Github i

‘master’ branch.

Prosjektet bygges i Drone og

Avkastningsportal-stacken i Rancher viser

oppdaterte tjenester i produksjon-miljøet.

Som

forventet

Page 142: Avkastningsportal i skyenstudent.cs.hioa.no/hovedprosjekter/data/2018/27/Sluttrapport.pdf · 2018, og har vært en spennende og krevende prosess. Oppgaven ble tildelt av Kantega AS

136

13 Vedlegg 4 - Oppdragsgivers tilbakemelding