Slik gjør vi DevOps med Jenkins X hos Mentor Medier

CoWorks smarte fabrikkhode Christoffer Vig gir et innblikk i hashtag#DevOps bestepraksis og hvordan vi har gått frem for å realisere mikrotjenester

BlogWork av

Christoffer Vig

2/4/2020

Mediehuset Mentor Medier er i ferd med å bytte ut sin gamle publiseringsløsning (for digitalt innhold), til fordel for Arc publishing. Dette er publiseringsløsningen som også brukes og eies av Washington Post.

CoWork har i løpet av de siste to år bistått Mentor Medier med strategisk IT ledelse for å løfte organisasjonens digitale modenhet, og teknisk innføring av digitalfabrikken: Økt kodekvalitet, kontroll på oppgaver, devops — utvikling for drift -, samt sikkerhet og stabilitet på eksisterende plattform.

For overgang til Arc, har CoWork fått i oppdrag å bistå teknisk med migreringsprosessen. Oppgavene består bl.a. av migrering av gammelt innhold, opplæring i nye arbeidsprosesser, integrasjon mot eksisterende systemer og ny betalingsflyt.

Da vi i denne omgang skulle velge byggsystem for migrasjonsprosjektet, kunne vi ha valgt å fortsette med det vi allerede hadde bygget, basert på Jenkins. Isteden valgte vi Jenkins X.

Jenkins (uten X) er antakelig verdens mest brukte verktøy for utrulling av kode. Det har en lang historie, og et utall plugins og tillegg som gjør det veldig fleksibelt.

Jenkins X (med X), derimot, er et helt nytt produkt, basert på erfaringer fra Jenkins. Mens Jenkins er et arbeidsjern som du kan få til å gjøre nesten hva som helst, tilbyr Jenkins X en ganske steil oppfatning av hva som er bestepraksis for utvikling og utrulling på Kubernetes — opinonated, som det heter på nynorsk.

Hvorfor Kubernetes?

Kubernetes er altså den store forskjellen

Så — hvorfor Kubernetes? Kubernetes er et åpen-kildekode verktøy for å administrere oppsett av it-systemer. Det har en stor brukermasse, og dens åpne arkitektur har ført til at det har blitt utviklet en hel rekke tilhørende komponenter.

Ved å bruke Kubernetes kan man automatisere oppsett av infrastruktur — skalering av tjenester, oppsett av ulike miljøer for test, qa, prod osv. Kubernetes muliggjør å kunne skrive infrastruktur som kode — og med kode kan vi også ha versjonskontroll. Endringer kan spores, og vi kan enkelt rulle ut hele miljøet på nytt dersom det skulle være nødvendig. Ikke minst — Kubernetes er en abstraksjon over fysisk maskinvare, så vår Kubernetes konfigurasjon er ikke knyttet til en bestemt type maskinvare eller skytjenesteleverandør. Vi kan flytte hele systemet over til en annen skyleverandør, eller — om det virkelig trengs — kjøre alt i vårt eget, private datasenter i garasjen.

Ved å automatisere tidkrevende drift og utvikling av it-systemer har Kubernetes muliggjort helt nye måter å jobbe på. Det er enkelt å utvikle og rulle ut nye tjenester; det er enklere å teste, enklere å rulle tilbake, enklere å gjøre feil, og ikke minst, det er enklere å rette feil. Derfor er Kubernetes en av drivkreftene bak den siste revolusjonen innen IT — mikrotjenester.

Bestepraksis DevOps med Jenkins X

Accelerate boken dokumenterer forskning på hvilke egenskaper som gjør it-prosjekter vellykket.

Hovedtrekkene er:

  • Versjonskontroll — alt er lagret i git.
  • Automatisert og kontinuerlig kodeutrulling
  • Løst koblet arkitektur
  • Enkelt å teste komponenter uavhengig av hverandre
  • Komponenter publiseres uavhengig av hverandre
  • Teamet gjør egne teknologiske valg (programmeringsspråk , database osv.)

Jenkins X er et verktøy som tillater oss å bygge praksiser tett opptil det Accelerate anbefaler.

Med Jenkins X ligger både applikasjonskode og konfigurasjon lagret i git (GitOps). Endringer dokumenteres gjennom “pull requests”, som kjører koden gjennom automatiske tester og kvalitetskontroll, før den som et siste ledd krever godkjenning av en annen på teamet før den kan rulles ut til staging miljøet. Dermed dokumenteres alle endringer, samtidig som kvaliteten sikres, og kunnskap deles innad i teamet.

I migreringsprosjektet hos Mentor benytter vi en blanding av Java, python og nodejs komponenter. Jenkins X tilbyr ferdige pakker for å kunne benytte ulike programmeringsspråk i Kubernetes, dermed kan man i de fleste tilfeller kjøre en enkel kommando for å importere eksisterende kode inn i Kubernetes og Jenkins X. I gamle Jenkins brukte man en Jenkinsfile for å definere byggeprosessen, i Jenkins X er det en tilsvarende en Jenkins-x.yml fil som definerer Tekton pipeline. Tekton pipelines er et kubernetes system for kontinuerlig utrulling som spinnes opp ved behov (såkalt “serverless”), kan kjøres parallelt og bruker lite ressurser: Det totalt motstatte Jenkins (uten X) som er en ressurskrevende webapplikasjon som kjører hele tiden.

Jenkins X er bygget for og på Kubernetes, og vi kan dermed enkelt benytte oss av hele Kubernetes økosystemet for å utvide løsningen med de komponentene vi trenger. I vår installasjon av Jenkins X har vi lagt til filebeat og metricbeat, for å gi innsikt i systemet og kjøre analyse av logger og metrikker i Elasticsearch og Kibana. Vi benytter SonarQube for å gi oss statisk kvalitetssjekk av koden.

Jenkins X hos Mentor Medier har bidratt til:

  • kode rulles ut kjapt
  • minimere antall feil i koden — automatiserte tester
  • lett å gjøre endringer
  • enkelt å sette opp ulike miljøer — for test, prod,qa, egne miljøer for hver publikasjon.
  • stabilitet
  • skalerbarhet
  • bestepraksis DevOps metoder (Accelerate)

Jenkins X gjør utvikling av mikrotjenester på Kubernetes tilgjengelig for oss, uten at vi trenger å bruke år på å lære det bakenforliggende.