Kontinuerlig Integrasjon: Hva, Hvorfor og Hvordan

0
18

For ikke lenge siden, hadde jeg en nybegynner forståelse av Kontinuerlig Integrasjon (CI) og syntes det virket som en ekstra prosess som styrker ingeniører til å gjøre ekstra arbeid på allerede store prosjekter. Mitt team og begynte å implementere CI inn i prosjekter, og etter noen hands-on erfaring, og jeg innså sin store fordeler, ikke bare for bedriften, men for meg, en ingeniør! I dette innlegget, jeg vil beskrive CI, fordelene jeg har oppdaget, og hvordan de skal gjennomføre det gratis og rask.

CI og Kontinuerlig Levering (CD) er vanligvis omtalt sammen. Skriver om både CI og CD i et innlegg er mye å skrive og lese om alt på en gang, så vi får bare diskutere CI her. Kanskje, jeg vil dekke CD-en i en fremtidig innlegg. 😉

Innholdsfortegnelse:

  • Hva er CI?
  • Hvorfor CI bør brukes overalt
  • Ingen unnskyldninger, bruke CI
  • Hvilke problemer har CI løse?
  • Anbefalt CI verktøy
  • Høyt nivå CI oppsett
  • Oppsummering

Hva er CI?

Kontinuerlig Integrasjon, som jeg forstår det, er et mønster av programmering som kombinerer testing, sikkerhetskontroll, og utvikling av metoder til trygt push-kode fra en utvikling gren til produksjon klar gren kontinuerlig.

Microsoft Word er et eksempel på CI. Ordene er skrevet inn i programmet og kontrollert mot staving og grammatikk algoritmer for å hevde at et dokument er generelt lettere å lese og stave.

Hvorfor CI bør brukes overalt

Vi har allerede berørt i denne litt, men den største fordelen med CI som jeg ser er at det sparer en masse penger ved å gjøre ingeniører mer produktive. Spesielt, det gir raskere feedback-looper, enklere integrasjon, og det reduserer flaskehalser. Direkte sammenstille CI til selskapet besparelsene er vanskelig fordi SaaS kostnader skala som brukeren base endringer. Så hvis en utvikler som ønsker å selge CI forretnings -, formelen nedenfor kan benyttes. Nysgjerrig på akkurat hvor mye du kan spare? Min venn, David Inoa, opprettet følgende demo for å hjelpe beregne besparelser.

Se Penn Kontinuerlig Integrasjon (CI) Selskapet Kostnadsbesparelser Estimator av David (@davidinoa) på CodePen.

Det som er virkelig spennende nok til å skrike til toppen av hustakene er hvordan CI kan gagne deg og meg som utviklere!

For startere, CI vil spare deg for tid. Hvor mye? Vi snakker timer per uke. Hvordan? Åh, ønsker jeg å fortelle deg! CI automatisk tester koden din og gir deg beskjed hvis det er greit å være sammen i en gren som går til produksjon. Mengden av tid som du ville tilbringe teste koden din og samarbeide med andre for å få koden klar for produksjon, er en for mye tid.

Så det er sånn det bidrar til å hindre kode tretthet. Det sport verktøy som Greenkeeper, som kan automatisk stille opp, og selv slå sammen — trekk forespørsler følgende kode anmeldelse. Dette holder koden opp-to-date, og tillater utviklere å fokusere på hva vi egentlig trenger å gjøre. Du vet, som du skriver koden, eller å leve livet. Koden oppdateringer i pakker vanligvis trenger bare å bli anmeldt for større versjon oppdateringer, så det er mindre behov for å spore hver liten slipp for å bryte endringer som krever handling.

CI tar mye av gjetting ut av å oppdatere avhengigheter som ellers ville ta mye forskning og testing.

Ingen unnskyldninger, bruke CI!

Når du snakker med utviklerne, samtale vanligvis ender opp noe sånt som:

“Jeg vil bruke CI, men…[sett inn unnskyldning].”

For meg er det en cop ut! CI kan være gratis. Det kan også være enkelt. Det er sant at fordelene med CI komme med noen kostnader, herunder månedlige avgifter for verktøy som CircleCI eller Greenkeeper. Men det er en dråpe i bøtta med langsiktig sparing det gir. Det er også sant at det vil ta tid å sette ting opp. Men det er verdt å rope ut at strømmen av CI kan brukes gratis på åpen kildekode-prosjekter. Hvis du trenger eller ønsker å holde din kode privat og vil ikke betale for CI-verktøy, så du virkelig kan bygge din egen CI oppsett med noen gode npm-pakker.

Så, nok unnskyldninger og se guds kraft av CI!

Hvilke problemer har CI løse?

Før graving i langt videre, og vi bør dekke bruk saker for CI. Det løser mange problemer og kommer godt med i mange situasjoner:

  • Når mer enn én utbygger ønsker å slå seg sammen til en produksjon gren på en gang
  • Når feilene er ikke fanget eller ikke kan bli løst før distribusjon
  • Når avhengigheter er gått ut på dato
  • Når utviklerne må vente lengre perioder av tid til å flette kode
  • Når pakkene er avhengig av andre pakker
  • Når en pakke er oppdatert og må endres på flere plasser
CI tester oppdateringer og forebygger feil fra å være utplassert.

Anbefalt CI verktøy

La oss se på høyt nivå deler som brukes til å opprette en CI feedback loop med noen raske kode biter for å få CI oppsett for enhver åpen kildekode-prosjekt i dag. Vi vil bryte dette ned til fordøyelig biter.

Dokumentasjon

For å få CI fungerer for meg med en gang, jeg pleier å sette CI opp for å teste min første dokumentasjon for et prosjekt. Spesielt, jeg bruker MarkdownLint og Skrive Gode fordi de gir alle funksjonene og funksjonaliteten jeg trenger for å skrive tester for denne delen av prosjektet.

Den store nyheten er at GitHub gir standard maler og det er mye innhold som kan kopieres til å få dokumentasjon setup raskt. Les mer om raskt å sette opp dokumentasjon og skape en dokumentasjon feedback loop.

Jeg holder en pakke.json-fil i roten av prosjektet og kjøre et skript kommando som f.eks dette:

“grammatikk”: “skrive-god *.md-ingen-passiv”,
“markdownlint”: “markdownlint *.md”

De to linjene tillate meg å begynne å bruke CI. Det er det! Jeg kan nå kjøre CI for å teste grammatikk.

På dette punktet, jeg kan flytte inn innstillingen opp CircleCI og Greenkeeper å hjelpe meg med å sørge for at pakkene er oppdatert. Vi får til det i bare litt.

Enhetstesting

Unit-tester er en metode for testing av små blokker (enheter) av kode for å sikre at den forventede virkemåten av at blokkere fungerer som tiltenkt.

Unit-tester gir en mye hjelp med CI. De definerer kode kvalitet og gir utviklere med tilbakemeldinger uten å måtte presse/merge/host-koden. Les mer om enhet tester og raskt å sette en unit-test feedback loop.

Her er et eksempel på en svært grunnleggende enhet test uten å bruke et bibliotek:

const addsOne = (num) => num + 1 // starter Vi med 1 som en startverdi
const numPlus1 = addsOne(3) // Funksjon for å legge til 3
const stringNumPlus1 = addsOne(‘3’) // Legger til de to funksjonene, forventer 4 som verdi

/**
* konsollen.hevde
* https://developer.mozilla.org/en-US/docs/Web/API/console/assert
* @param test?
* @param string
* @returnerer strengen hvis testen mislykkes
**/

– konsollen.hevde(numPlus1 === 4, ‘variabel `numPlus1` er ikke 4!’)
– konsollen.hevde(stringNumPlus1 === 4, ‘variabel `stringNumPlus1` er ikke 4!’)

Over tid, er det fint å bruke biblioteker som Spøk til unit-test av kode, men dette eksempelet gir deg en idé om hva vi ser på.

Her er et eksempel på den samme testen ovenfor med moro skyld:

const addsOne = (num) => num + 1

beskrive(‘addsOne’, () => {
det(‘legger til et tall’, () => {
const numPlus1 = addsOne(3)
forventer(numPlus1).toEqual(4)
})
det(‘vil ikke legge en streng’, () => {
const stringNumPlus1 = addsOne(‘3’)
forventer(stringNumPlus1 === 4).toBeFalsy();
})
})

Ved hjelp av Spøk, tester kan være koblet opp for CI med en kommando i en pakke.json som dette:

test:moro skyld”: “spøk –dekning”,

Flagget –dekning stiller Spøk å rapportere test dekning.

Sikkerhetskontroll

Sikkerhetskontroll hjelpe kommunisere koden og koden kvalitet. Dokumentasjon, dokumentmaler, linter, stavekontroller, og skriver kontrolløren er alle sikkerhetssjekker. Disse verktøyene kan automatiseres for å kjøre under forplikter, i utvikling, under CI, eller selv i en kode editor.

Sikkerhetskontroll faller inn mer enn én kategori av CI: feedback loop og testing. Jeg har satt sammen en liste over typer av sikkerhet sjekket jeg vanligvis bake inn i et prosjekt.

Alle disse kontrollene kan virke som et annet lag av kode abstraksjon eller læring, så vær snill med deg selv og andre dersom dette føles overveldende. Disse verktøyene har bidratt til mitt eget team bridge erfaring hull, definere delbare team mønstre, og hjelpe utviklere når de er forvirret om hva koden gjør.

  • Å begå, sammenslåing, kommunisere: Verktøy som husky, commitizen, GitHub Maler, og Changelogs bidra til å holde CI kjører ren kode, og danne en fin arbeidsflyt for en samarbeidende team.
  • Å definere kode (type brikker): Verktøy som maskinskrevet kopi definere og kommunisere kode grensesnitt — ikke bare typer!
  • Linting: Dette er en praksis som sikrer at noe stemmer med definerte standarder og mønstre. Det er en linter for nesten alle programmeringsspråk, og du har sikkert jobbet med vanlige, som ESlint (JavaScript) og Stylelint (CSS) i andre prosjekter.
  • Du skriver og kommenterer: Skrive en God hjelper til å fange grammatikk feil i dokumentasjonen. Verktøy som JSDoc, Lære, og TypeDoc bistå i skriftlig dokumentasjon og legge til nyttige tips i koden som redaktører. Begge kan samle inn markdown dokumentasjon.

ESlint er et godt eksempel på hvordan noen av disse typer verktøy er implementert i CI. For eksempel, dette er alt som er nødvendig i pakken.json til lo JavaScript:

“eslint”: “eslint .”

Selvfølgelig, det er mange valg som tillater deg å konfigurere en linter å samsvare med deg og teamet ditt koding standarder, men du kan se hvor praktisk det kan være å sette opp.

Høyt nivå CI oppsett

Å få CI startet for et depot ofte tar veldig lite tid, men likevel er det er nok av avanserte konfigurasjoner vi kan også tas i bruk, dersom det er nødvendig. La oss se på en rask oppsett og deretter flytte inn i en mer avansert konfigurering. Selv de mest grunnleggende oppsett er gunstig for å spare tid og kode kvalitet!

To funksjoner som kan lagre utviklere timer per uke med enkle CI er automatisk avhengighet oppdateringer og bygge testing. Avhengighet oppdateringer er skrevet om i mer detalj her.

Bygge testing refererer til node_modules installasjon under CI ved å kjøre en installerer, for eksempel, (npm installere der alle node_modules installere som forventet. Dette er en enkel oppgave, og ikke svikter. Å sikre at node_modules installeres som forventet sparer betydelig tid!

Rask CI Oppsett

CI kan være oppsett automatisk for både CircleCI og Travis! Hvis en gyldig test kommandoen er allerede definert i depotet pakke.json, da CI kan implementeres uten noe mer-konfigurasjon.

I en CI-verktøy, som CircleCI eller Travis, depotet kan søkes etter pålogging eller verifisering. Derfra følger CI-verktøyets GRENSESNITT til å starte testing.

For JavaScript, CircleCI vil se på test i et depot en pakke.json å se om en gyldig test script er lagt til. Hvis det er, så CircleCI vil begynne å kjøre CI automatisk! Les mer om å sette opp CircleCI automatisk her.

Avanserte konfigurasjoner

Hvis unit tester er uferdige, eller om en mer konfigurering er nødvendig .yml filen kan være lagt for en CI-verktøyet (som CircleCI) hvor kjøre runner skript som er laget.

Nedenfor er hvordan du setter opp en tilpasset CircleCI konfigurasjon med JavaScript linting (igjen, ved hjelp av ESlint som et eksempel) for en CircleCI.

First off, kan du kjøre denne kommandoen:

mkdir .circleci && touch .circleci/config.yml

Legg deretter til følgende å generert fil:

standarder: &standarder
working_directory: ~/kode
docker:
– bilde: circleci/node:10
miljø:
NPM_CONFIG_LOGLEVEL: feil # gjøre npm-kommandoer mindre støy
JOBBER: maks <h3>https://gist.github.com/ralphtheninja/f7c45bdee00784b41fed
versjon: 2
jobber:
bygg:
<<: *standardverdiene
fremgangsmåte:
– checkout
– kjør: npm jeg
– kjør: npm kjøre eslint:ci

Etter disse trinnene er fullført, og etter CircleCI har blitt konfigurert i GitHub (mer om det her), CircleCI vil plukke opp .circleci/config.yml og lo JavaScript i en CI-prosessen når et trekk forespørsel er sendt.

Jeg laget en mappe med eksempler i denne demoen depotet for å vise ideer for å konfigurere CI med config.yml filesand du kan bruke det for din egen prosjektet eller bruke filene som utgangspunkt.

Det er mer enda mer CI verktøy som kan være setup for å bidra til å redde utviklere mer tid, som automatisk sammenslåing, auto-oppdatering, overvåking, og mye mer!

Oppsummering

Vi dekket et mye her! For å oppsummere ting opp, sette opp CI er veldig gjennomførbare og kan til og med være gratis. Med ekstra verktøy (både betalt og åpen kildekode), kan vi ha mer tid til å kode, og mer tid til å skrive mer tester for CI — eller nyte mer liv borte fra skjermen!

Her er noen demo-repositories for å hjelpe utviklere med å få oppsettet rask eller lære. Vær så snill og føl fri til å nå ut i depoter med spørsmål, ideer eller forbedringer.

  • Utvikler CI Fordeler Depotet
  • Utvikler CI Fordeler Demo
  • Utvikler CI Fordeler Demo-Avhengige
  • Jonathan Ong er CI-Workshop