Hopp til innhold

21.10.26 kl. 18.57: Alle våre servere er oppdatert mot php2shell.

Les mer om php2shell-sårbarheten
Endringene testes før de når nettsiden

WordPress CI/CD og DevOps

Koden ligger i Git, og nye versjoner publiseres uten nedetid.

Publisering av WordPress-kodeuten manuell filopplasting

Med CI/CD blir koden testet automatisk før den legges ut på nettsiden. Mange WordPress-nettsider oppdateres fortsatt ved at noen laster opp filer over FTP rett til den publiserte nettsiden, uten test og uten kopi av den gamle versjonen. Er én fil feil, kan for eksempel kassen i en nettbutikk slutte å virke, og det finnes ingen enkel vei tilbake. Manuelle sjekklister blir lett hoppet over når det er travelt, så vi lar testene kjøre automatisk på hver endring.

Vi overtar også nettsider der bare én utvikler visste hvordan endringer ble lagt ut, og den utvikleren har sluttet. Ingen vet sikkert hvilke pluginversjoner som kjører, fordi det ikke finnes noen logg. Uten den oversikten er det vanskelig å si hva en ny endring kan påvirke.

Oppsettet bruker vanlige verktøy. Koden ligger i versjonskontrollsystemet Git, hver endring en utvikler sender inn, starter automatiske tester, og selve publiseringen gjør de samme stegene hver gang. Det er nyttig allerede når to utviklere jobber på samme nettside. I enterprise WordPress-utvikling hos oss er dette en del av grunnoppsettet, så det kommer ikke som et tillegg.

Alt vi gjør med WordPress
Publiseringer i en vanlig uke hos kundene våre
30+
Fra en endring sendes inn til den er testet og publisert
<15min
Nedetid for besøkende når vi publiserer
0s
Fra en feil oppdages til forrige versjon kjører
<5min

Dette består oppsettet av

Verktøyene kan variere fra prosjekt til prosjekt. Prinsippet er at kode som ikke består testene, ikke blir publisert.

  • Alt ligger i Git

    Temaet og alle egenutviklede plugins ligger i versjonskontroll med full historikk. Der ser du hvem som endret en fil i fjor høst og hvorfor, selv om ingen husker det lenger.

  • WordPress styrt med Composer

    Composer er et verktøy som holder styr på hvilke versjoner av WordPress og plugins nettsiden bruker. Vi setter det opp etter samme modell som Bedrock, med låste versjoner, så et nytt miljø blir likt den publiserte nettsiden. Små forskjeller mellom miljøene er ofte årsaken til feil som er vanskelige å finne.

  • Automatiske tester

    Automatiske kodesjekker og enhetstester (PHPUnit) kjører hver gang en endring sendes inn. Deretter går testverktøyet Playwright gjennom nettsiden i en ekte nettleser, fyller ut skjemaer og logger inn, før endringen når besøkende.

  • Et testmiljø som er en kopi av nettsiden

    Testmiljøet (staging) er en kopi av nettsiden der endringer testes før de publiseres. Det kjører samme PHP-versjon og samme database som den publiserte nettsiden, så feil viser seg der og kan rettes før kundene ser dem.

  • To versjoner side om side

    Gammel og ny versjon kjører samtidig mens den nye kontrolleres automatisk. Trafikken flyttes når alle kontrollene er godkjent, og den kan flyttes like raskt tilbake hvis den nye versjonen gir feil.

  • Overvåkning og varsling

    Vi måler svartid og antall feil før og etter hver publisering. Blir nettsiden tregere eller gir den flere feil, går det et varsel til utviklerne, som regel før kundene merker noe.

Slik oppdaterer vi nettsidenuten nedetid

Hver nye versjon bygges ferdig i en egen mappe på serveren, med alle pakker og ferdige CSS- og JavaScript-filer, mens den gamle versjonen fortsetter å svare besøkende. Ingen filer overskrives underveis, så besøkende ser ingen vedlikeholdsside.

Før byttet kontrollerer vi den nye versjonen automatisk. Kontrollene sjekker at nettsiden svarer, at den har kontakt med databasen og at de viktigste sidene laster. Når alt er godkjent, flytter vi en snarvei på serveren (en symlink) til den nye versjonen, og ingen forespørsler går tapt. Byttet tar millisekunder, så vi kan publisere like gjerne tirsdag formiddag som natt til søndag.

Feiler en publisering likevel, flytter vi snarveien tilbake til forrige versjon. Nettsiden er da tilbake slik den var i løpet av minutter, uten at noen må hente fram backup. Du kan lese mer om oppsettet i casestudien om publisering uten nedetid.

Manuell opplasting og CI/CD sammenlignet

Manuell opplastingCI/CD-pipelineStandard hos PXL
PubliseringFiler lastes opp med et FTP-programAutomatisk når koden sendes inn
Tid per publisering15–45 minutter, manuelt2–5 minutter, automatisert
Tilbake til forrige versjonGjenopprette backup, 30–60 minÉn kommando, i løpet av minutter
TestingManuelt i nettleseren, hvis det blir tidAutomatisk ved hver endring
SporbarhetIngenFull Git-historikk
Hvem gjorde hvaUkjentNavn, tidspunkt og begrunnelse
Nedetid ved publiseringUforutsigbar0 sekunder
TeamarbeidÉn person om gangenFlere kan jobbe parallelt

Vi kan se på hvordan du legger ut endringer i dag, og hva som skal til for å automatisere det.

Når CI/CD ikke lønner seg

Ikke alle nettsider trenger en full pipeline.

En enkel informasjonsnettside med standardtema og noen få velprøvde plugins klarer seg lenge med adminpanelet i WordPress og en vedlikeholdsavtale, der noen med erfaring tester oppdateringene før de legges ut. En full pipeline koster mer enn den sparer på et slikt prosjekt, og det sier vi fra om.

Det endrer seg når nettsiden tjener penger. En nettbutikk som får ordre hver time, kan ikke bruke den publiserte nettsiden som testmiljø. Det samme gjelder nettsider med integrasjoner mot Vipps eller BankID, og nettsider der flere utviklere gjør endringer i samme uke.

Tommelfingerregelen vår er denne: Koster en time nedetid mer enn 10 000 kr, eller skal nettsiden leve med egenutviklet kode i mer enn to år, lønner pipelinen seg. Oppsettet er en engangskostnad, og etterpå følges pipelinen opp i vedlikeholdsavtalen.

Slik innfører vi WordPress CI/CD på en eksisterende nettside

  1. 01 / 05

    Kartlegging

    Først ser vi på hvordan endringer kommer ut på nettsiden i dag. Deretter skiller vi egenutviklet kode fra plugins og temaer som andre har laget.

  2. 02 / 05

    Versjonskontroll

    Temaet og egne plugins flyttes inn i Git uten at historikken går tapt. WordPress og plugins fra andre styres med Composer, og passord og API-nøkler flyttes ut av koden og inn i serverens innstillinger.

  3. 03 / 05

    Testmiljø og pipeline

    Vi setter opp et testmiljø som er en kopi av nettsiden, og kobler det til en pipeline som kjører kodesjekker og tester på hver endring.

  4. 04 / 05

    Automatisk publisering

    Endringer publiseres automatisk med kontroller, først til testmiljøet og så til den publiserte nettsiden. Vi skrur av filredigering i adminpanelet, slik at alle endringer må gå gjennom pipelinen.

  5. 05 / 05

    Overlevering

    Teamet ditt får dokumentasjon og opplæring. Du kan drifte pipelinen selv, eller la oss følge den opp gjennom en driftsavtale.

Er du usikker på hvordan dagens oppsett fungerer, er en teknisk gjennomgang et naturlig første steg.

Ofte stilte spørsmål

Hva koster det å sette opp CI/CD for WordPress?

Et komplett oppsett starter på 50 000 kr som utviklingsprosjekt. Da får du koden i Git, styrt med Composer, og automatiske tester på hver endring. En enklere variant med versjonskontroll og automatisk publisering, men uten full testdekning, tar to til tre dager og prises etter dagrate. Dagratene våre starter på 12 000 kr. Når pipelinen er i drift, dekkes den av vedlikeholdsavtaler fra 2 500 kr/mnd. Om det lønner seg, avhenger av hva en time nedetid koster deg og hvor lenge nettsiden skal leve med egen kode.

Hva er CI/CD for WordPress?

CI/CD står for Continuous Integration og Continuous Deployment. Continuous Integration betyr at all kode sjekkes inn i Git og testes automatisk med en gang. Da oppdager du konflikter mellom to utvikleres arbeid før de når nettsiden. Continuous Deployment tar over derfra: Testet kode publiseres til testmiljøet og så til den publiserte nettsiden, uten FTP-opplasting og uten sjekklister som glemmes når det haster. For deg betyr det at du kan se hvem som gjorde hver endring og hvorfor, og at forrige versjon er tilbake på få minutter hvis noe går galt.

Fungerer det med vanlige plugins og temaer?

Ja. Plugins og temaer fra andre leverandører installeres med Composer og WordPress Packagist i stedet for fra adminpanelet, med versjonene låst i composer.json. En pluginoppdatering blir da en vanlig kodeendring som testes i testmiljøet før den går videre. På den publiserte nettsiden holder vi filredigering i adminpanelet avskrudd, så alle endringer må gå gjennom pipelinen. Det krever litt disiplin av alle. Til gjengjeld viser loggen nøyaktig hvilken kode som kjører på nettsiden, og når den sist ble endret.

Hva er Bedrock, og trenger jeg det?

Bedrock er en måte å organisere filene i et WordPress-prosjekt på, laget av Roots-miljøet. WordPress styres med Composer, innstillingene flyttes ut av koden, og bare en egen mappe er tilgjengelig fra nettet. Bedrock er ikke nødvendig, og CI/CD fungerer også med vanlig mappestruktur. På nye prosjekter velger vi likevel nesten alltid Bedrock-modellen. Den gjør det enklere å holde passord og nøkler ute av koden og å håndtere forskjellene mellom utviklerens maskin, testmiljøet og den publiserte nettsiden.

Hvor lang tid tar innføringen?

En enkel pipeline med Git og automatisk publisering tar to til tre dager. Hele pakken, med Composer-struktur og skikkelig testdekning, tar gjerne én til to uker på en eksisterende installasjon. Det avhenger av hvor mye gammel egenutviklet kode som må ryddes først. Nettsiden går som normalt underveis, og redaksjonen publiserer som før.

Kan dere overta en eksisterende pipeline?

Ja. Det kan være halvferdige oppsett i GitHub Actions, eller pipelines ingen har rørt siden utvikleren som skrev konfigurasjonen sluttet. Vi starter med en teknisk gjennomgang for å se hva som virker og hvor risikoen ligger. Deretter dokumenterer og oppdaterer vi oppsettet og tar over den daglige driften. GitLab CI og Bitbucket Pipelines går like greit som GitHub Actions, siden prinsippene er de samme.

Snakk med oss om publisering og testing

Fortell kort hvordan du legger ut endringer i dag. Du får et ærlig svar på om en pipeline er verdt pengene for deg.