Automatisering & CI/CD
81 resultater
- Har udviklet en pipeline til timebaseret aggregering af elforbrug i Python / SQL / Bash + Jq, der opnår 180 ms for 30‑dages datasæt på tværs af heterogene JSONL‑kilder.
- Har løst 1.000 problemer i geografiske data og tidsseriedata ved hjælp af GDAL, ArcGIS, PostGIS, Mapbox, QGIS, SQL (PL/pgSQL, Transact‑SQL) og Bash, hvilket har sikret behandling af big data i høj kvalitet.
- Har designet, implementeret og administreret 6 ETL/ELT‑pipelines med Google BigQuery, MSSQL, PostgreSQL, shell‑scripting, PL/pgSQL og Transact‑SQL og integreret data til effektiv behandling via Python API.
- Har udviklet og lanceret virksomhedens første observability‑dashboard, der leverer indsigt i systemets ydeevne i realtid og datavisualisering på det store kontor‑TV.
- Har designet, idriftsat og vedligeholdt 10 PostgreSQL- og MS SQL‑servere på Ubuntu Linux VPS og sikret optimal serverydeevne og pålidelighed.
- Har forbedret datasikkerheden ved at implementere 1.000 RBAC‑regler for udviklere, applikationsinstanser, PostgreSQL, MS SQL og andre Linux‑servere for at forhindre uautoriseret adgang; dokumenteret med Ansible‑automatisering.
- Har automatiseret udrulning af GIS SaaS‑applikationer, databehandling og rapporteringssystem ved hjælp af GitHub Actions CI/CD, Python, Bash og SQL.
- Har automatiseret levering af 20 GIS‑datapipelines og ETL‑processer for appdata og strømlinet infrastrukturautomatisering og rapportering.
- Har automatiseret 100 kritiske databackups ved hjælp af Barman, Google Cloud, Bash og Python og sikret dataintegritet på tværs af databaser.
- Har udrullet og vedligeholdt 20 Docker‑containeriserede applikationer, fejlfundet med Podman og Kubernetes og administreret R‑baserede apps på Google Cloud og AWS.
- Har forhindret sikkerhedsbrud ved at lede initiativer inden for adgangsstyring med M365, 1Password, Red Hat SSO og OKTA SSO.
- Har reduceret driftsrisici ved at implementere et monitoreringsdashboard med Grafana og Prometheus og forbedret systemets pålidelighed.
- Har forbedret teamets kommunikation og samarbejde ved at implementere Slack, Mattermost, 1Password og Jira og sparet 8.000 arbejdstimer.
- Har gennemgribende fornyet interne processer og sparet 8.000 timer ved at forbedre softwarearkitektur, systemer og planlægningseffektivitet.
- Har administreret netværksinfrastruktur for over 1.000 servere og sikret optimal systemudrulning, sikkerhed og fejlfinding.
- Har automatiseret oprettelse af SSL/TLS‑certifikater for 100 Docker‑applikationer og sikret sikre forbindelser på tværs af Ubuntu Linux‑hosts.
- Har strømlinet CI/CD‑processer og sparet 4.000 timer ved at indføre automatisering i softwareudviklingspipelines.
- Har strømlinet processer for dataanalyse og softwareudvikling og sparet 4.000 timer ved at indføre CI/CD‑praksis med GitHub, GitLab, Bash og Python.
- Har udviklet et rapporteringssystem til dataanalyse og øget den kvartalsvise softwareomsætning med 400 % gennem Python‑baserede PDF‑rapporter.
- Har automatiseret databehandlingsopgaver med shell‑scripting, PL/pgSQL, Python og Transact‑SQL og øget produktiviteten og effektiviteten.
- Har forbedret projekteffektiviteten og sparet 150 timer om måneden på tværs af 30 projekter ved at optimere workflows og ressourcestyring.
- Har udviklet 600 PL/pgSQL‑baserede ETL/ELT‑pipelines for at strømline komplekse databehandlingsworkflows på tværs af flere PostgreSQL‑udviklings- og produktionsmiljøer.
- Har genereret API‑kontrakten udad fra databasen — OpenAPI, en typet TypeScript‑klient på 44.076 linjer, 61 mock handlers og de grænser, UI'et håndhæver — med en guard i hvert led, der fejler ved drift.
- Har bygget Python‑scraperne til skibsdata (MarineTraffic, Maritime‑Database) og et gentageligt import‑trin, der seeder platformens referencedata — 184.197 rækker, heraf 698 virksomheder og 56.149 skibe.
- Har provisioneret Azure‑infrastruktur som kode med Bicep — Container Apps, PostgreSQL Flexible Server, Front Door/WAF og netværk — på tværs af udviklings-, staging- og produktionsmiljøer.
- Har bygget GitHub Actions CI/CD‑pipelines med et distroless produktions‑frontend‑image og promovering på tværs af flere miljøer.
- Har skrevet 578 go‑task‑automatiseringsmål på tværs af native-, Docker- og HTTPS‑udviklingstilstande, linting, test, database og deployment.
- Har haft ansvaret for end‑to‑end‑deployments af platformen til Azure og styret releases på tværs af udviklings-, staging- og produktionsmiljøer.
- Har etableret et engelsk/dansk internationaliseringssystem med 12.027 beskeder pr. locale på tværs af 458 namespace‑filer, med linter‑håndhævet ordforråd og et budget på 400 linjer pr. fil.
- Har sat en zero‑warnings‑kvalitetsstandard på tværs af seks sprog — Go, TypeScript, SQL, Python, Shell og Markdown — håndhævet af pre‑commit‑hooks.
- Har designet et tids- og rapporteringssystem, der forblev i produktion i årevis uden væsentlige ændringer.
- Har automatiseret teamsamarbejde, adgangskodehåndtering, opgave- og tidsstyring og bygget et semi‑automatisk projektvisningssystem, hvilket øgede teamets produktivitet.
- Har integreret et virksomhedsdækkende adgangskodehåndteringssystem, der styrkede sikkerheden og strømlinede adgangskontrollen.
- Har bygget en lagdelt automatiseret testsuite — 981 Go‑tests, 543 frontend- og browserspecs, 494 SQL‑adfærdstests — med mutationstest, property‑based tests og en tilgængelighedsgate.
- Har bygget kodebasens guard‑motor — 268 registrerede commit‑tjek, 277 lint‑regler og 15 egne ESLint‑regler — plus 146 tests af selve tjekkene, så det er builden, der holder standarden, ikke reviewet.
- Har flyttet langsomt arbejde væk fra request‑stien og over på en River‑jobkø — 15 worker‑moduler, 8 planlagte opgaver og 20 pg_cron‑jobs — så et request vender tilbage, mens arbejdet bag det kører videre.
- Har etableret et løbende sikkerhedsprogram — code scanning, DAST, afhængigheds- og sårbarhedstjek, SBOM‑generering, secret scanning og SHA‑pinnede actions — sammen med 21 skrevne sikkerhedsaudits.
- Har bygget virksomhedens egen infrastruktur som 19 Ansible‑playbooks og 34 roller fordelt på 12.065 linjer YAML, der konvergerer en levende vært til en erklæret tilstand med hvert play idempotent.
- Har hærdet SSH til 24 hævdede direktiver med validering i tre trin — kandidatfilen, den samlede konfiguration og dernæst dæmonens egen tilbagelæsning — efter at tilbagelæsningen fangede den kørende server i stilhed at tilsidesætte to af de fireogtyve.
- Har bevist hele bandlysningsstien ved hver hærdningskørsel ved at bandlyse en reserveret testadresse, læse den resulterende kerneregel og ophæve bandlysningen i en garanteret oprydningsblok, så et fængsel, der holder op med at virke, får kørslen til at fejle i stedet for at melde sig rask.
- Har verificeret firewallregler efter position frem for tilstedeværelse ved at læse den nummererede regelliste og den levende pakkefilterkæde, for en regel, der findes, er ikke en regel, nogen pakke når frem til.
- Har bygget krypteret backup uden for værten på restic med opbevaringsbeskæring, et integritetstjek og en månedlig automatiseret gendannelsesøvelse, og har derefter auditeret gendannelsespositionen og skrevet hullerne ned frem for at lade dem blive fundet under en hændelse.
- Har bygget dødmandsknap‑monitorering, der kun pinger, mens hukommelse og disk er sunde, så en svækket vært udløser en alarm ved at gå tavs — og fangede seks variabelnavne, der sagde "free", hvor tjekket korrekt målte "available", en størrelsesorden fra hinanden på en boks med 464 MB.
- Har fået check mode til at sige sandheden på hele platformen efter at have fundet seks sonder, der traf beslutning på en værdi, værten aldrig gav, fordi Ansibles command‑modul melder succes under --check, mens det springer kommandoen helt over.
- Har tilføjet et preflight‑play, der kører den samme kode som konvergensen mod operatørens lokale hemmeligheder på omkring et sekund, efter at en halvt anvendt produktionskørsel døde på sin niende opgave med swap‑indstillingerne allerede skrevet til den levende vært.
- Har afstemt en DNS‑zone med 20 poster deklarativt mod Cloudflares API med separate indgange til audit og BIND‑eksport, og har slået CDN‑proxyen fra igen af hensyn til privatlivet efter at have bygget den.
- Har skåret systemd‑sandkassens eksponering ned på hver eneste unit, platformen selv installerer — en dødmandsknap‑tjeneste fra 9,6 UNSAFE til 1,5, en internetvendt git‑forge fra 8,3 EXPOSED til 1,5 — og har tilføjet et parsertjek ved konvergens efter at have fundet et stavefejlsbehæftet direktiv ignoreret i stilhed i tre unit‑skabeloner.
- Har bygget syv skrivebeskyttede rapporteringsroller, der gengiver en levende vært som Markdown — fakta, adgang, git, metrikker, trafik, sikkerhed og udbyderinventar — under en regel om, at intet tal printes, som kørslen ikke har målt.
- Har udrullet virksomhedens egen git‑forge på Soft Serve, privat som udgangspunkt og uden webpanel, med SSH‑porten bundet til loopback bag en jump‑vært, og har gjort landingssiden foran den til et build‑artefakt af hovedsitet frem for en håndholdt kopi.
- Har udrullet et containerplan på Podman og Quadlet under systemd frem for Docker, fordi Docker publicerer containerporte over værtens egne firewallregler — og har givet deploys en uprivilegeret bruger med én fast kommando i stedet for root.
- Har automatiseret provisioneringen af en anden server hos en anden cloududbyder og oprettet firewallen før maskinen, så den fødes bag en, med begge udbyderes firewalls skrevet direkte mod deres REST‑API'er for at undgå en tredjepartssamling.
- Har skrevet en scoperegel ind i kodebasen, efter at en omstrukturering bar en anden virksomheds inventar, firewalltilladelser og prosa med ind i den — og har holdt det karantæneramte restmateriale under hemmelighedsscanneren frem for at udelukke det.
- Har delt de fire hemmeligheder, der hører til den enkelte vært, efter at have fastslået, at to værter, der deler én dødmandsknap, alarmerer mindre end to knapper, ikke mere, og at en delt backup‑adgangssætning gør to værter til ét repository.
- Har bygget en commit‑gate af 22 en‑linjes lintere plus fire, der fortjener et afsnit, uden et advarselsniveau og uden tilladte inline‑undertrykkelser, med dækning af HTML, CSS, JavaScript, Python, YAML, Markdown, shell, links, stavning, hemmeligheder og typografi.
- Har skåret sitets browserdrevne kvalitetsgate fra 1.636 sekunder til 615 ved at planlægge dens tjek længst‑først gennem en worker‑pulje begrænset til fire baner, efter at have målt at alfabetisk rækkefølge kostede 320 sekunder mod 224.
- Har erstattet 27 gengivne skriftstørrelser, hvis nærmeste naboer lå 0,6 % fra hinanden, med en seks‑trins Major Third‑skala og har skrevet den linter, der fejler på den otteogtyvende.
- Har fundet og rettet 11 tilgængelighedsfejl, som browseren meldte sunde — otte footer‑links stadig i tab‑rækkefølgen bag pointer‑events, en scroll‑tidslinje, der klippede kolofonen af tre sider, og en regelmotor, der kørte 70 af sine 105 regler.
- Har lukket farvesystemet ved 28 dokumenterede farver med en linter, der fejler på en værdi, der er malet men udokumenteret, dokumenteret men umalet, fejlmålt, omstavet som en literal eller inden for en perceptuel afstand på 0,02 fra en, der allerede findes.
- Har fundet, at det lyse tema havde manglet et fuldsides overlay‑lag siden den dag, det blev skrevet, ved at hævde at begge temaer maler hver lagdelt flade med det samme antal lag.
- Har spejlet hele sitet som 777 Gemini‑dokumenter og 777 Gopher‑dokumenter ud fra det samme udrullede træ, med nul bytes ændring i HTML'en.
- Har erstattet 963 anonyme blokke med strukturerede data, der gentog virksomheden 1.671 gange, med én sammenkædet graf af 16 typer præget fra stabile oprindelsesidentifikatorer.
- Har skåret stylesheet‑bundtet fra 87 KB til 31 KB ved at tage en base64‑skrifttype ud af det og har droppet 756 KB fordelt på 22 filer, der blev udgivet ved hver deploy og refereret af intet.
- Har rettet et sitemap, hvor 172 af 176 URL'er delte ét ændringstidsstempel, ved at tage datoen fra git‑historikken efter at have fastslået, at eksporten omskriver hver fil ved hver kørsel.
- Har sat dokumentationen under sin egen linter — et linjebudget pr. fil, der kun skruer nedad, et indekskrav og et tjek af faktiske stier — som fandt seks af ni planer markeret som færdige, mens de bar uafkrydsede felter, og fjorten opgaver, der spærrede hver commit uden at være nævnt i noget dokument.
- Har bragt 10.242 linjer kvalitetsgate‑JavaScript under en formatter og en linter efter at have fastslået, at det var kodebasens største kodemængde og den eneste, intet læste, og har rettet 13 fund uden at undertrykke nogen.
- Har bygget en databasedrevet generator til CV, referencer, portefølje og ansøgninger i Python — 41 moduler, 10.580 linjer — der gengiver seks outputformater fra én SQLite‑kilde med 23 tabeller samlet af en idempotent pipeline i 19 trin.
- Har holdt generatoren til 981 testtilfælde med et dækningsgulv på 92 % grendækning og advarsler behandlet som fejl, og har hævdet idempotens ved at køre hele build‑pipelinen to gange fra en tom fil og kræve, at anden gennemløb intet ændrer.
- Har etableret PDF/UA‑1‑konformitet på tværs af ni dokumenter ved 106 af 106 regler og har fundet arkivvarianten fejle én regel ud af 146 — et nærved‑resultat, der læses som bestået af enhver, der ikke kører validatoren.
- Har valgt hver eneste regel, Python‑linteren har, som fejl og har arbejdet 1.815 fund ned til nul, hvor hver af de få undtagelser bærer en skreven begrundelse og to af dem er understøttet af et tjek frem for en kommentar.
- Har skrevet tests af selve tjekkene efter at have fastslået, at et tjek, der kun fodres med rent input, en dag melder rent, fordi det intet læste — ved at plante en stavefejl for at bekræfte, at stavekontrollen finder den, og ved at tage et id‑interval fra databasen frem for fra et tal i testen.
- Har fundet commit‑hooks og kvalitetsgaten køre forskellige tjek, mens et dokument lovede, at de var de samme, ved at sammenligne de to lister i en test — de fem, der kun nogensinde kørte i hånden, var dem, der læste CV‑prosaen.
- Har prøvekørt CI‑hooken på forge‑siden og har fundet to fejl, der ikke kunne nås ved at læse filen: en fallback, der lagde et uopløseligt argument på hookens input, og gits egen miljøvariabel, der fulgte gaten ind i checkouten og gjorde 19 tests røde.
- Har bygget et tværsprogligt indholdstjek, der fejler, når en oversættelse taber et tal, det engelske angiver, og når et sprog bruger notation, det ikke bruger — og har fundet to danske beskrivelser, der manglede en metrik, og seksten ukrainske spænd, der citerede på engelsk vis.
- Har skrevet en parser, der læser den rigtige C‑header på 7.308 linjer og verificerer hvert kaldssted, hver enum‑konstant og at hver pegerejende klasse er final, efter at en håndskrevet pladsholder‑header lod kald til tre fjernede funktioner kompilere, linke og crashe.
- Har taget testsuiten fra seks tests over en grænse på tres sekunder til 135 beståede på 8,9 sekunder ved at profilere hovedtråden og fjerne de to kald, den sad inde i i 3.989 ud af 4.017 stikprøver.
- Har navngivet hver eneste ikonknap i grænsefladen for skærmlæsere efter at have fundet send‑knappen annonceret som "arrow up circle, button", og har skrevet den linter, der kræver etiketten inden for otte linjer fra ikonet.
- Har bygget et designsystem på 48 tokens oven på platformens eget glasmateriale og har skrevet den linter, der afviser et magisk tal, en hårdkodet skriftstørrelse eller en animation, der ignorerer præferencen for reduceret bevægelse.
- Har nået den halvdel af beskedkernen, applikationen aldrig havde brugt — backupoverførsel, forsvindende beskeder, redigering og gensendelse af beskeder, verificerede invitationer, proxyer og krypteringspolitik — og har drevet hver test mod det rigtige bibliotek uden mocks.
- Har auditeret 644 Rust‑crates for licenskompatibilitet ved hvert build og har bevist, at tjekket udløses, ved at omskrive én crates licens og ved at flytte den fastlåste kernerevision uden at regenerere.
- Har bygget virksomhedens ikon- og favicon‑sæt ud fra to håndlavede tegninger, hvor hvert afledt aktiv genskabes af et script og et tjek fejler, når en afledt fil er committet før sin kilde.
- Har holdt fire kodebaser til én historikstandard — konventionel, uden emojis, uden attributionslinjer, håndhævet af en commit‑message‑hook — sammen med 46 instruktionsdokumenter, der styrer, hvordan arbejdet udføres.
Dette arbejde er en del af det, vi tilbyder som DevOps & CI/CD‑automatisering, Sikkerhed & adgangsstyring, Systemadministration, Infrastructure as Code, Teknisk ledelse & rådgivning, Teknisk dokumentation, Backend- & API‑udvikling og Site reliability & monitorering.
Er du ved at bygge noget, der kræver det her? Kontakt os.