Kontinuerlig Integration: Vad, Varför och Hur

0
22

För inte så länge sedan hade jag en nybörjare förståelse för Continuous Integration (CI) och tyckte att det verkade som en extra process som tvingar ingenjörer för att göra extra arbete på redan stora projekt. Min grupp började att genomföra CI i projekt, och efter lite praktisk erfarenhet, jag insåg sin stora fördelar, inte bara för företaget, men för mig, en ingenjör! I detta inlägg kommer jag beskriva CI, de förmåner som jag har upptäckt, och hur man ska genomföra det gratis, och det snabbt.

CI och Continuous Delivery (CD) är vanligen diskuteras tillsammans. Skriver om både CI och CD i ett inlägg är en hel del att skriva och läsa om alla på en gång, så kommer vi endast att diskutera CI här. Kanske, jag kommer att täcka CD i ett framtida inlägg. 😉

Innehållsförteckning:

  • Vad är CI?
  • Varför CI bör användas överallt
  • Inga ursäkter, använda CI
  • Vilka problem har CI lösa?
  • Rekommenderas CI-verktyg
  • Hög nivå CI setup
  • Sammanfattning

Vad är CI?

Kontinuerlig Integration, som jag förstår det, är ett mönster av programmering kombinera testning, säkerhetskontroller, och utveckling av metoder för att säkert driva kod från en utveckling filial till produktion redo gren kontinuerligt.

Microsoft Word är ett exempel på CI. Ord som skrivs in i programmet och kontrolleras stavning och grammatik algoritmer för att hävda att en handling är allmän läsbarhet och stavning.

Varför CI bör användas överallt

Vi har redan berört detta lite, men den största nyttan av CI som jag ser är att det sparar en hel del pengar genom att göra ingenjörer mer produktiva. Specifikt, det ger snabbare återkopplingar, enklare integration, och det minskar flaskhalsarna. Direkt korrelera CI företaget besparingar är svårt eftersom SaaS kostnader skala som användaren bas för förändringar. Så, om en utvecklare vill sälja CI-verksamheten, i formeln nedan kan utnyttjas. Nyfiken bara på hur mycket man kan spara? Min vän, David Inoa, skapat följande demo för att hjälpa till att beräkna besparingarna.

Se Pennan Continuous Integration (CI) Företag Kostnadsbesparingar Estimator av David (@davidinoa) på CodePen.

Vad som verkligen väcker nog att skrika till toppen av hustaken är hur CI kan gynna dig och mig som utvecklare!

Till att börja med CI kommer att spara tid. Hur mycket? Vi pratar timmar per vecka. Hur? Åh, jag vill berätta för dig! CI automatiskt testar din kod och gör att du vet om det är okej att vara ihop i en gren, som går till produktion. Den mängd tid som du skulle spendera testa din kod och samarbeta med andra för att få en kod redo för produktion är en mycket tid.

Sedan finns det sätt att det hjälper till att förhindra kod trötthet. Det sport verktyg som Greenkeeper, som automatiskt kan ställa in upp — och även slå ihop — dra begär efter en granskning av kod. Detta håller kod up-to-date och gör det möjligt för utvecklare att fokusera på vad vi verkligen behöver göra. Du vet, som att skriva kod eller leva livet. Kod uppdateringar inom paket oftast bara behöver ses över för större version uppdateringar, så det finns mindre behov av att spåra varje mindre förändring för att bryta förändringar som kräver åtgärder.

CI tar en hel del av gissningsleken för uppdatering av de beroenden som annars skulle ta mycket forskning och tester.

Inga ursäkter, använda CI!

När man talar till utvecklare, samtalet oftast vindar upp något i stil med:

“Jag skulle använda CI, men…[insert ursäkt].”

För mig, som är en polis! CI kan vara gratis. Det kan också vara lätt. Det är sant att nyttan av CI komma med vissa kostnader, bland annat månatliga avgifter för verktyg som CircleCI eller Greenkeeper. Men det är en droppe i hinken med långsiktiga besparingar som den innehåller. Det är också sant att det kommer att ta tid att ställa upp saker och ting. Men det är värt att ropa ut att kraften i CI kan användas gratis på open source-projekt. Om du behöver eller vill ha för att hålla din kod privat och inte vill betala för CI-verktyg, så att du verkligen kan bygga din egen CI setup med ett fåtal stora npm-paket.

Så, nog med ursäkter och se kraften i CI!

Vilka problem har CI lösa?

Innan gräva i mycket längre, vi bör omfatta användningen fall för CI. Det löser en hel del problem och är praktiskt i många situationer:

  • När fler än en utvecklare vill slå samman till en produktion gren på en gång
  • När misstag är inte fångas eller inte kan fastställas före utbyggnad
  • När beroenden är av datum
  • När utvecklare har att vänta en längre tid för att koppla kod
  • När paket är beroende av andra paket
  • När ett paket är uppdaterad och måste ändras i flera rum
CI tester uppdateringar och förhindrar fel från att vara utplacerade.

Rekommenderas CI-verktyg

Låt oss titta på hög nivå delar som används för att skapa en CI återkoppling med några snabba kod bitar för att få CI setup för någon open source-projekt idag. Vi ska bryta ner det i lättsmält bitar.

Dokumentation

För att få CI fungerar för mig direkt, jag brukar ställa in CI upp för att testa min första dokumentation för projektet. Specifikt, jag använder MarkdownLint och Skriva Bra eftersom de erbjuder alla de funktioner jag behöver för att skriva tester för denna del av projektet.

Den stora nyheten är att GitHub erbjuder standard mallar och det finns en hel del material som kan kopieras för att få dokumentation setup snabbt. Läs mer om att snabbt ställa upp dokumentation och skapa en dokumentation feedback-loop.

Jag håller ett paket.json-fil i roten av projektet och köra ett skript kommando som det här:

“grammatik”: “skriva-bra *.md –no-passiv”,
“markdownlint”: “markdownlint *.md”

De två linjer som tillåter mig att börja använda CI. Det är det! Jag kan nu köra CI för att testa grammatik.

Vid denna punkt, jag kan gå vidare till att ställa upp CircleCI och Greenkeeper för att hjälpa mig att se till att paket som är aktuell. Vi återkommer till det i bara en bit.

Enhetstestning

Enhetstester är en metod för att testa små block (enheter) av koden för att säkerställa att den förväntade beteende av blocket fungerar som avsett.

Enhetstester ge en hel del hjälp med CI. De definierar koden kvalitet och utvecklare att ge feedback utan att behöva trycka/sammanfoga/host-kod. Läs mer om enhetstester och snabbt ställa en enhet test feedback-loop.

Här är ett exempel på en mycket grundläggande enhet test utan att använda ett bibliotek:

const addsOne = (num) => num + 1 // Vi börjar med 1 som första värde
const numPlus1 = addsOne(3) // Funktionen för att lägga till 3
const stringNumPlus1 = addsOne(‘3’) // Lägger till två funktioner, förväntar 4 som värdet

/**
* konsolen.hävda
* https://developer.mozilla.org/en-US/docs/Web/API/console/assert
* @param test?
* @param string
* @returnerar strängen om testet misslyckas
**/

konsolen.hävda(numPlus1 === 4, ‘variabel `numPlus1″ är inte 4!’)
konsolen.hävda(stringNumPlus1 === 4, ‘variabel `stringNumPlus1″ är inte 4!’)

Över tid, det är trevligt att använda bibliotek som Skämt till enhet provningsmetod, men detta exempel ger dig en uppfattning om vad vi tittar på.

Här är ett exempel på samma test som ovan med Skämt:

const addsOne = (num) => num + 1

beskriv(‘addsOne’, () => {
det (“lägger till ett antal’, () => {
const numPlus1 = addsOne(3)
förvänta dig(numPlus1).toEqual(4)
})
det (“inte kommer att lägga en sträng’, () => {
const stringNumPlus1 = addsOne(‘3’)
förvänta dig(stringNumPlus1 === 4).toBeFalsy();
})
})

Med hjälp av Skämt, tester kan vara ansluten för CI med ett kommando i ett paket.json så här:

“test:skämt”: “skämt –täckning”,

Flaggan –täckning konfigurerar Skämt till rapport test täckning.

Säkerhetskontroller

Säkerhetskontroller hjälpa kommunicera kod och kod kvalitet. Dokumentation, dokument, mallar, linter, stavningskontroller, och typ checker är alla säkerhetskontroller. Dessa verktyg kan vara automatiserad för att köra under förbinder sig, under utveckling, under KI, eller ens i en kod-editorn.

Säkerhetskontroller faller in i mer än en kategori av CI: feedback-loop och testning. Jag har sammanställt en lista över de typer av säkerhet kollade jag brukar baka till ett projekt.

Alla dessa kontroller kan verka som ytterligare ett lager av kod abstraktion eller lärande, så att vara skonsam mot dig själv och andra om detta känns överväldigande. Dessa verktyg har hjälpt mitt eget team bridge experience luckor, definiera delbara team mönster, och hjälpa utvecklarna när de är förvirrade om vad koden gör.

  • Att begå, slå samman, kommunicerar: Verktyg som husky, commitizen, GitHub Mallar, och Changelogs hjälpa till att hålla CI kör ren kod och vara ett bra arbetsflöde för ett samverkande team miljö.
  • Definiera kod (typ pjäser): Verktyg som TypeScript-definiera och kommunicera kod gränssnitt — inte bara olika typer!
  • Fibersläpp: Detta är praxis för att se till att något matcher definierade normer och mönster. Det är en linter för nästan alla programmeringsspråk och du har förmodligen arbetat med gemensamma och kära, som ESlint (JavaScript) och Stylelint (CSS) i andra projekt.
  • Skriva och kommentera: Skriva Bra hjälper till att fånga grammatiska fel i dokumentationen. Verktyg som JSDoc, Läran, och TypeDoc hjälpa till att skriva dokumentation och lägga till användbara tips i kod-redigerare. Båda kan sammanställa till wiki dokumentation.

ESlint är ett bra exempel på hur några av dessa typer av verktyg implementeras i CI. Till exempel, detta är allt som behövs finns i paketet.json för att lint JavaScript:

“eslint”: “eslint .”

Självklart finns det många alternativ som gör det möjligt för dig att konfigurera en linter att följa dig och ditt team kodning, men du kan se hur praktiskt det kan vara att ställa upp.

Hög nivå CI setup

Få CI började för ett slutförvar ofta tar väldigt lite tid, men det finns gott om avancerade konfigurationer kan vi även komma till användning, om det behövs. Låt oss titta på en snabb installation och sedan flytta in i en mer avancerad konfiguration. Även de mest grundläggande inställning är bra för att spara tid och kod kvalitet!

Två funktioner som kan spara utvecklare timmar per vecka med enkel CI är automatisk beroende uppdateringar och bygga testning. Beroende uppdateringar skrivs om i mer detalj här.

Bygga testa hänvisar till node_modules installation under CI genom att köra en installation, till exempel, (npm install där alla node_modules installera som förväntat. Detta är en enkel uppgift och inte misslyckas. Se till att node_modules installeras som förväntas sparar mycket tid!

Snabb CI Setup

CI kan ställas in automatiskt för både CircleCI och Travis! Om ett giltigt test-kommandot är redan definierad i arkivet paket.json, då CI kan genomföras utan att någon mer konfiguration.

I en CI-verktyg, som CircleCI eller Travis, förvaret kan sökas efter inloggning eller autentisering. Från det, följ CI-verktyg: s UI för att börja testa.

För JavaScript, CircleCI kommer att titta på test inom ett slutförvar paket.json för att se om ett giltigt test skriptet till. Om det är, då CircleCI kommer att börja köra CI automatiskt! Läs mer om att ställa upp CircleCI automatiskt här.

Avancerade konfigurationer

Om enhetstester är oavslutade, eller om en mer konfiguration behövs .yml fil kan läggas till för en CI-verktyg (som CircleCI) där utföra löpare skript är gjorda.

Nedan är hur man ställer upp en egen CircleCI konfiguration med JavaScript fibersläpp (igen, med hjälp av ESlint som ett exempel) för en CircleCI.

Först ut, kör det här kommandot:

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

Lägg sedan till följande genererat filen:

standardinställningar: &defaults
working_directory: ~/code
docker:
– bild: circleci/nod:10
miljö:
NPM_CONFIG_LOGLEVEL: fel # npm kommandon mindre bullriga
SYSSELSÄTTNING: max <h3>https://gist.github.com/ralphtheninja/f7c45bdee00784b41fed
version: 2
sysselsättning:
bygga:
<<: *standardinställningar
steg:
– kassan
– kör: npm jag
– kör: npm köra eslint:ci

När dessa steg är genomförda och efter CircleCI har konfigurerats i GitHub (mer om det här), CircleCI kommer att plocka upp .circleci/config.yml och ludd JavaScript i en CI-process när en pull begäran lämnas in.

Jag skapade en mapp med exempel i detta demo förvaret för att visa idéer för att konfigurera CI med config.yml filer och du kan referera till det för ditt eget projekt eller använder filer som utgångspunkt.

Det är mer att CI-verktyg som kan ställas in för att hjälpa till att rädda utvecklarna mer tid, som automatisk sammanslagning, auto-uppdatering, övervakning och mycket mer!

Sammanfattning

Vi täckt en hel del här! För att sammanfatta saker, ställa upp CI är mycket genomförbart och kan till och med vara gratis för kostnad. Med ytterligare verktyg (både betalda och öppen källkod), vi kan få mer tid till koden, och mer tid att skriva mer tester för CI — eller njuta av mer liv bort från skärmen!

Här är några demo-arkiv för att hjälpa utvecklare att få setup snabbt eller lära sig. Tveka inte att nå ut inom arkiv med frågor, idéer eller förbättringar.

  • Utvecklare CI Fördelar Arkiv
  • Utvecklare CI Fördelar Demo
  • Utvecklare CI Fördelar Demo Beroende
  • Jonathan Ong s CI Verkstad