Continuous Integration: Het Wat, Waarom en Hoe

0
24

Niet lang geleden, had ik een beginner kennis van Continuous Integration (CI) en dacht dat het leek als een extra proces dat zorgt ervoor dat de technici doen meer werk in al grote projecten. Mijn team begonnen met het implementeren van CI in projecten en, na enige hands-on ervaring, besefte ik dat zijn grote voordelen, niet alleen voor het bedrijf, maar voor mij is een ingenieur! In deze post zal ik beschrijven CI, de voordelen die ik heb ontdekt, en hoe het te implementeren gratis en snel.

CI en Continuous Delivery (CD) zijn meestal met elkaar besproken. Schrijven over beide CI en CD binnen een post is een veel te schrijven en te lezen over alle tegelijk, zodat we slechts bespreken CI hier. Misschien, ik zal betrekking hebben op CD in een toekomstige functie. 😉

Inhoud:

  • Wat is een CI?
  • Waarom CI mag overal gebruikt worden
  • Geen excuses, gebruik van CI
  • Welke problemen worden opgelost met CI op te lossen?
  • Aanbevolen CI tools
  • Hoog niveau CI setup
  • Samenvatting

Wat is een CI?

Continuous Integration, als ik het goed begrijp, is een patroon van de programmering van het combineren van testen, veiligheid controles en de ontwikkeling van werkwijzen om vol vertrouwen te duwen code van een ontwikkeling naar productie klaar tak continu.

Microsoft Word is een voorbeeld van een CI. Woorden zijn geschreven in het programma en gecontroleerd op spelling en grammatica algoritmen te doen gelden op een document van de algemene leesbaarheid en spelling.

Waarom CI mag overal gebruikt worden

We hebben het al gehad over deze een beetje, maar het grootste voordeel van de CI dat ik zie, is dat het bespaart een hoop geld door het maken van de technici productiever. Het biedt, met name sneller feedback loops, eenvoudigere integratie, en het vermindert knelpunten. Direct gecorreleerd CI bedrijf besparingen is moeilijk omdat SaaS-kosten schaal als de user base veranderingen. Dus als een ontwikkelaar wil verkopen CI aan de business van de onderstaande formule kan worden gebruikt. Benieuwd hoeveel het kan opslaan? Mijn vriend, David Inoa, de volgende demo om te helpen bij het berekenen van de besparingen.

Zie de Pen Continuous Integration (CI) Bedrijf Kostenbesparingen Schatter door David (@davidinoa) op CodePen.

Wat echt boeit genoeg om te schreeuwen naar de top van de daken is hoe CI kunnen profiteren u en mij als ontwikkelaars!

Voor starters, CI zal u tijd te besparen. Hoeveel? We praten uren per week. Hoe? Oh, ik wil je vertellen! CI automatisch testen van je code en laat je weten of het goed is om te worden samengevoegd in een branche, die gaat naar de productie. De hoeveelheid tijd die u kwijt zou het testen van je code en het samenwerken met anderen om code klaar voor productie is een hoop tijd.

Dan is er de manier helpt bij het voorkomen van code vermoeidheid. Het sport-tools als Greenkeeper, die automatisch kan instellen en zelfs samenvoegen — trek aanvragen volgende code review. Dit houdt de code up-to-date en stelt ontwikkelaars in staat om te focussen op wat we echt moeten doen. Je weet wel, zoals het schrijven van code, of het leven. Code updates binnen pakketten meestal alleen moeten worden onderzocht voor de grote versie updates, zodat er minder hoeft te houden bij elke kleine introductie voor het breken van veranderingen die vragen om actie.

CI neemt veel van het giswerk uit van het bijwerken van afhankelijkheden die anders zou veel onderzoek en testen.

Geen excuses, gebruik CI!

Bij het praten met de ontwikkelaars, het gesprek meestal wind iets als:

“Ik zou gebruik maken van CI, maar…[insert excuus].”

Voor mij is dat een cop-out! CI vrij kan zijn. Het kan ook makkelijk zijn. Het is waar dat de voordelen van CI komen met een aantal kosten, waaronder de maandelijkse kosten voor hulpmiddelen zoals CircleCI of Greenkeeper. Maar dat is een druppel in de emmer met de besparingen op lange termijn biedt. Het is ook waar dat het tijd zal nemen om de zaken te stellen. Maar het is de moeite waard en roept dat de kracht van de CI kan gratis gebruikt worden op open source projecten. Als je moet of wil je je eigen code en niet wilt betalen voor CI gereedschap, dan ben je echt kunt bouwen uw eigen CI-setup met een paar grote npm-pakketten.

Zo, genoeg met de excuses en zie de kracht van de CI!

Welke problemen worden opgelost met CI op te lossen?

Vóór het graven in veel verder, we moeten van toepassing op het gebruik van de gevallen voor CI. Het lost een hoop problemen op en is handig in veel situaties:

  • Als er meer dan één ontwikkelaar wil samenvoegen in een productie-tak in een keer
  • Als er fouten zijn niet gevangen wordt of kan worden vastgesteld vóór implementatie
  • Wanneer er afhankelijkheden zijn verouderd
  • Wanneer ontwikkelaars moeten wachten langere tijd samen te voegen code
  • Wanneer pakketten zijn afhankelijk van andere pakketten
  • Als een pakket wordt bijgewerkt en dient veranderd te worden in plaats van meerdere
CI tests updates en voorkomt fouten worden ingezet.

Aanbevolen CI tools

Laten we eens kijken naar het hoge niveau van de onderdelen gebruikt voor het maken van een CI-feedback lus met een aantal snelle code bits te krijgen CI-installatie voor een open source project van vandaag. We breken in hapklare brokken.

Documentatie

Om CI werkt voor mij goed, dat ik meestal CI up-to-test mijn eerste documentatie voor een project. Specifiek, ik gebruik MarkdownLint en Schrijven van een Goed, omdat ze zorgen voor alle functies en functionaliteit die ik nodig heb om te schrijven tests voor dit deel van het project.

Het goede nieuws is dat GitHub biedt standaard sjablonen en er is veel materiaal dat kan worden gekopieerd te krijgen documentatie setup snel. Lees meer over het snel instellen van documentatie en het maken van een documentatie-feedback-loop.

Ik blijf het een pakket.json-bestand in de hoofdmap van het project en het uitvoeren van een script opdracht als deze:

“grammatica”: “schrijf-goed *.md –no-passieve”,
“markdownlint”: “markdownlint *.md”

Die twee lijnen laat me om te beginnen met CI. Dat is het! Ik kan nu CI om te testen grammatica.

Op dit punt, ik kan verplaatsen naar het opzetten van CircleCI en Greenkeeper om me te helpen ervoor zorgen dat de pakketten zijn up-to-date. We krijgen om dat in slechts een beetje.

Unit testen

Unit tests zijn een methode voor het testen van kleine blokken (eenheden) van de code om ervoor te zorgen dat het verwachte gedrag van dat blok werkt zoals bedoeld.

Unit tests geven een veel helpen met CI. Zij definiëren code kwaliteit en bieden ontwikkelaars met feedback zonder te duwen/samenvoegen/host-code. Lees meer over unit tests en snel instellen van een unit test feedback loop.

Hier is een voorbeeld van een zeer basic unit test zonder het gebruik van een bibliotheek:

const addsOne = (num) => num + 1 // We beginnen met 1 als een initiële waarde
const numPlus1 = addsOne(3) // Functie om toe te voegen 3
const stringNumPlus1 = addsOne(‘3’) // Voeg de twee functies, te verwachten 4 als de waarde

/**
* console.assert
* https://developer.mozilla.org/en-US/docs/Web/API/console/assert
* @param test?
* @param string
* @retourneert de string als de test mislukt
**/

console.assert(numPlus1 === 4, ‘De variabele `numPlus1` is niet 4!’)
console.assert(stringNumPlus1 === 4, ‘De variabele `stringNumPlus1` is niet 4!’)

Na verloop van tijd, het is leuk om te gebruiken bibliotheken als Grap unit test code, maar dit voorbeeld geeft je een idee van wat we zien.

Hier is een voorbeeld van dezelfde test met de Grap:

const addsOne = (num) => num + 1

beschrijven(‘addsOne’, () => {
het(‘voegt een nummer’, () => {
const numPlus1 = addsOne(3)
verwacht(numPlus1).toEqual(4)
})
(‘zal niet een tekenreeks toevoegen’, () => {
const stringNumPlus1 = addsOne(‘3’)
verwacht(stringNumPlus1 === 4).toBeFalsy();
})
})

Met behulp van de Grap, tests kan worden aangesloten voor CI met een opdracht in een pakket.json, zoals deze:

“test:de grap”: “grap –dekking”,

De vlag –dekking configureert de Grap te melden test dekking.

Veiligheid controles

Veiligheid controleert de communicatie over de code en code kwaliteit. Documentatie, document templates, linter, spellingcontrole, en type-checker zijn alle veiligheidscontroles. Deze tools kunnen worden geautomatiseerd uitgevoerd tijdens verbindt, in ontwikkeling, tijdens CI, of zelfs in een code-editor.

Veiligheid controles vallen in meer dan één categorie van CI: feedback-lus en testen. Ik heb een lijst samengesteld van de soorten van veiligheid gecontroleerd ik meestal te bakken in een project.

Al deze controles kan het lijken of een andere laag van code abstractie of het leren, dus wees zacht voor jezelf en anderen als dit voelt overweldigend. Deze tools hebben geholpen mijn eigen team brug ervaring gaten, definiëren deelbaar team patronen, en ontwikkelaars helpen wanneer ze in de war over wat de code doet.

  • Het plegen van, het samenvoegen van communiceren: Tools, zoals een husky, commitizen, GitHub-Sjablonen, en Changelogs helpen houden CI uitgevoerd schone code en vormen een mooie workflow voor een gezamenlijk team milieu.
  • Het definiëren van code (soort controle): Tools zoals de Schrijfmachine te definiëren en te communiceren code interfaces — niet alleen typen!
  • Pluizen: Dit is de praktijk van ervoor te zorgen dat er iets wedstrijden omschreven normen en patronen. Er is een linter voor bijna alle programmeertalen en je hebt waarschijnlijk wel gewerkt met een gemeenschappelijk zijn, zoals ESlint (JavaScript) en Stylelint (CSS) in andere projecten.
  • Het schrijven en commentaar: Schrijven van een Goed helpt bij het vangen grammatica fouten in documentatie. Tools zoals JSDoc, Leer, en TypeDoc helpen bij het schrijven van documentatie en het toevoegen van nuttige tips in code-editors. Beide kunnen compileren in markdown documentatie.

ESlint is een goed voorbeeld voor hoe een van deze typen instrumenten worden geïmplementeerd in de CI. Dit is bijvoorbeeld nodig in het pakket.json te pluizen JavaScript:

“eslint”: “eslint .”

Natuurlijk, er zijn vele opties waarmee u de configuratie van een linter om te voldoen aan u en uw team coding standards, maar je kunt zien hoe praktisch kan worden ingesteld.

Hoog niveau CI setup

Aan de CI gestart voor een gegevensopslagruimte vaak kost weinig tijd, maar er zijn tal van geavanceerde configuraties kunnen we ook gebruiken, als dat nodig is. Laten we eens kijken naar een snelle setup en vervolgens verplaatsen naar een meer geavanceerde configuratie. Zelfs de meest basic setup is goed voor een besparing van tijd en code kwaliteit!

Twee functies die kunnen besparen ontwikkelaars uur per week, met eenvoudige CI zijn automatische afhankelijkheid updates en bouwen testen. Afhankelijkheid updates over geschreven in meer detail hier.

Bouwen, testen verwijst naar node_modules installatie gedurende de CI door het uitvoeren van een installatie, bijvoorbeeld (npm installeren waar alle node_modules installeren zoals verwacht. Dit is een eenvoudige taak en doet mislukken. Ervoor te zorgen dat node_modules installeert zoals verwacht bespaart u veel tijd!

Snelle CI Setup

CI kan worden ingesteld op automatisch voor zowel CircleCI en Travis! Als een geldige test commando is al gedefinieerd in het archief pakket.json, dan CI kan worden uitgevoerd zonder extra configuratie.

In een CI-gereedschap, zoals CircleCI of Travis, het archief gezocht kan worden voor na het inloggen of verificatie. Vanaf daar volgt u de CI hulpprogramma ‘ s UI te testen.

Voor JavaScript, CircleCI zal kijken naar de test binnen een archief pakket.json te zien als een geldige test script is toegevoegd. Als dat zo is, dan CircleCI gaan lopen CI automatisch! Lees meer over het instellen van CircleCI automatisch hier.

Geavanceerde configuraties

Als de unit tests zijn niet voltooid, of als een extra configuratie nodig is, een .yml bestand kan worden toegevoegd voor een CI-tool (zoals CircleCI) waar de execute-runner scripts zijn gemaakt.

Hieronder wordt beschreven hoe u een aangepaste CircleCI configuratie met JavaScript-pluizende (opnieuw, met ESlint als voorbeeld) voor een CircleCI.

Ten eerste, voer je dit commando uit:

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

Voeg vervolgens de volgende gegenereerde bestand:

defaults: &standaard
working_directory: ~/code
docker:
– afbeelding: circleci/node:10
omgeving:
NPM_CONFIG_LOGLEVEL: error # maken npm commando ‘ s minder lawaai
TAKEN: max <h3>https://gist.github.com/ralphtheninja/f7c45bdee00784b41fed
versie: 2
taken:
bouwen:
<<: *standaard
stappen:
– checkout
– uitvoeren: npm ik
– uitvoeren: npm uitvoeren eslint:ci

Na deze stappen zijn voltooid en na CircleCI is geconfigureerd in GitHub (meer daarover hier), CircleCI zal halen .circleci/config.yml en lint JavaScript in een CI-proces als een pull verzoek is ingediend.

Ik heb een map met voorbeelden in deze demo-gegevensopslagruimte naar ideeën voor het configureren van CI met config.yml filesand u als referentie kunt gebruiken voor uw eigen project of de bestanden gebruiken als een uitgangspunt.

Het zijn meer zelfs meer CI tools die kunnen worden ingesteld om te helpen bij het besparen van ontwikkelaars meer tijd, zoals de auto-samenvoegen -, auto-updaten -, monitoring -, en nog veel meer!

Samenvatting

We vallen hier veel! Resumerend, het opzetten van de CI is zeer goed te doen en kan zelfs vrij van kosten. Met extra gereedschappen (zowel betaald en open source), kunnen we meer tijd hebben om te code, en meer tijd om te schrijven meer tests voor de CI — of meer op het leven weg van het scherm!

Hier zijn een aantal demo repositories om ontwikkelaars te helpen setup snel of te leren. Gelieve te voelen vrij om te bereiken binnen de repositories met vragen, ideeën en / of verbeteringen.

  • Ontwikkelaar CI Voordelen Archief
  • Ontwikkelaar CI Voordelen Demo
  • Ontwikkelaar CI Voordelen Demo Afhankelijk
  • Jonathan Ong ‘ s CI Workshop