Page History
Introduktion
Denne side beskriver hvordan man som leverandør til NSP anvender de værktøjer SDS stiller til rådighed for Continuous Integration & Delivery. Der er både nogle best practices, samt nogle krav til de enkelte leverancer der skal være opfyldt, for at både leverandør, kvalitetssikring, driften og anvenderene kan få mest mulig glæde af leverancerne.
...
· Avoid getting broken code
Leverance pipeline
Afsnittet her beskriver de skridt der foretages helt fra idé til idriftsættelse for NSP leverancer fremover.
Værktøjerne der indgår i NSP toolchain'en er følgende: Jenkins, VMware Harbor, Docker, Docker Compose, Maven og svn. Slack anvendes til div. notifikationer fra CI-miljøet, SDS, QA og driften, så her kan man også forvente både spørgsmål, svar og notifikationer fra miljøet.
Kildekoden oprettes/ændres i svn.nspop.dk/svn/components/<komponent-navn> (herunder ligger trunk, tags og branches).
...
| Gliffy Diagram | ||||
|---|---|---|---|---|
|
De værktøjer der anvendes af toolchain'en er således, Jenkins, VMware Harbor, Docker, Docker Compose, Maven og svn. Slack anvendes til div. notifikationer fra CI-miljøet, SDS, QA og driften, så her kan man også forvente både spørgsmål, svar og notifikationer fra miljøet.
Leverancer af Leverancer af support/vedligehold
Ændringer til NSP-platformen opstår og håndteres af SDS i Jira på jira.nspop.dk. Man kan således forvente som leverandør at der er nogle givne sager man skal foretage en leverance af - issue-tracking og kommunikation med NSP foregår på de enkelte issues i jira. Når en sag er klar til udvikling findes der en versions på det issue ændringen knytter sig til.
...
Her kan aftales separate projekter under jira.nspop.dk, således leverandøren selv styrer issuetracking osv. efter aftale med NSP. De første leverancer koordineres med NSP via OAT processen. Det er altid muligt at få release candidates deployet til test1, ved at oprette/release et rc-tag af kodebasen, dvs "<kort-komponent-navn>-1.0.10rc".
...
Opstart af
...
nyt projekt
Ved opstart af et nyt kodeprojekt initierer projektet kontakten til NSP ang. hvem der skal have adgang til NSP udviklingsmiljøet.
Adgang til kode Til de komponenter der findes på svn.nspop.dk/svn/components er der nogle forventninger til indholdet af. Disse findes for at have en ensretning på kodebasen og yderligere ensretning af leverancerne til driften. Derudover er det også et værktøj til udviklerne selv, da det giver mulighed for hurtigere feedback på deres kodeændringer. Adgang til kode repository'et, oprettelse af helt nye brugere i LDAP til brug for CI-miljøet, Jira, svn etc gives af NSP. På NSP foregår der lige nu en proces omkring at få flyttet alle komponenter fra forskellige svn repo's til svn.nspop.dk/svn/components - når flytningen foretages forventes det samtidig at den enkelte komponent opfylder de beskrevne krav i dokumentet her.
Repository'et oprettes med hhv trunk, branches og tags foldere. Under tags forventes navngivningen at være release-<release nummer x.y.z> - release nummeret bliver brugt til at tagge docker imaget i registry'et med automatisk.
Såfremt koden er opdelt i forskellige deployables bør dockerfilerne for de enkelte services også bo under modulerne.
Jenkins pipeline fil
I roden af kodebasen skal der findes en groovy-fil kaldet "Jenkinsfile". Denne indeholder opskriften på at bygge komponenten i NSP CI-miljøet. Denne fil er leverandørens "indgang" til byggejobbet. NSP sørger for at opsætte jobs, der anvender denne fil til byg og sikrer at de nødvendige afviklingsrettigheder er tilstede for leverandøren. I udgangspunktet bliver disse jobs sat op til at bygge komponenten så snart der detekteres kodeændringer under /trunk.
For referencer til pipelinesyntaksen kan følgende læses: https://jenkins.io/doc/book/pipeline/syntax/ der anvendes scriptede pipelinefiler.
I det følgende er der beskrevet, hvad jenkinsfilen forventes at indeholde.
Byg af kode
Under pipeline filen skal selve koderepository'et bygges. Hertil stilles NSP Docker Build image til rådighed, med de værktøjer der pt. skal bygges med. Til testformål kan dette image hentes og bruges lokalt. Pipeline filen skal således gøre brug af dette image til byg, idet selve CI-maskinen ikke kan forventes at indeholde hverken den korrekte version af java, maven el. lign.
Byg af docker image(s)
Efter selve bygget af de java deployables projektet indeholder skal pipelinefilen indeholde et byg af et eller flere dockerimages, som er leverandørens opskrift på hvordan deres komponent skal deployes. NSP stiller et platforms image til rådighed, hvor sikkerhedskomponenter og NSP-deployment-tekniske afhængigheder er på plads. Dette image skal bruges som udgangspunkt for det image leverandøren bygger. Resultatet af dette skal være et docker-image, som indeholder den byggede komponent og det statiske konfiguration, der måtte skulle til - konfiguration der forventes ændringer til baseret på miljø osv. håndteres særskilt. Leverandørerne får således et godt indblik i hvordan netop deres komponent kommer til at blive driftet, idet det er nøjagtig samme docker image, der bliver afviklet af QA og driften. Gældende husregler for konfiguration og afhængigheder skal naturligvis stadig overholdes.
Dockerimages der skal driftes på platformen skal derfor altid, med mindre andet er aftalt, tage udgangspunkt i
registry.nspop.dk/platform/nsp:<version>Ved release skal den seneste version af platformen altid anvendes, denne kan findes på registry.nspop.dk - de forskellige tags er for nuværende ikke 100% immutable, da mindre opdateringer, der for komponenterne er irrelevante kan medføre nye udgaver af versionen. Ved større ændringer, hvor det forventes at kunne have indflydelse, skifter versionsnummeret.
For referencedokumentation til Dockerfiles kan følgende læses: https://docs.docker.com/engine/reference/builder/
Yderligere
Code-coverage rapporter samt testrapporter skal også være inkluderet i pipelinefilen.
Desuden kan også lade sig gøre at notificere via slack, hvis byggejobbet går skævt og leverandøren skal underettes.
Opsætning af Jenkins
Som sådan har NSP jenkins ingen maven eller jdk til bygning af java-artefakterne. Derfor skal al byg ske igennem et nspbuilder-image. Dette findes i flere udgaver, men for nuværende er registry.nspop.dk/platform/nspbuilder:jdk8 default byggeimage. Dette kan til enhver tid hentes af leverandøren og anvendes lokalt.
For hver komponent opsættes 4 jobs til byg samt deploy. Her tages udgangspunkt i NCC eksempel-koden
...
De enkelte udviklere skal have installeret docker på udviklermaskinerne, således de images NSP stiller til rådighed kan anvendes i den daglige udvikling og til test.
Initiel Opsætning af tool chain
NSP laver et repository til det enkelte projekt under svn.nspop.dk/svn/components, samt oprtter de initielle foldere herunder.
Efter aftale med projektet opsætter NSP også adgang og jobs på jenkins.nspop.dk
Opsætning af Jenkins - NSP
For hver komponent opsættes 4 jobs til byg samt deploy. Her tages udgangspunkt i NCC eksempel-koden
| Jobnavn | adgang | jenkins konfiguration | funktion |
|---|---|---|---|
| NCC_build | leverandør | Leverandørens jenkinsfil | Jobbet her bygger fra trunk af komponenten. Det bygger på commitændringer, samt kan startes af leverandøren |
| NCC_release | NSP | Leverandørens jenkinsfil | Bygger en tagget udgave af kodebasen, ud fra leverandørens jenkinsfil. |
| NCC_push_snapshot | leverandør (indirekte) | NSP konfigureret job | Job triggered af trunk-build jobbet. Dette job pusher en :snapshot udgave af dockerimaget der bygges til registryet |
| NCC_push_release | NSP | NSP jenkinsfil | Dette job starter et release-build job og pusher efterfølgende til registryet, med :<x.y.z> tag |
Jenkins pipeline fil - leverandøren
Efter opsætning af jenkins, skal leverandøren lave en pipeline fil, beskrivende afviklingen af bygget.
| Info |
|---|
3.2.1 § I roden af kodebasen skal der findes en groovy-fil kaldet "Jenkinsfile". |
Denne indeholder opskriften på at bygge komponenten i NSP CI-miljøet. Denne fil er leverandørens "indgang" til byggejobbet. NSP sørger for at opsætte jobs, der anvender denne fil til byg og sikrer at de nødvendige afviklingsrettigheder er tilstede for leverandøren. I udgangspunktet bliver disse jobs sat op til at bygge komponenten så snart der detekteres kodeændringer under /trunk.
For referencer til pipelinesyntaksen kan følgende læses: https://jenkins.io/doc/book/pipeline/syntax/ der anvendes scriptede pipelinefiler.
I det følgende er der beskrevet, hvad jenkinsfilen forventes at indeholde.
Dagligt udviklingsarbejde, commit og test
Leverance til QA/PROD
Brug af kode repository
Til de komponenter der findes på svn.nspop.dk/svn/components er der nogle forventninger til indholdet af. Disse findes for at have en ensretning på kodebasen og yderligere ensretning af leverancerne til driften. Derudover er det også et værktøj til udviklerne selv, da det giver mulighed for hurtigere feedback på deres kodeændringer. På NSP foregår der lige nu en proces omkring at få flyttet alle komponenter fra forskellige svn repo's til svn.nspop.dk/svn/components - når flytningen foretages forventes det samtidig at den enkelte komponent opfylder de beskrevne krav i dokumentet her.
Repository'et oprettes med hhv trunk, branches og tags foldere. Under tags forventes navngivningen at være release-<release nummer x.y.z> - release nummeret bliver brugt til at tagge docker imaget i registry'et med automatisk.
Såfremt koden er opdelt i forskellige deployables bør dockerfilerne for de enkelte services også bo under modulerne.
Byg af kode
Under pipeline filen skal selve koderepository'et bygges. Hertil stilles NSP Docker Build image til rådighed, med de værktøjer der pt. skal bygges med. Til testformål kan dette image hentes og bruges lokalt. Pipeline filen skal således gøre brug af dette image til byg, idet selve CI-maskinen ikke kan forventes at indeholde hverken den korrekte version af java, maven el. lign.
Byg af docker image(s)
Efter selve bygget af de java deployables projektet indeholder skal pipelinefilen indeholde et byg af et eller flere dockerimages, som er leverandørens opskrift på hvordan deres komponent skal deployes. NSP stiller et platforms image til rådighed, hvor sikkerhedskomponenter og NSP-deployment-tekniske afhængigheder er på plads. Dette image skal bruges som udgangspunkt for det image leverandøren bygger. Resultatet af dette skal være et docker-image, som indeholder den byggede komponent og det statiske konfiguration, der måtte skulle til - konfiguration der forventes ændringer til baseret på miljø osv. håndteres særskilt. Leverandørerne får således et godt indblik i hvordan netop deres komponent kommer til at blive driftet, idet det er nøjagtig samme docker image, der bliver afviklet af QA og driften. Gældende husregler for konfiguration og afhængigheder skal naturligvis stadig overholdes.
Dockerimages der skal driftes på platformen skal derfor altid, med mindre andet er aftalt, tage udgangspunkt i
registry.nspop.dk/platform/nsp:<version>Ved release skal den seneste version af platformen altid anvendes, denne kan findes på registry.nspop.dk - de forskellige tags er for nuværende ikke 100% immutable, da mindre opdateringer, der for komponenterne er irrelevante kan medføre nye udgaver af versionen. Ved større ændringer, hvor det forventes at kunne have indflydelse, skifter versionsnummeret.
For referencedokumentation til Dockerfiles kan følgende læses: https://docs.docker.com/engine/reference/builder/
Yderligere
Code-coverage rapporter samt testrapporter skal også være inkluderet i pipelinefilen.
Desuden kan også lade sig gøre at notificere via slack, hvis byggejobbet går skævt og leverandøren skal underettes.
...
Compose folder
For hver komponent skal der ligeledes være en compose folder under roden af repository'et. Folderen skal indeholde en docker-compose fil, der udtaler sig om hvordan komponenten startes i testsammenhæng og een der udtaler sig om hvordan komponenten startes, når denne skal deployes i NSP miljøerne. Yderligere kan man som leverandør have stor fordel af at lave en development compose-fil, som kan anvendes i udviklingsammenhæng (med mulighed for at mappe stier til deployment af war-filer og specificere hvor dockerfiler findes til build øjemed).
...