Sikker udgivelse

Testmiljø og rollback: udgiv appen uden at satse driften

Når hver ændring går direkte fra AI-værktøjet til den levende app, bliver kunder og medarbejdere testhold. Et passende testmiljø, en kort udgivelseskontrol og en afprøvet rollback giver en vej tilbage. Løsningen afhænger af jeres stack og risiko – ikke af et krav om, at alle skal have præcis de samme miljøer.

Et miljø er mere end en anden webadresse

Et miljø er en afgrænset kombination af kode, konfiguration, secrets, data og eksterne forbindelser. En preview-URL er derfor ikke et sikkert testmiljø, hvis den stadig skriver i produktionsdatabasen eller sender rigtige mails og betalinger.

Lokalt
Hurtig udvikling på egen computer med lokale eller emulerede ressourcer.
Preview
En midlertidig version af en konkret ændring, ofte knyttet til en pull request.
Test eller staging
Et stabilt ikke-produktionsmiljø til integrationer, roller og realistiske brugerforløb.
Produktion
Miljøet med rigtige brugere, data og driftskonsekvenser.
En enkel frontend kan nøjes med lokalt miljø, preview og produktion. En app med login, database, webhooks eller betalinger har normalt brug for tydeligere isolation af data og eksterne tjenester. Navnene er mindre vigtige end grænsen mellem test og drift.

Kortlæg hvad en udgivelse faktisk kan ændre

Skriv appens dele ned, før I vælger proces. Det afslører, om hostingplatformens indbyggede preview og rollback er nok, eller om backend og data kræver en særskilt plan.

  • Frontend og statiske filer: Hvilket deploy eller commit vises på domænet?
  • Backend og baggrundsjob: Udgives functions, API, køforbrugere og planlagte jobs sammen eller hver for sig?
  • Konfiguration og secrets: Hvilke værdier tilhører test, og hvilke giver adgang til produktion?
  • Database og filer: Ændrer udgivelsen skema, dataformat, Security Rules eller lagerrettigheder?
  • Eksterne handlinger: Kan testen sende mails, oprette fakturaer, trække betaling eller ændre et kundesystem?

Vælg den mindste miljømodel, der begrænser skaden

Frontend uden følsom backend

Brug en preview-version pr. ændring og én produktion. Kontrollér navigation, formularer, mobilvisning og build, før ændringen flettes eller promoveres.

App med login, database eller integrationer

Brug et særskilt testprojekt eller en særskilt testdatabase med egne secrets og testkonti. Forbind mail, betaling og andre leverandører til deres sandbox eller en sikker erstatning, hvor det findes. Testmiljøet må ikke have en skjult genvej til produktionsdata.

App med høj drifts- eller datarisiko

Brug et vedvarende stagingmiljø, der ligner produktion i arkitektur og konfigurationstyper, men ikke deler data eller adgang. Tilføj godkendelse før produktion, en dokumenteret rollback og kontrol af datamigreringer.

Hold testdata og produktionsdata adskilt

  • Brug kunstige data som standard: Lav få troværdige testkunder, roller og sager uden virkelige personoplysninger.
  • Kopiér ikke produktion ukritisk: Hvis realistiske data er nødvendige, skal udtræk, anonymisering, adgang, opbevaring og sletning være besluttet.
  • Giv test egne credentials: En fejlkonfigureret preview må ikke kunne læse eller ændre produktion.
  • Markér miljøet tydeligt: Vis fx “TEST” i headeren og brug andre afsendere, så en medarbejder ikke forveksler miljøerne.
  • Beskyt previews: En svær URL er ikke adgangskontrol. Begræns adgang, hvis previewet indeholder intern funktionalitet eller data.
Firebase Hosting-previewkanaler er et godt eksempel på en vigtig detalje: preview-URL'en er offentlig for dem, der kender den, og den kan stadig bruge projektets virkelige backendressourcer. Google anbefaler et separat Firebase-projekt til udvikling og test.

Brug en fast kontrol før produktion

  1. Identificér versionen: Notér commit, deploy-id, tidspunkt og hvem der udgiver.
  2. Kør automatiske kontroller: Build, tests og eventuelle sikkerhedstjek skal være grønne for netop den version.
  3. Afprøv kritiske forløb: Kør et kort smoke test af login, den vigtigste arbejdsgang, lagring og centrale integrationer i det relevante testmiljø.
  4. Kontrollér miljøforskelle: Bekræft domæne, secrets, database, afsendere, callbacks og planlagte jobs.
  5. Vurder dataændringer: Tag nødvendig backup, og stop hvis migrationen ikke er kompatibel med den version, I vil kunne rulle tilbage til.
  6. Aftal udgivelse og ansvar: Hvem må sende live, hvem følger logs, og hvem beslutter rollback?
  7. Kontrollér efter udgivelse: Gentag det korte smoke test på produktion med en sikker testkonto, og følg relevante alarmer og fejl.

Hvis GitHub Actions bruges til deployment, kan GitHub environments begrænse hvilke branches der må udgive, holde miljøspecifikke secrets adskilt og – afhængigt af repository og abonnement – kræve en godkendelse før jobbet får adgang til miljøet.

Rollback er forskellig fra at rette fremad

Rollback betyder, at en kendt fungerende version igen betjener brugerne. En lille fejl kan ofte rettes med et nyt deploy. Ved utilgængelighed, tab af kernefunktion eller risiko for forkerte data er en hurtig rollback ofte den sikrere første handling.

PlatformTest før liveVej tilbage
NetlifyDeploy Preview til pull requestsUdgiv et tidligere bevaret atomisk deploy; ny automatisk produktion kan ellers overskrive rollbacken
VercelLocal, Preview og Production med unik deploy-URLInstant Rollback til en tidligere produktionsversion; kontrollér konfiguration, cron jobs og planens begrænsninger
Firebase HostingLokale emulatorer, previewkanal og helst separat testprojektRollback af live-kanalen til en bevaret Hosting-version; backend og data kræver egen plan
Azure App ServiceDeployment slot med smoke test og eventuelt swap previewSwap de samme slots igen; kontrollér hvilke indstillinger der følger slot eller swap

Funktioner, adgang, opbevaring af tidligere deploys og prisplaner ændrer sig. Brug platformens aktuelle dokumentation og prøv proceduren i jeres egen opsætning.

Et deploy-rollback ruller ikke nødvendigvis data tilbage

Hostingplatformen kan typisk pege domænet tilbage på tidligere kode eller indhold. Den handling fortryder ikke automatisk nye databasefelter, slettede poster, udsendte mails, betalinger eller kald til andre systemer. Derfor skal rollback-planen beskrive både applikation og data.

  • Gør ændringer bagudkompatible: Tilføj nye felter før gamle fjernes, så både ny og tidligere kode kan fungere i overgangsperioden.
  • Del ændringen op: Udvid skemaet, flyt data kontrolleret, skift koden og fjern først det gamle, når rollbackvinduet er lukket.
  • Tag backup før irreversible trin: Dokumentér også hvordan og hvor hurtigt den kan gendannes.
  • Undgå manuel panikredigering: Gem migrationsfiler og scripts sammen med koden, og notér hvilken version de hører til.

Skriv en rollback-runbook, mens appen virker

  1. Udløser: Hvilke tegn betyder stop eller rollback – fx fejl i login, dataskrivning eller et kritisk flow?
  2. Beslutning: Hvem må rulle tilbage, og hvordan kontaktes personen?
  3. Målversion: Hvilket deploy eller commit er kendt fungerende?
  4. Handling: Skriv de konkrete klik eller kommandoer for den valgte platform uden at indsætte secrets.
  5. Data: Skal jobs stoppes, køer pauses, dubletter findes eller backup gendannes?
  6. Kontrol: Hvilke smoke tests, logs og alarmer beviser, at driften er tilbage?
  7. Kommunikation: Hvem skal vide, at en version er trukket tilbage, og hvornår kommer næste status?

Afprøv runbooken med en ufarlig ændring. En procedure, som ingen har åbnet eller må udføre, er kun dokumentation på papiret.

Typiske fejl

  • Preview bruger produktionsdatabasen: En test ændrer rigtige data, selv om URL'en ser midlertidig ud.
  • Alle miljøer deler samme secrets: En fejl eller læk i test giver direkte adgang til produktion.
  • Kun forsiden testes: Login, filupload, baggrundsjob eller integrationer er allerede brudt.
  • Rollback-knappen er planen: Ingen har undersøgt, om backend, konfiguration og database stadig passer til den gamle version.
  • Ingen kender den levende version: Et deploy kan ikke knyttes til commit, migrationsstatus eller ansvarlig.
  • En dårlig version går automatisk live igen: Rollback udføres, men næste auto-deploy overskriver den uden en ny kontrol.
  • Staging bliver et ekstra produktionsmiljø: Det fyldes med persondata og brede adgange uden samme kontrol som produktion.

Tjekliste til sikker udgivelse og rollback

  • ☐ Appens frontend, backend, data, filer, jobs og eksterne handlinger er kortlagt.
  • ☐ Test og produktion har separate data, credentials og relevante tredjepartsmiljøer.
  • ☐ Previews er beskyttet, hvis de viser intern funktionalitet eller følsomme data.
  • ☐ Den version, der udgives, kan forbindes med commit, deploy-id og ansvarlig.
  • ☐ Build, tests og et kort smoke test er gennemført på den rigtige version.
  • ☐ Produktionsspecifikke domæner, callbacks, secrets og jobs er kontrolleret.
  • ☐ Datamigreringer er testet, bagudkompatible eller dækket af en særskilt gendannelsesplan.
  • ☐ Der findes en kendt fungerende version, som platformen stadig kan rulle tilbage til.
  • ☐ Rollback-runbooken angiver udløser, ejer, handling, datakontrol og verifikation.
  • ☐ Proceduren er afprøvet, og auto-deployment kan stoppes, hvis den ellers genudgiver fejlen.

Relaterede guides

Officielle kilder

Platformenes funktioner og begrænsninger ændrer sig. Kontrollér altid dokumentationen, jeres abonnement og den konkrete opsætning, før en procedure bruges i produktion.