Teams verplaatsen deze services van laptops om builds reproduceerbaar te maken, gedeelde afhankelijkheden bereikbaar te houden, teststatus wegwerpbaar te maken en de levering onafhankelijk te maken van de batterij of werkruimte van één ontwikkelaar.
De server is geen grotere laptop. Een CI-runner voert niet-vertrouwde projectinstructies uit, een registry slaat artefacten uit de softwaretoeleveringsketen op en een testdatabase bevat veranderlijke gegevens. Ze combineren kan efficiënt zijn voor een klein team, maar alleen wanneer identiteiten, netwerken, opslag, geheimen, quota en herstel per rol gescheiden zijn.
Begin met de workflowfout
CI op een laptop mislukt wanneer de eigenaar slaapt, reist, van netwerk wisselt, de klep sluit of lokale CPU en geheugen nodig heeft. Een lokale registry verdwijnt met die machine, terwijl een testdatabase status verzamelt die slechts één ontwikkelaar begrijpt.
Continue integratie is afhankelijk van frequente, geautomatiseerde verificatie die iedereen kan zien. De praktijken voor continue integratie van Martin Fowler benadrukken geautomatiseerde builds die zichzelf testen en zichtbare resultaten - eigenschappen die moeilijk te garanderen zijn op een laptop die slechts af en toe beschikbaar is.
Verplaats een rol pas nadat je de fout hebt benoemd die ermee wordt opgelost: wachtrijvertraging, omgevingsverschillen, imag distributie, gedeelde integratiestatus of concurrentie om laptopbronnen.
Scheid de vertrouwensgrens van de runner
Behandel CI-taken als code-uitvoering. Gebruik waar praktisch wegwerpcontainers of virtuele machines, vermijd het koppelen van de Docker-socket van de host aan niet-vertrouwde taken en wijs per repository of pipeline strikt beperkte inloggegevens toe.
Plaats de buildwerkruimte en caches binnen quota. Een mislukte taak mag het rootbestandssysteem van de server niet vullen en mag geen registry-inloggegevens lezen die niet bij het project horen.
Definieer runnerlabels op basis van vertrouwen en mogelijkheden. Stuur geen pull-requestcode van een onbekende bijdrager naar een runner die toegang heeft tot productiesecrets of het thuisnetwerk.
Maak van de registry een duurzame distributierol
Sla de registrygegevens en configuratie op persistente opslag op, met authenticatie, TLS op niet-vertrouwde paden, bewaarbeleid en vensters voor garbagecollection. Scheid onveranderlijke releasetags van wegwerpimages voor branches.
Maak een back-up van configuratie, metagegevens en artefacten die niet opnieuw kunnen worden opgebouwd. Als images reproduceerbaar zijn vanuit de broncode, documenteer dan de herbouwtijd en bewaar de broncode, builddefinities en externe afhankelijkheden in plaats van elke cachelaag te back-uppen.
Houd de capaciteit in de gaten voordat je opruimt. Garbagecollection van een registry kan veel I/O vergen en kan, afhankelijk van de implementatie, een onderhoudsstatus vereisen.
Houd testdatabases wegwerpbaar maar representatief
Geef elke pipeline of branch een geïsoleerde databasenaam, schema, container of virtuele machine. Vul deze met versiebeheerde fixtures of een opgeschoonde dataset, voer migraties automatisch uit en vernietig de omgeving na het bewaartermijn.
Kopieer nooit productiesecrets of onbewerkte persoonsgegevens naar de testrol. Beperk het netwerkbereik zodat een gecompromitteerde taak niet vanuit de testdatabase kan doorbewegen naar niet-gerelateerde services.
Bewaar alleen de logs en artefacten die nodig zijn om mislukte tests te diagnosticeren. Langlevende mysteriedatabases creëren het laptopprobleem opnieuw, maar dan op een grotere machine.
Bouw de servertopologie voor een klein team
Gebruik afzonderlijke serviceaccounts, containernetwerken, volumes, quota en back-upregels voor de rollen runner, registry en database. Deze gids voor NAS- en Docker-platforms helpt bepalen of containers of virtuele machines de isolatie moeten bieden.
Plaats de beheerinterface op een beperkt netwerk. Stel de registry en CI-interface alleen beschikbaar voor het team of via een geauthenticeerde toegangslaag. Leg voor elke service updates, eigenaarschap en terugdraaien vast.
Test het opnieuw aanmaken van een runner, het herstellen of opnieuw opbouwen van een registry, het opnieuw vullen van een database, een situatie met een volledig schijfstation en het opnieuw opstarten van de server. Ontwikkelaars moeten lokaal kunnen blijven werken terwijl de gedeelde services herstellen.
Laatste controle van de configuratie
De migratie is geslaagd wanneer builds zonder een specifieke laptop kunnen worden uitgevoerd, omgevingen opnieuw worden aangemaakt vanuit versies van definities, registryartefacten een bewaar- en herstelplan hebben, testdatabases geïsoleerd en wegwerpbaar zijn en geen runner ruimere geheimen bevat dan voor zijn taak nodig is.
NAS- en serverconfiguratie
Meer om te lezen

Een lokale RAG-configuratie voor onderzoeksartikelen, notities en privédocumenten
Houd originele documenten gezaghebbend, maak indexering herhaalbaar, vereis bronvermeldingen en scheid vervangbare modellen van private brongegevens.

Waarom gebruiken ontwikkelaars een gateway-node voor private DNS, VPN en testapps?
Een gateway-node geeft privé-apps één gecontroleerde naam en toegangsroute, terwijl compute-nodes afgeschermd en vervangbaar blijven.

Een reproduceerbare applicatiestack bouwen met Compose-bestanden, geheimen en gescheiden persistente gegevens
Houd Compose-definities overdraagbaar, bescherm geheimen en maak zelfstandig back-ups van appgegevens, zodat de stack op een schone host opnieuw kan worden opgebouwd.

