Espen Henriksen
Senioringeniør
Statens Kartverk

esphen_

esphen
espen.dev
Continous Deployment

Det var en gang
Lars foreslo en endring
Teamet kodet endringen

Produksjon samme dag

Teamet itererte

Glede brøt ut,
snipp snapp snute

Hvorfor er dette et mål?
Cycle time
- Fra kode til verdi raskest mulig
- Teamet fokuserer på å levere verdi over leveransevinduer
- Slipper å vente uker om man misser et vindu
- Minst mulig byråkrati
Quality of life
- Utviklere elsker det
- Bruker tid på det de liker å bruke tid på
- Produkteiere kan teste raskt
- Alle får bedre oversikt over hva som er i prod
Brukerfokus
- Test ut nye funksjoner med ekte brukere
- Få tilbakemelding på hypoteser
- Iterere på idéer
- A/B testing
- Kundene merker når man evner å snu seg raskt

Hva er CI/CD
CI
- Kontinuerlig integrasjon
- Delt koderepo som merges til
- Bygg trigges for hver push
- Kjøre tester i hvert bygg
- Gi tilbakemelding når testene feiler
- Feedback loop
CD
- Kontinuerlig leveranse OG kontinuerlig utrulling
- Leveranse: At koden kan deployes til enhver tid og at når det gjøres er det automatisk (prosess)
- Utrulling: At leveranser skjer kontinuerlig og automatisk når ny funksjonalitet kodes
- Snakker først og fremst om kontinuerlig utrulling
Eksempel


Hva er utfordringene?
Kvalitet
- Hvordan kan vi sikre at kvaliteten er ivaretatt med kontinuerlige leveranser?
- Hvordan overbeviser man produktsiden?
- Hvordan kan vi ha tiltro til at systemet gjør det rette?
Arbeidsflyt
- Hvordan samarbeider vi?
- En god arbeidsflyt bygger kvalitet inn i leveransene
- Bruk GitHub
- Pull requests
- Peer review
- Auditability
Git
- Main = prod
- Hvordan kan git fasilitere for CD?
- Lurt å ha pratet om git-arbeidsflyt i teamet
- git-flow passer ikke til CD
- Kortlevde branches som merges ofte
- Passer godt med PR
- Eksempler: trunk based, github-flow

Versjonering
- Hvordan versjonerer vi applikasjonen?
- Hver push til master er en ny deploy
- Ønsker oversikt over hva som er i prod, ikke bare "latest"
- Forslag: Time based tags
- 2022-04-10-5-acd213
- date-buildnum-gitsha
- Alfabetisk sorterbar
- Kommniserer relevant info

Hvilke virkemidler har vi?
Kommunikasjon
Gradvis implementasjon
Quality gates

Enkle rollbacks, raske fikser
Enkle rollbacks, raske fikser

Canary deploys
Automatiske rollbacks
4 key metrics


Feature flags
Feature flags

Deploy previews


Hva med verktøy?
GitOps

Push vs. Pull based deploy

Harness

ArgoCD

Harness er en platform

Argo er fokusert på GitOps

Config Connector
- Del av ACM
- Setter opp skyressurser
- CRD-basert, opprett CR i ditt Namespace
- Støtter DB, Secret Mgr., Pub/Sub, mm.
- Delvis erstatter for Terraform
- Ekstremt brukervennlig
- Synergieffekt med Argo++


Fin
https://slides.com/esphen/cd
Continous Deployment
By Eline H
Continous Deployment
- 77