Kode din CI/CD-pipeline: Få kontroll og automatisering med Pipeline as Code

I programvareutvikling er CI/CD, eller kontinuerlig integrasjon/kontinuerlig levering, en viktig prosess. Den automatiserer bygging og distribusjon av kode til forskjellige miljøer. Dette effektiviserer utviklingsprosessen betraktelig.

Imidlertid kan det å sette opp og vedlikeholde en slik pipeline være utfordrende. Det er her Pipeline som kode kommer inn i bildet. Dette er en tilnærming der hele CI/CD-pipelinen defineres i kode. I stedet for å bruke grafiske brukergrensesnitt eller dra-og-slipp-verktøy, benyttes konfigurasjonsfiler for å spesifisere hvordan applikasjonskoden skal bygges, testes og distribueres.

Før vi ser nærmere på detaljene rundt Pipeline som kode, er det viktig å forstå hva en pipeline egentlig er.

Hva er en pipeline i programvareutvikling?

En pipeline i programvareutvikling er en serie automatiserte trinn som tar de siste kodeendringene, utfører nødvendige prosesser, og distribuerer koden til ønsket miljø. La oss se på et konkret eksempel for å forstå dette bedre.

La oss si at du har tre mikrotjenester og har lagt til nye funksjoner i en av dem. Først ønsker du å kjøre enhetstester på koden. Deretter sjekker du kodeformateringen. Etter dette kompilerer du koden. Deretter distribuerer du den til to ulike miljøer med flere maskiner i hvert miljø. Til slutt kjører du integrasjonstester for å sikre at endringene dine fungerer godt med de andre tjenestene.

Du kan utføre alle disse trinnene manuelt. Men det ville tatt mye tid, og det er stor risiko for menneskelige feil. Heldigvis finnes det en bedre måte! Du kan automatisere disse trinnene ved å opprette en pipeline. Hver gang du gjør endringer i koden, kan du trigge pipelinen uten å bekymre deg for manuelle operasjoner.

Fordeler med Pipeline som kode

Dersom du benytter dra-og-slipp-verktøy, kan det være vanskelig å spore endringer, opprettholde standardisering og legge til rette for samarbeid. Pipeline som kode er en overlegen metode for å definere programvareutviklingspipelinen.

Det bidrar til å holde ting konsistent. Automatisering gir repeterbarhet og gjør det mulig å bruke samme pipeline for flere systemer. I likhet med applikasjonskode fremmer koden som definerer pipelinen samarbeid.

#1. Konsistens

Ved å definere pipelinen i tekstformat sikrer du at alt skjer i riktig rekkefølge. Du implementerer en standardisert arbeidsflyt for alle applikasjonsbygg og -distribusjoner, noe som skaper konsistens og reduserer risikoen for uventede problemer.

Konsistens gir også bedre samsvarskontroll og sikkerhet. Du kan inkludere sikkerhetsskanning og sårbarhetssjekker i pipelinen, noe som hindrer at eventuelle trusler går upåaktet hen.

#2. Repeterbarhet

Med en automatisert pipeline er du sikret at hver applikasjonskode går gjennom de samme trinnene og kontrollene. Du lager pipelinen og setter i gang automatiseringsprosessen.

Koden din vil alltid følge den samme bygge- og distribusjonsprosessen. Dette sørger for at alle kjøringer er repeterbare.

#3. Samarbeid

Når du definerer pipelinen i kodeform, legges det til rette for samarbeid. Flere personer på tvers av team kan bidra til den samme koden, akkurat som med applikasjonskoden.

Pipeline som kode muliggjør også versjonskontroll og kodeanmeldelser. Dette sikrer at beste praksis følges og at potensielle problemer oppdages tidlig.

La oss nå se på hvordan du kan lage din egen pipeline ved å bruke Pipeline som kode.

Pipeline som kode i Jenkins

Når det kommer til CI/CD, er Jenkins en av de ledende automatiseringsserverne med åpen kildekode. Jenkins gir deg mulighet til å integrere kodeendringer, automatisere testing og bygging, og distribuere programvare på en pålitelig og effektiv måte.

Uansett om du er en hobbyutvikler eller jobber med komplekse bedriftssystemer, kan Jenkins oppfylle de unike kravene til prosjektet ditt. Det store utvalget av plugins og det stadig voksende fellesskapet hjelper deg å få mest mulig ut av automatiseringsprosessen.

I Jenkins defineres en pipeline som et sett av plugins som utføres i en bestemt rekkefølge for å danne et CI/CD-system. Uansett om du har enkle eller komplekse behov, kan du lage pipelinen ved å bruke kode med domenespesifikt språk (DSL) for pipeline. DSL er bygget på toppen av Apache Groovy.

Grunnlaget for Pipeline som kode i Jenkins er Jenkinsfile, en tekstfil som inneholder kode som beskriver alle de ulike trinnene og handlingene. La oss se hvordan du lager en pipeline ved hjelp av Jenkinsfile.

Hvordan lage din pipeline som kode?

Etter å ha installert og startet Jenkins, går du til nettgrensesnittet i nettleseren din. Du må kanskje logge inn. Da vil du komme til hovedsiden for Dashboard. Herfra starter du med å lage din pipeline.

  • I venstre panel finner du knappen «Nytt element».
  • Klikk på den for å navigere til neste side.
  • På den nye siden vil du se en melding om å opprette et element.
  • Gi et navn i feltet «Angi et elementnavn». Dette er obligatorisk.
  • Husk at det opprettes en katalog med samme navn. Det er derfor best å unngå mellomrom, da det kan føre til uønskede bivirkninger.
  • Velg alternativet «Pipeline» og klikk på «OK»-knappen nederst på skjermen.
  • Konfigurasjonsvinduet vises.
  • Klikk på «Pipeline»-alternativet i venstre panel eller bla ned til «Pipeline»-delen.

La oss starte med en enkel pipeline som du kan konfigurere direkte fra brukergrensesnittet.

Lag pipeline som kode direkte i Jenkins

I «Pipeline»-delen er du klar til å lage din første pipeline som kode.

Fra nedtrekksmenyen «Definisjon» velger du alternativet «Pipeline script». Under den finner du et skriptområde der du kan skrive pipelinen. Jenkins vedlikeholder manuset som lages her.

Jenkins lar deg velge mellom to kodestiler eller syntakser: «Deklarativ syntaks» og «Skriptsyntaks». Deklarativ syntaks er enkel å bruke og er ideell for enkle pipelines, mens skriptsyntaks er for mer avanserte brukere som trenger å utforme komplekse flyter.

Bruk deklarativ syntaks til å lage tre enkle trinn: «Bygg kode», «Test kode» og «Distribuer kode», ved hjelp av følgende kodebit:

pipeline {
    agent any

    stages {
        stage('Build Code') {
            steps {
                echo 'Dette er trinnet for bygging...'
            }
        }
        stage('Test Code') {
            steps {
                echo 'Dette er trinnet for å teste...'
            }
        }
        stage('Deploy Code') {
            steps {
                echo 'Dette trinnet distribuerer koden...'
            }
        }
    }
}
  

Du kan også bruke den skriptede syntaksen som vist nedenfor:

node {
    stage('Build Code') {
        echo 'Dette er trinnet for bygging...'
    }
    stage('Test Code') {
        echo 'Dette er trinnet for å teste...'
    }
    stage('Deploy Code') {
        echo 'Dette trinnet distribuerer koden...'
    }
}
  

Klikk på «Lagre». Klikk deretter på «Bygg nå»-knappen i venstre panel. Dette vil utløse pipelinen du nettopp har opprettet.

Når pipelinen er ferdig, kan du sjekke den i byggehistorikken. Hvis dette er din første kjøring, klikker du på byggenummer 1. Deretter klikker du på «Konsollutgang» i venstre panel. Du vil finne de tre «echo»-setningene som du har i pipeline-koden på hvert trinn.

Lag pipeline som kode ved hjelp av en ekstern fil

Det blir vanskelig å vedlikeholde pipelinen direkte i Jenkins når den begynner å bli kompleks. Da er det best å opprette en ekstern fil og bruke den.

Før du oppretter din Jenkins-pipeline, trenger du et eksternt depot og et versjonskontrollsystem. La oss lage et Git-depot og hoste det eksternt på GitHub. Du oppretter Jenkinsfilen din og lagrer den her.

  • Gå til din GitHub-profil. Du kan opprette en gratis konto dersom du ikke har en.
  • Opprett et nytt depot. Gi det navnet «customJenkins».
  • På din lokale maskin må du sørge for at du har Git installert.
  • Opprett en katalog på det stedet du ønsker.
  • Naviger inn i katalogen og åpne terminalen.
  • Initialiser et tomt Git-lager ved å bruke kommandoen «git init».
  • Lag en ny fil, som skal være din Jenkinsfile. La oss gi den navnet «customJenkinsfile».
  • Skriv din pipeline som kode i denne filen. Som et eksempel, bruk den som er nevnt nedenfor:
pipeline {
    agent any

    stages {
        stage('Build Code') {
            steps {
                echo 'Dette er trinnet for bygging definert i ekstern fil...'
            }
        }
        stage('Test Code') {
            steps {
                echo 'Dette er trinnet for å teste definert i ekstern fil...'
            }
        }
        stage('Deploy Code') {
            steps {
                echo 'Dette trinnet definert i ekstern fil distribuerer koden...'
            }
        }
    }
}
  
  • Legg til den nyopprettede filen til Git ved å bruke kommandoen «git add –all» i terminalen.
  • Send filen til Git ved å bruke kommandoen «git commit -m “Opprettet en tilpasset jenkinsfil”».
  • Koble ditt lokale Git-lager til det eksterne depotet ved å bruke «git remote add origin [email protected]:/customJenkins.git».
  • Last deretter opp filen til ekstern (GitHub) ved hjelp av «git push –set-upstream origin master».

Nå har du opprettet et eksternt depot på GitHub som inneholder en tilpasset Jenkinsfil. La oss konfigurere Jenkins til å bruke denne.

Konfigurer Jenkins til å bruke Jenkinsfile fra GitHub

  • Åpne Jenkins-dashbordet.
  • Opprett en ny pipeline, eller klikk på «Konfigurer» i venstre panel fra en eksisterende pipeline.
  • Rull ned til «Pipeline»-delen.
  • Velg alternativet «Pipeline script fra SCM» fra rullegardinmenyen «Definisjon».
  • Velg «Git» i «SCM»-alternativet.
  • Oppgi GitHub-repositorylenken i «Repository URL» under «Repositories».
  • Sørg for at grenspesifikasjonen er satt til «*/master» under «Branches to build».
  • Rull ned til «Skriptbane». Her oppgir du navnet på Jenkins-filen, «customJenkinsfile». Klikk på «Lagre».

Etter det kjører du pipelinen. Jenkins vil først hente koden din fra fjernlageret. Deretter vil den opprette en pipeline ved å bruke den tilpassede Jenkinsfilen og kjøre alle trinnene.

Du har nå opprettet din egen programvareutviklingspipeline med Pipeline som kode. I tillegg har du aktivert versjonskontroll på pipeline-skriptet. Eventuelle endringer du gjør i pipeline-koden kan spores med hver Git-commit. Nå er det på tide å se på beste praksis.

Beste praksis for å skrive effektiv pipeline som kode

La oss se på den beste fremgangsmåten du bør følge når du skriver Pipeline som kode.

  • Hold pipelinen enkel og unngå å skrive for komplekse forhold.
  • Hvis du har mange kommandoer i pipelinen, kan du dele dem inn i forskjellige trinn.
  • Bruk eksterne filer med versjonskontroll for Pipeline som kodeskript.
  • Bruk funksjonene i kodespråket, som Groovy, for å integrere ulike trinn.
  • Unngå anrop til «Jenkins.getInstance» eller dets tilbehør for å redusere sikkerhets- og ytelsesproblemer.
  • Ikke overskriv innebygde pipeline-kommandoer som «sh» og «timeout».
  • Lag eksterne verktøy eller skript for komplekse CPU-intensive oppgaver, og koble dem til pipelinen.
  • Dra nytte av det store utvalget av eksisterende plugins tilgjengelig for Jenkins.
  • Sørg for at du har implementert unntak og feilhåndtering, da feil kan oppstå.
  • Ikke lag din Pipeline som kode for tett sammen med mye forretningslogikk.
  • Bruk parameteriserte argumenter der det er mulig for å gjøre pipelinen gjenbrukbar.

Pipeline som kode: En enkel tilnærming for komplekse prosesser

Kort sagt, Pipeline som kode forenkler automatiseringen av din CI/CD-pipeline ved å representere hele prosessen som kode. CI/CD-pipelines automatiserer bygging, testing og distribusjon av kodeendringer, men Pipeline som kode tar dette et steg videre. Den lar deg definere arbeidsflyten i tekst i stedet for å stole på grafiske grensesnitt.

Med Pipeline som kode sikrer du at hvert trinn i arbeidsflyten utføres i riktig rekkefølge, og reduserer risikoen for uønskede problemer. Du får også flere fordeler, inkludert konsistens, repeterbarhet og bedre samarbeid.

Med denne veiledningen har du lært hvordan du lager dine egne pipelines ved å bruke Jenkins, et mye brukt CI/CD-verktøy. Jenkins tilbyr en kraftig og fleksibel plattform for å implementere Pipeline som kode gjennom Jenkinsfile. Ved å følge beste praksis kan du lage arbeidsflyter som dekker alle dine pipeline-behov.

Hvis du ønsker å lære mer om Jenkins, kan du sjekke ut hvordan du lager din egen Jenkins-pipeline.