Skip to main content
Hver endring testet før den slipper ut

WordPress CI/CD og DevOps

WordPress CI/CD: koden i Git, automatiske tester på hver push og deploys uten nedetid. Går noe galt, er forrige versjon tilbake i løpet av minutter.

Flaks er ikke
en deploy-strategi

Nettbutikken sluttet å ta imot ordre klokka 14.03 en helt vanlig torsdag. Årsaken? Én fil, lastet opp over FTP rett i produksjon, uten test og uten kopi av den gamle. WordPress CI/CD finnes for å gjøre slike episoder umulige. Ikke gjennom strengere rutiner alle likevel glemmer en travel dag, men ved at maskiner kontrollerer koden før den slipper ut til kundene.

Og dette er ikke noe sjeldent uhell. Vi overtar jevnlig nettsider der deploy-historikken bor i hodet til én utvikler som sluttet i fjor. Hvilke pluginversjoner kjører i produksjon? Ingen vet helt sikkert. Det finnes jo ingen logg som kan svare, og da blir hver eneste endring et lite sjansespill med andres arbeidsdag som innsats.

Motgiften er verken eksotisk eller dyr. Koden bor i Git, hver push utløser automatiske tester, og selve deployen er én kommando som oppfører seg likt hver gang. To utviklere er nok til å hente ut gevinsten. Hos oss er dette grunnoppsettet i all profesjonell WordPress-utvikling, ikke noe dere må bestille i tillegg.

30+

Deploys i en vanlig uke hos kundene våre

<15min

Fra git push til koden kjører testet i produksjon

0s

Nedetid besøkende opplever per deploy

<5min

Fra feilen oppdages til forrige versjon kjører

Byggesteinene i en WordPress CI/CD-pipeline

Verktøyene kan byttes ut underveis. Prinsippet ligger fast: kode som ikke har bestått testene, kommer seg ikke til produksjon.
01 / 06

Git i bunnen

Temaet og hver egenutviklet plugin ligger i versjonskontroll med full historikk. Hvem rørte denne fila i fjor høst, og hva skulle endringen løse? Loggen husker, også når ingen andre gjør det.
02 / 06

Composer-styrt WordPress

WordPress-versjonen og samtlige plugins er definert som avhengigheter i composer.json, etter samme modell som Bedrock. Versjonene er låst, så et nytt miljø bygges opp helt identisk med produksjon — ikke nesten likt, der de små avvikene er nettopp dem som biter deg klokka to om natta.
03 / 06

Automatiske tester

Statisk analyse og PHPUnit kjører på hver eneste push. Etterpå klikker Playwright seg gjennom nettsiden i en ekte nettleser, fyller ut skjemaer og logger inn, før endringen får komme i nærheten av besøkende.
04 / 06

Staging som speiler produksjon

Samme PHP-versjon og samme databasemotor som i produksjon. Feilene dukker dermed opp der de koster litt utviklertid, ikke der de koster omsetning.
05 / 06

Blue-green deploy

Gammel og ny versjon kjører side om side mens helsesjekkene går sine runder. Trafikken flyttes når alt melder grønt, og flyttes like raskt tilbake hvis den nye versjonen oppfører seg rart.
06 / 06

Overvåkning og varsling

Responstid og feilrate måles før og etter hver deploy. Blir noe tregere eller ustabilt, får teamet beskjed fra varslingen — ikke fra en oppgitt kunde på e-post neste morgen.

Null nedetid
uten magi

Teknikken bak er gammel og velprøvd: atomiske deploys. Hver nye versjon bygges helt ferdig i sin egen katalog på serveren, med Composer-pakker og kompilerte assets, mens den gamle fortsetter å svare på trafikk vegg i vegg. Ingen filer overskrives underveis, og besøkende ser aldri en vedlikeholdsside.

Deretter må den nye versjonen bevise at den duger. Helsesjekkene tester at applikasjonen svarer, at den får kontakt med databasen, og at de kritiske sidene faktisk laster. Først når alle sjekkene melder grønt, flyttes en symlink, og fra det øyeblikket treffer all trafikk den nye versjonen uten å miste en eneste forespørsel. Selve byttet tar millisekunder, og derfor deployer vi like gjerne tirsdag formiddag som natt til søndag.

Skulle en deploy likevel feile, pekes symlinken tilbake til forrige versjon, og nettsiden står der den sto, i løpet av minutter og uten at noen må grave i backuper eller kalle inn til krisemøte. Besøkende så aldri annet enn en nettside som virket — det er hele poenget. Oppsettet er beskrevet i detalj i casestudien om null nedetid-deploy i praksis.

Forskjellen, linje for linje

Manuell FTP
Deploy-metode
Filer dras over i en FTP-klient
Tid per deploy
15–45 minutter, manuelt
Rollback
Gjenopprett backup, 30–60 min
Testing
Manuelt i nettleseren, kanskje
Sporbarhet
Ingen
Hvem gjorde hva
Ingen vet
Nedetid ved deploy
Uforutsigbar
Teamarbeid
Én person om gangen
CI/CD-pipeline
Standard hos PXL
Deploy-metode
Automatisk ved git push
Tid per deploy
2–5 minutter, automatisert
Rollback
Én kommando — i løpet av minutter
Testing
Automatisert ved hver push
Sporbarhet
Full Git-historikk
Hvem gjorde hva
Navn, tidspunkt og begrunnelse
Nedetid ved deploy
0 sekunder
Teamarbeid
Parallelle feature-brancher

Når er dette overkill?

Ærlig talt? For noen nettsider, ja.

En brosjyrenettside med standardtema og en håndfull velprøvde plugins klarer seg nok lenge med wp-admin og en vedlikeholdsavtale der noen med kompetanse tester oppdateringene før de rulles ut. Full pipeline på et slikt prosjekt blir som å bygge garasje til en sparkesykkel. Da sier vi fra.

Regnestykket snur i det øyeblikket nettsiden tjener penger. En nettbutikk med ordre hver time kan ikke bruke produksjon som testmiljø, og det samme gjelder integrasjoner mot Vipps eller BankID og kodebaser der flere utviklere committer i samme uke. Prislappen på en manuell deploy? Den får dere først se når det smeller.

Tommelfingerregelen vår er enkel. Koster en time nedetid mer enn 10 000 kr, eller skal nettsiden leve med egenutviklet kode i mer enn to år, tjener pipelinen seg inn av seg selv. Jobben gjøres én gang. Den første feildeployen som aldri nådde produksjon, dekker som regel hele fakturaen.

Veien til WordPress CI/CD på en eksisterende nettside

KartleggingFørst sporer vi hvordan en endring faktisk havner i produksjon i dag — svaret er ofte mer kreativt enn noen liker å innrømme. Egenutviklet kode skilles ut fra tredjepartsplugins og temaer.
VersjonskontrollTema og egne plugins flyttes inn i Git med historikken i behold. WordPress selv og resten av tredjepartskoden blir Composer-avhengigheter, og passord og API-nøkler flyttes ut av koden og inn i miljøvariabler.
Staging og pipelineEt staging-miljø som speiler produksjon kommer på plass, koblet til en pipeline som kjører statisk analyse og tester på hver push.
Automatisert deployAtomiske deploys med helsesjekker, først mot staging og deretter mot produksjon. Filredigering i dashbordet skrus av, og dermed er siste snarvei forbi pipelinen stengt.
OverleveringTil slutt får teamet deres dokumentasjon og opplæring. Drift pipelinen videre selv, eller la oss følge den opp gjennom en driftsavtale.

Ofte stilte spørsmål

Hva om neste deploy bare var en vanlig tirsdag?

Beskriv kort hvordan dere ruller ut endringer i dag, så får dere et ærlig svar på om en pipeline er verdt pengene for akkurat dere.