DevOps och CI/CD‑automatisering
Leverera ändringar utan dramatik
Testade, släppta och möjliga att backa, så att ändringar når kunderna en tisdagseftermiddag i stället för sent en fredagskväll.
Utvalt arbete som visar den här tjänsten.
-
Automatiserade GIS‑driftsättning i GitHub Actions
Automatiserade driftsättning, databehandling och rapportering för en GIS-SaaS med GitHub Actions CI/CD, Python, Bash och SQL — kortare, tillförlitliga releaser.
-
Automatiserade leveransen av 20 GIS‑datapipelines
Automatiserade 20 GIS-datapipelines och ETL-processer för appdata, effektiviserade infrastrukturautomatiseringen och levererade tillförlitlig, aktuell data.
-
Automatiserade 100 kritiska säkerhetskopior
Automatiserade säkerhetskopiering av 100 kritiska databaser med Barman, Google Cloud, Bash och Python — att data går att återställa blev ett testat faktum.
-
Drev 20 Docker‑appar på Google Cloud och AWS
Driftsatte och underhöll 20 containerbaserade Docker-appar i Google Cloud och AWS och felsökte med Podman och Kubernetes för stabila releaser.
-
Minskade driftrisken med Grafana och Prometheus
Byggde en övervakningsdashboard med Grafana + Prometheus som fångar problem innan de eskalerar och flyttade teamet från brandsläckning till förebyggande arbete.
-
Gjorde en genomgripande översyn av de interna
Omarbetade interna processer och sparade ~8 000 timmar genom effektivare mjukvaruarkitektur, system och schemaläggning.
-
Automatiserade SSL/TLS‑cert för 100 Docker‑appar
Automatiserade SSL/TLS-certifikat för 100 Docker-appar på Ubuntu Linux och avskaffade manuella förnyelser och avbrotten som utgångna certifikat orsakar.
-
Effektiviserade CI/CD‑processerna
Effektiviserade CI/CD och sparade ~4 000 timmar med snabbare och mer tillförlitliga releaser, så att teamet kunde leverera med självförtroende.
-
Sparade 4 000 timmar med GitHub och GitLab CI/CD
Sparade ~4 000 timmar genom att införa CI/CD med GitHub, GitLab, Bash och Python, vilket snabbade upp dataanalys och utveckling och gav ökad konsekvens.
-
Automatiserade databearbetning i Python, PL/pgSQL
Automatiserade databehandling med Shell, PL/pgSQL, Python och Transact-SQL, höjde produktiviteten och fick bort små återkommande fel.
-
En tiondel av molnräkningen, utan att något gick förlorat
Tänkte om hela infrastrukturen och flyttade den från AWS, vilket sänkte driftskostnaderna till en tiondel utan att teamet fick mindre gjort.
-
Genererade API‑kontraktet utåt från databasen
Genererade API-kontraktet från databasen och utåt — OpenAPI, en typad TypeScript-klient, mock-hanterare och UI-gränser — med en kontroll i varje steg.
-
Byggde CI/CD‑pipelines i GitHub Actions
Byggde CI/CD i GitHub Actions med en distroless-image för frontenden i produktion och flytt mellan flera miljöer, så att releaser blev odramatisk rutin.
-
Skrev 578 automationsmål i go‑task
Skrev 578 automatiseringsmål i go-task för lägena native, Docker och HTTPS — lintning, test, databas och driftsättning bakom en enda verktygskedja.
-
Ansvarade för plattformens Azure‑driftsättningar
Hade helhetsansvar för driftsättningarna i Azure och förde releaser genom dev, staging och produktion längs en definierad, repeterbar väg.
-
Satte ribban vid noll varningar i sex språk
Satte ett kvalitetskrav på noll varningar för Go, TypeScript, SQL, Python, Shell och Markdown, upprätthållet med pre-commit-hooks.
-
Utformade och byggde, som en av de första
Utformade och byggde som en av de första anställda hela kärninfrastrukturen för en SaaS-startup inom grön energi från grunden och möjliggjorde snabb tillväxt.
-
Automatiserade teamets samarbete
Automatiserade samarbete samt lösenords-, uppgifts- och tidshantering, byggde ett halvautomatiskt projektgalleri och höjde teamets produktivitet.
-
Byggde en testsvit för Go, SQL och webbläsare
Byggde en skiktad automatiserad testsvit — 981 Go-tester, 543 frontendspecar och 494 SQL-beteendetester — med mutations-, egenskaps- och tillgänglighetsgrindar.
-
Byggde repots kontrollmotor med 268 kontroller
Byggde en kontrollmotor med 268 registrerade commit-kontroller, 277 lintregler och 15 egna ESLint-regler, med 146 tester av själva kontrollerna.
-
Byggde egen felövervakning och spårning
Byggde egen felövervakning och OpenTelemetry-spårning — sanering, spikdetektering, symbolisering och heartbeat — bakom 11 operatörsvyer.
-
1 022 migreringar bakom en grind mot schemadrift
Höll schemat korrekt genom 1 022 migreringar med en CI-grind som bygger databasen på båda sätten och misslyckas när de två skiljer sig åt.
-
Drev ett löpande program för säkerhetsskanning
Etablerade ett kontinuerligt säkerhetsprogram — kodskanning, DAST, beroendekontroller, SBOM, hemlighetsskanning och låsta actions — plus 21 granskningar.
-
Servrar du kan bygga om från grunden
Skrev ner hela serveruppsättningen som kod, så att en maskin kan byggas om exakt som den ser ut i dag och varje ändring granskas innan den når det skarpa systemet.
-
Fick Ansibles check mode att tala sanning
En torrkörning mäter nu antingen något eller säger att den inte gjorde det, och inget av de två är det tredje alternativ den tidigare hade.
-
Kontrollerade hemligheter i förväg på en sekund
En hemlighet som inte går att slå upp kostar nu en vägran på två sekunder på en bärbar dator i stället för en delvis tillämpad ändring på en levande server.
-
Din kod på din egen hårdvara
Satte upp privat kodhosting på företagets egen server, nåbar bara genom en enda kontrollerad åtkomstpunkt, utan någon publik webbpanel att angripa.
-
Körde containrar på Podman och Quadlet
Containrar körs under den tjänstehanterare som redan var betrodd, bakom den brandvägg som redan var deklarerad, och en rutinmässig release kräver ingen…
-
Byggde en commit‑grind med 22 linters
Mekaniska invändningar görs av en maskin innan en commit ens finns, och grinden är den enda granskare som projektet har.
-
Ett skyddsnät som inte längre kostar en halvtimme
Kortade de automatiska kontrollerna som vaktar varje release från 27 minuter till 10, genom att köra dem i rätt ordning och flera åt gången.
-
Speglade webbplatsen till Gemini och Gopher
Webbplatsen går att läsa över fyra protokoll från ett bygge, med 777 dokument vardera och noll ändringar i HTML-koden, och de alternativa representationerna…
-
Rättade en sitemap med en enda delad tidsstämpel
En ny synkronisering efter en månads innehållsändringar berör nu åtta filer av 186 i stället för samtliga, och webbplatskartan säger något som är sant.
-
Lintade själva kvalitetsgrinden på 10 242 rader
Den största och mest bärande koden i repot är nu formaterad, lintad och typkontrollerad, med tretton fynd åtgärdade och noll undertryckningar.
-
Gav generatorn 964 tester och 92 % täckning
Pipelinen kan köras om mot en databas i drift utan oro, vilket är det som över huvud taget gör inkrementellt innehållsarbete möjligt.
-
Aktiverade varje lintregel på felnivå
Lintern körs med full styrka och noll fynd, och varje avvikelse är dokumenterad på den rad där den görs.
-
Skrev tester för själva kontrollerna
Varje kontrollprogram i projektet har nu ett test som bevisar att det fallerar på felaktig indata, och intervallkontrollerna läser från sanningskällan.
-
Upptäckte att hookarna och grinden var oense
Hooken och grinden kör bevisligen samma kontroller, och prosakontrollerna körs nu vid varje commit.
-
Repeterade forgens CI‑hook och hittade 2 fel
Hooken fungerar i båda fallen, och båda felen hittades innan någon riktig push stötte på dem. Begränsningen är att en provkörning fortfarande är en simulering:…
-
Skrev en parser som verifierar varje FFI‑anrop
Den feltyp som orsakade den ursprungliga kraschen kan inte återkomma, eftersom en inaktuell referens nu är ett byggfel i stället för ett körtidsfel.
-
Tog testsviten ned till 8,9 sekunder
Sviten gick från sex tester över sextio sekunder — 74 sekunders väggklockstid — till 135 tester som går igenom på 8,9, vilket placerar den inom det fönster där…
-
Tog i bruk den oanvända halvan av kärnan
Den tidigare onådda hälften av kärnan körs av tester mot det riktiga biblioteket, och wrappern har det högsta golvet i projektet.
-
Känn till licensen för allt du levererar
Införde en licenskontroll för 644 tredjepartskomponenter som körs vid varje bygge, och bevisade att den slår till genom att medvetet provocera fram ett fel.
-
Lät 4 repon följa en och samma historikstandard
Fyra repon delar ett historikformat och en instruktionsstruktur, båda upprätthållna av hookar snarare än av disciplin.
Är det här arbetet du behöver få gjort, är nästa steg ett samtal.
Berätta om problemet, så säger vi ärligt om vi är rätt personer.