DevOps og CI/CD‑automatisering
Endringer ut i produksjon uten drama
Testet, utgitt og mulig å reversere, slik at endringer når kundene en tirsdag ettermiddag i stedet for sent en fredagskveld.
Utvalgt arbeid som viser denne tjenesten.
-
Produksjonssatte GIS‑SaaS via GitHub Actions
Automatiserte produksjonssetting, databehandling og rapportering for GIS-SaaS med CI/CD i GitHub Actions, Python, Bash og SQL — kortere, pålitelige utgivelser.
-
Automatiserte leveransen av 20 GIS‑datapipelines
Automatiserte 20 GIS-datapipelines og ETL-prosesser for appdata, forenklet infrastrukturautomatiseringen og leverte pålitelige, oppdaterte data.
-
Automatiserte 100 kritiske sikkerhetskopier
Automatiserte sikkerhetskopiering av 100 kritiske databaser med Barman, Google Cloud, Bash og Python — gjenopprettbare data ble et testet faktum.
-
Driftet 20 Docker‑apper på Google Cloud og AWS
Rullet ut og vedlikeholdt 20 containeriserte Docker-apper på Google Cloud og AWS, med feilsøking i Podman og Kubernetes for stabile utgivelser.
-
Reduserte driftsrisiko med Grafana og Prometheus
Bygde et overvåkingsdashbord med Grafana + Prometheus som fanger opp problemer før de eskalerer, og flyttet teamet fra brannslukking til forebygging.
-
Fornyet interne prosesser og sparte 8 000 timer
Fornyet interne prosesser og sparte ca. 8 000 timer ved å effektivisere programvarearkitektur, systemer og planlegging.
-
Automatiserte SSL/TLS for 100 Docker‑apper
Automatiserte SSL/TLS-sertifikater for 100 Docker-apper på Ubuntu Linux og gjorde slutt på manuell fornyelse og nedetiden utløpte sertifikater gir.
-
Effektiviserte CI/CD‑prosessene
Effektiviserte CI/CD og sparte ca. 4 000 timer med raskere og mer pålitelige utgivelser, slik at teamet kunne levere med trygghet.
-
Sparte 4 000 timer med GitHub og GitLab CI/CD
Sparte ca. 4 000 timer ved å innføre CI/CD med GitHub, GitLab, Bash og Python, som gjorde dataanalyse og utvikling raskere og mer konsistent.
-
Automatiserte databehandling i Python og PL/pgSQL
Automatiserte databehandlingsoppgaver med Shell, PL/pgSQL, Python og Transact-SQL, økte produktiviteten og gjorde slutt på små, gjentakende feil.
-
En tidel av skyregningen, og ingenting tapt
Tenkte nytt om hele infrastrukturen og flyttet den bort fra AWS, og kuttet driftskostnadene til en tidel uten at teamet fikk gjort mindre.
-
Genererte API‑kontrakten med databasen som kilde
Genererte API-kontrakten fra databasen og utover — OpenAPI, en typet TypeScript-klient, mock-handlere og UI-grenser — med en kontroll ved hvert ledd.
-
Bygde CI/CD‑pipelines i GitHub Actions
Bygde CI/CD i GitHub Actions med et distroless produksjonsimage for frontenden og promotering mellom miljøer, så utgivelser ble rutinemessige og kjedelige.
-
Skrev 578 automatiseringsmål i go‑task
Skrev 578 automatiseringsmål i go-task for modusene native, Docker og HTTPS — linting, testing, database og produksjonssetting bak én verktøykjede.
-
Eide plattformens produksjonssetting til Azure
Hadde helhetlig ansvar for produksjonssettinger på Azure og flyttet utgivelser gjennom utvikling, staging og produksjon langs en fast, repeterbar vei.
-
Satte et krav om null advarsler på seks språk
Satte et kvalitetskrav om null advarsler for Go, TypeScript, SQL, Python, Shell og Markdown, håndhevet med pre-commit-hooks.
-
Designet og bygde, som en av de første ansatte
Designet og bygde hele kjerneinfrastrukturen fra bunnen av som en av de første ansatte i et SaaS-oppstartsselskap innen grønn energi, og muliggjorde rask vekst.
-
Automatiserte samarbeid i teamet
Automatiserte samarbeid og passord-, oppgave- og tidsstyring, og bygde et halvautomatisk system for prosjektpresentasjoner, som økte teamets produktivitet.
-
Bygde en testsuite for Go, SQL og nettleser
Bygde en lagdelt automatisert testsuite — 981 Go-tester, 543 frontend-spesifikasjoner og 494 SQL-atferdstester — med mutasjons-, egenskaps- og UU-kontroller.
-
Bygde repoets kontrollmotor med 268 kontroller
Bygde en kontrollmotor med 268 registrerte commit-kontroller, 277 lint-regler og 15 egne ESLint-regler, med 146 tester av selve kontrollene.
-
Bygde egen feilovervåking og sporing
Bygde egen feilovervåking og OpenTelemetry-sporing — rensing, oppdaging av topper, symbolisering og hjerteslag — bak 11 visninger for operatører.
-
1 022 migreringer bak en port for skjemaavvik
Holdt skjemaet pålitelig gjennom 1 022 migreringer med en CI-kontroll som bygger databasen begge veier og feiler når de to resultatene avviker.
-
Drev et løpende program for sikkerhetsskanning
Etablerte et kontinuerlig sikkerhetsprogram — kodeskanning, DAST, avhengighetskontroller, SBOM, hemmelighetsskanning og låste actions — pluss 21 revisjoner.
-
Servere du kan bygge opp igjen fra bunnen av
Skrev ned hele serveroppsettet som kode, slik at en maskin kan bygges opp igjen nøyaktig slik den står i dag, og hver endring blir gjennomgått før den når produksjonssystemet.
-
Fikk Ansibles check‑modus til å si sannheten
En tørrkjøring måler nå enten noe eller sier at den ikke gjorde det, og ingen av delene er det tredje alternativet den hadde før.
-
La til ett sekunds preflight for hemmeligheter
En hemmelighet som ikke lar seg slå opp, koster nå en nektelse på to sekunder på en bærbar maskin i stedet for en halvveis gjennomført endring på en levende…
-
Koden din på din egen maskinvare
Satte opp privat kodehosting på selskapets egen server, tilgjengelig bare gjennom ett styrt inngangspunkt og uten noe offentlig webpanel å angripe.
-
Kjørte containere på Podman og Quadlet
Containerne kjører under tjenestestyreren som allerede var betrodd, bak brannmuren som allerede var deklarert, og en rutinemessig utgivelse trenger ingen…
-
Bygde en commit‑port med 22 lintere
Mekaniske innvendinger kommer fra en maskin før en commit finnes, og kvalitetsporten er den eneste som gjennomgår endringer i dette prosjektet.
-
Et sikkerhetsnett som ikke lenger koster en halvtime
Kuttet de automatiske kontrollene som vokter hver utgivelse, fra 27 til 10 minutter ved å kjøre dem i riktig rekkefølge og flere samtidig.
-
Speilet nettstedet til Gemini og Gopher
Nettstedet kan leses over fire protokoller fra ett bygg, med 777 dokumenter hver og null endring i HTML-en, og de alternative representasjonene koster omtrent…
-
Rettet et sitemap med ett felles tidsstempel
En ny synkronisering etter en måned med innholdsendringer berører nå åtte filer av 186 i stedet for alle, og sitemapen sier noe sant.
-
Lintet selve kvalitetsporten på 10 242 linjer
Den største og mest bærende koden i repoet er nå formatert, lintet og typekontrollert, med tretten funn rettet og null undertrykkinger.
-
Holdt generatoren til 964 tester og 92 %
Pipelinen kan kjøres på nytt mot en database i drift uten frykt, og det er det som i det hele tatt gjør trinnvist innholdsarbeid mulig.
-
Aktiverte alle linterregler som feil
Linteren kjører med full styrke og null funn, og hvert avvik er dokumentert på linjen der det tas.
-
Skrev tester for selve kontrollverktøyene
Hvert kontrollskript i prosjektet har nå en test som beviser at det feiler på dårlige inndata, og assertene for intervaller leser fra sannhetskilden.
-
Fant at hookene og porten var uenige
Hooken og porten kjører beviselig de samme kontrollene, og prosakontrollene kjører nå ved hver commit.
-
Prøvekjørte CI‑hooken i forgen og fant 2 feil
Hooken fungerer i begge tilfeller, og begge feilene ble funnet før noen ekte push møtte dem. Begrensningen er at en prøvekjøring fortsatt er en simulering: den…
-
Skrev en parser som verifiserer hvert FFI‑kall
Den feiltypen som ga den opprinnelige krasjen, kan ikke komme tilbake, fordi en utdatert referanse nå er en byggefeil og ikke en kjøretidsfeil.
-
Fikk testsuiten ned i 8,9 sekunder
Suiten gikk fra seks tester over seksti sekunder — 74 sekunder veggklokketid — til 135 tester som besto på 8,9, og dermed ligger den innenfor vinduet der den…
-
Nådde den ubrukte halvdelen av kjernen
Den halvparten av kjernen som tidligere ikke var nådd, kjøres nå av tester mot det ekte biblioteket, og wrapperen har den høyeste minstegrensen i prosjektet.
-
Kjenn lisensen til alt du leverer
Innførte en lisenskontroll av 644 tredjepartskomponenter som kjører ved hvert bygg, og beviste at den slår til ved å utløse et brudd med vilje.
-
Holdt 4 repoer til én historikkstandard
Fire repoer deler ett historikkformat og én instruksjonsstruktur, og begge håndheves av hooks i stedet for av disiplin.
Er dette arbeidet du trenger gjort, er neste skritt en samtale.
Fortell oss problemet, så sier vi ærlig fra om vi er de rette folkene.