Continuous Integration: Das Was, Warum und Wie

0
21

Nicht lange her, hatte ich ein Neuling Verständnis von Continuous Integration (CI) und dachte, es schien wie ein extra-Prozess, die Kräfte der Ingenieure zu tun, zusätzliche Arbeit auf, die bereits große Projekte. Mein team umzusetzen begann CI in Projekte und, nachdem einige hands-on-Erfahrung, erkannte ich seine große Vorteile, nicht nur für das Unternehmen, aber für mich ist ein Ingenieur! In diesem post werde ich beschreiben CI, die Vorteile, die ich entdeckt habe, und wie es zu implementieren, kostenlos und schnell.

CI und Continuous Delivery (CD) sind in der Regel gemeinsam besprochen. Schreiben über CI-und CD-in einem Beitrag ist viel zu schreiben und zu Lesen über alle auf einmal, so werden wir hier nur diskutieren CI hier. Vielleicht, ich werde cover CD in einem zukünftigen post. 😉

Inhaltsverzeichnis:

  • Was ist CI?
  • Warum CI sollte überall eingesetzt werden
  • Keine Ausreden, verwenden Sie CI
  • Welche Probleme gibt es mit CI lösen?
  • Empfohlene CI-tools
  • Hohe CI-setup
  • Zusammenfassung

Was ist CI?

Continuous Integration, so wie ich es verstehe, ist ein Muster der Programmierung, die Kombination von Tests, Sicherheitsprüfungen und-Entwicklung Praktiken, selbstbewusst push-code von einem Zweig der Produktion bereit Zweig kontinuierlich aus.

Microsoft Word ist ein Beispiel von CI. Worte, die geschrieben sind in das Programm und überprüft Rechtschreibung und Grammatik-algorithmen, die zur Geltendmachung eines Dokuments, Allgemeine Lesbarkeit und Rechtschreibung.

Warum CI sollte überall eingesetzt werden

Wir haben bereits berührt von diesem etwas, aber der größte Vorteil von CI, die ich sehe, ist, dass es spart viel Geld, macht Ingenieure produktiver. Konkret, es stellt schnellere feedback-Schleifen, einfacher integration und reduziert Engpässe. Direkt der Korrelation von CI-Unternehmen Einsparungen ist schwer, da SaaS-Kosten-Skala sowie der Nutzer-Basis verpasst. Also, wenn ein Entwickler verkaufen will CI für das Unternehmen, die Formel unten benutzt werden können. Neugierig, wie viel Sie sparen können? Mein Freund, David Inoa, erstellt die folgende demo zur Berechnung der Einsparungen.

Finden Sie den Stift Continuous Integration (CI) Unternehmen Kosteneinsparungen Estimator von David (@davidinoa) auf CodePen.

Was wirklich begeistert, genug zu Schreien, um die Spitze der Dächer ist, wie CI profitieren können, Sie und mich als die Entwickler!

Für den Anfang, CI, sparen Sie Zeit. Wie viel? Wir reden hier von Stunden pro Woche. Wie? Oh, will ich Ihnen sagen! CI automatisch tests Ihres Codes und lässt Sie wissen, wenn es okay ist zu sein verschmolzen in einen Zweig, der geht in die Produktion. Die Zeit, die Sie verbringen würde testen Ihren code und die Arbeit mit anderen zu bekommen, code für die Produktion bereit ist eine Menge Zeit.

Dann gibt es den Weg, es hilft zu verhindern, dass code die Müdigkeit. Sport-tools wie Green Keeper, die automatisch eingerichtet — und sogar Zusammenführen — pull-Anfragen nach einem code-review. Dieser code hält up-to-date und erlaubt es Entwicklern, sich auf das, was wir wirklich tun müssen. Wissen Sie, wie Sie code schreiben oder Leben. Code-updates in den Paketen in der Regel nur überprüft werden müssen für größere versions-updates, so gibt es weniger Notwendigkeit zu verfolgen, jedes minor-release für aktuelle änderungen, die Maßnahmen erfordern.

CI nimmt viel von dem Rätselraten bei der Aktualisierung von Abhängigkeiten, sonst würde eine Menge Forschung und Tests.

Keine Ausreden, verwenden Sie CI!

Beim Gespräch mit den Entwicklern, das Gespräch in der Regel windet sich etwas wie:

“Ich würde CI aber…[insert Ausrede].”

Für mich ist das eine faule Ausrede! CI kann frei sein. Es kann auch einfach sein. Es ist wahr, dass die Vorteile von CI kommen mit einigen Kosten, einschließlich der monatlichen Gebühren für Extras wie CircleCI oder Green Keeper. Aber das ist ein Tropfen in den Eimer mit den langfristigen Einsparungen, die es bietet. Es ist auch wahr, dass es Zeit braucht, um Dinge up. Aber es lohnt sich, den Aufruf heraus, dass die macht von CI verwendet werden kann kostenlos auf open-source-Projekte. Wenn Sie benötigen oder möchten, dass Ihr code private und nicht wollen, zahlen für CI-tools, dann kann man wirklich bauen Sie sich Ihren eigenen CI-setup mit ein paar tollen npm-Pakete.

So, genug mit den Ausreden, und siehe, die macht des CI!

Welche Probleme gibt es mit CI lösen?

Vor dem Graben in viel weiter, wir soll Abdeckung der use cases für die CI. Es löst eine Menge Probleme und kommt in handliches in vielen Situationen:

  • Wenn mehr als ein Entwickler will merge in eine Produktions-Niederlassung auf einmal
  • Wenn der Fehler nicht abgefangen werden oder nicht behoben werden kann, vor der Bereitstellung
  • Wenn Abhängigkeiten sind out-of-date
  • Wenn die Entwickler zu warten längere Zeit zum Zusammenführen von code
  • Wenn Pakete sind abhängig von anderen Paketen
  • Wenn ein Paket aktualisiert wird, und muss geändert werden in mehreren Ort
CI-tests von updates und verhindert, dass Fehler bereitgestellt wird.

Empfohlene CI-tools

Schauen wir uns die high-level-Teile, die verwendet werden zum erstellen einer CI-feedback-Schleife mit einigen schnellen code-bits zu erhalten, CI-setup für jede open-source-Projekt bis heute. Wir werden diese brechen es in kleine Stücke.

Dokumentation

Um CI, die für mich richtigen Weg, ich in der Regel CI-bis zu testen, meine erste Dokumentation für ein Projekt. Speziell, ich benutze MarkdownLint und Schreiben Sie Gut, weil Sie alle Merkmale und Funktionen, die ich brauche zum schreiben von tests für diesen Teil des Projekts.

Die gute Nachricht ist, dass GitHub bietet standard-Vorlagen, und es gibt eine Menge Inhalte, die kopiert werden können, eine Dokumentation setup schnell. Lesen Sie mehr über den schnellen Aufbau einer Dokumentation und erstellen einer Dokumentation feedback-Schleife.

Ich habe immer ein Paket.json-Datei im Stammordner des Projekts, und führen Sie einen Skript-Befehl wie diesen:

“Grammatik”: “schreiben-gut *.md –no-passive”,
“markdownlint”: “markdownlint *.md”

Diese beiden Linien lassen Sie mich beginnen mit CI. Das ist es! Ich kann jetzt ausgeführt CI zu testen, Grammatik.

An dieser Stelle kann ich bewegen auf die Einrichtung CircleCI und Green Keeper, mir zu helfen, stellen Sie sicher, dass die Pakete aktuell sind. Wir kommen in nur ein bisschen.

Unit-Tests

Unit-tests sind eine Methode für das testen von kleinen Blöcken (Einheiten) von code, um sicherzustellen, dass das erwartete Verhalten dieser block funktioniert wie vorgesehen.

Unit-tests bieten eine Menge Hilfe mit CI. Sie definieren die code-Qualität und bieten Entwicklern mit feedback ohne push – /merge – /host-code. Lesen Sie mehr über unit-tests und schnell einstellen eines unit-test-feedback-Schleife.

Hier ist ein Beispiel für eine sehr einfache unit-test ohne Verwendung einer Bibliothek:

const addsOne = (num) => num + 1 // Wir beginnen mit 1 als Startwert
const numPlus1 = addsOne(3) // Funktion zum hinzufügen von 3
const stringNumPlus1 = addsOne(‘3’) // Fügen Sie die beiden Funktionen, erwarten 4 als Wert

/**
* Konsole.geltend machen
* https://developer.mozilla.org/en-US/docs/Web/API/console/assert
* @param test?
* @param string
* @returns string, falls der test fehlschlägt
**/

console.assert(numPlus1 === 4 ‘Die variable `numPlus1` ist nicht 4!’)
console.assert(stringNumPlus1 === 4 ‘Die variable `stringNumPlus1` ist nicht 4!’)

Im Laufe der Zeit, es ist schön zu verwenden, – Bibliotheken wie den Scherz zu unit-test-code, aber dieses Beispiel gibt Ihnen eine Vorstellung von dem, was wir suchen.

Hier ist ein Beispiel des gleichen Tests über die Verwendung Scherz:

const addsOne = (num) => num + 1

beschreiben(‘addsOne’, () => {
es(‘fügt eine Zahl”, () = > {
const numPlus1 = addsOne(3)
erwarten(numPlus1).toEqual(4)
})
(“wird nicht fügen Sie eine Zeichenfolge’, () => {
const stringNumPlus1 = addsOne(‘3’)
erwarten(stringNumPlus1 === 4).toBeFalsy();
})
})

Mit Scherz, tests angeschlossen werden kann, für CI mit einem Befehl in einem Paket.json wie diese:

“test:jest”: “jest –coverage”,

Das flag –Abdeckung konfiguriert Scherz zu berichten Testabdeckung.

Sicherheits-checks

Sicherheits-checks helfen bei der Kommunikation von code und code-Qualität. Dokumentation, Dokument Vorlagen, linter, spell checker, und geben Sie checker sind alle Sicherheits-checks. Diese tools werden automatisiert ausführen, während begeht, in der Entwicklung, während CI, oder auch in einem code-editor.

Sicherheits-checks, fallen in mehr als eine Kategorie CI: feedback-Schleife und testen. Ich habe eine Liste erstellt, die Typen von der Sicherheit überprüft, die ich in der Regel Backen in ein Projekt.

Alle diese Prüfungen können scheinen, wie eine weitere Schicht von code, der Abstraktion oder lernen, die so sanft sein auf sich selbst und andere, wenn dies fühlt sich überwältigend. Diese tools haben geholfen, mein eigenes team bridge Erfahrung Lücken, definieren gemeinsam nutzbare team-Muster und unterstützen die Entwickler, wenn Sie verwirrt sind über das, was Ihr code tut.

  • Begehen, Zusammenführen, Kommunikation: Tools wie husky, commitizen, GitHub Vorlagen und Changelogs helfen, CI-laufen clean code und bilden einen schönen workflow für eine kooperative team-Umgebung.
  • Definition von code (type checker): Tools wie TypeScript definieren und zu kommunizieren-code Schnittstellen — nicht nur Arten!
  • Linting: das ist die Praxis, sicherzustellen, dass so etwas entspricht den vorgegebenen Normen und Muster. Es gibt eine linter für nahezu alle Programmiersprachen und wahrscheinlich haben Sie arbeitete mit Allgemeinen, wie ESlint (JavaScript) und Stylelint (CSS), die in anderen Projekten.
  • Schreiben und kommentieren: Schreibt Gute hilft fangen Grammatik-Fehler in der Dokumentation. Tools wie JSDoc, Lehre und TypeDoc unterstützen, die in eine Dokumentation zu schreiben, und fügen Sie nützliche Hinweise, die Sie in code-Editoren. Beide kompilieren können in markdown-Dokumentation.

ESlint ist ein gutes Beispiel dafür, wie jede dieser Arten von tools implementiert sind, in CI. Dies ist zum Beispiel nötig, im Paket.json, JavaScript lint:

“eslint”: “eslint .”

Offensichtlich gibt es viele Optionen, die Sie konfigurieren eine linter zu entsprechen, die Sie und Ihr team coding-standards, aber Sie können sehen, wie praktisch es sein kann, eingerichtet.

Hohe CI-setup

Erste CI-Schritte für ein repository dauert oft sehr wenig Zeit, doch es gibt auch viele erweiterte Konfigurationen können wir Ihnen auch zu verwenden, wenn nötig. Schauen wir uns eine quick-setup und dann in eine erweiterte Konfiguration. Sogar die meisten basic-setup ist nützlich für die Einsparung von Zeit und code-Qualität!

Zwei Funktionen, die sparen können Entwickler Stunden pro Woche mit einfachen CI sind automatische dependency-updates und bauen testen. Dependency-updates geschrieben werden, im detail hier.

Bauen Sie die Prüfung bezieht sich auf node_modules-installation während des CI durch ausführen einer Installation — Z. B. (npm installieren, wo alle node_modules installiert, wie erwartet. Dies ist eine einfache Aufgabe nicht. Sicherstellen, dass node_modules installiert, wie erwartet, spart viel Zeit!

Schnelle CI-Setup

CI kann setup automatisch für beide CircleCI und Travis! Wenn ein gültiges test-Befehl ist bereits in der repository-Paket.json, dann CI umgesetzt werden können, ohne jede weitere Konfiguration.

In ein CI-tool, wie CircleCI oder Travis, das repository durchsucht werden kann nach der Anmeldung oder Authentifizierung. Von dort Folgen Sie der CI-tool für die UI Tests beginnen.

Für JavaScript, CircleCI schauen sich den test innerhalb einer repository-Paket.json um zu sehen, ob ein gültiges test-script Hinzugefügt. Wenn es so ist, dann CircleCI beginnt die CI automatisch! Lesen Sie mehr über die Einrichtung CircleCI hier automatisch.

Erweiterte Konfigurationen

Wenn unit-tests sind unvollendet, oder wenn eine weitere Konfiguration nötig ist, ein .yml-Datei Hinzugefügt werden können, für eine CI-tool (wie CircleCI), wo die execute-runner-Skripte gemacht werden.

Nachfolgend ist die Vorgehensweise zum einrichten eines benutzerdefinierten CircleCI Konfiguration mit JavaScript linting (wieder mit ESlint als Beispiel) für eine CircleCI.

First off, führen Sie diesen Befehl:

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

Dann fügen Sie die folgenden generierten Datei:

Standardwerte: &defaults
working_directory: ~/code
Andockfenster:
– Bild: circleci/node:10
Umgebung:
NPM_CONFIG_LOGLEVEL: Fehler # make npm-Befehle weniger laut
ARBEITSPLÄTZE: max <h3>https://gist.github.com/ralphtheninja/f7c45bdee00784b41fed
version: 2
jobs:
bauen:
<<: *defaults
Schritte:
– Kasse
– Ausführung: npm i
– Ausführung: npm führen eslint:ci

Nachdem diese Schritte abgeschlossen sind und nach CircleCI konfiguriert wurde in GitHub (mehr dazu hier), CircleCI abholen .circleci/config.yml und Fusseln von JavaScript in einem CI-Prozess, wenn ein pull-request eingereicht wird.

Ich erstellt einen Ordner mit Beispielen, die in dieser demo-repository, um zu zeigen, Ideen für die Konfiguration der CI mit config.yml filesand Sie verweisen können es für Ihr eigenes Projekt oder die Dateien, die Sie als Ausgangspunkt.

Die sind mehr noch mehr CI-tools, können eingerichtet werden, um den Entwicklern mehr Zeit, wie das automatische Zusammenführen, auto-Aktualisierung, überwachung und vieles mehr!

Zusammenfassung

Wir fallen eine Menge hier! Um es zusammenzufassen, einrichten CI machbar ist, und sogar kostenlos. Zusätzliche Werkzeuge (sowohl bezahlte als auch open-source), können wir mehr Zeit haben, code und mehr Zeit, mehr zu schreiben tests für CI — oder Sie genießen mehr das Leben abseits vom Bildschirm!

Hier sind einige demo-Repositorys, um Entwicklern zu helfen, bekommen Sie setup schnell oder zu lernen. Bitte fühlen Sie sich frei zu erreichen, innerhalb des repositories mit Fragen, Ideen oder Verbesserungen.

  • Entwickler CI Vorteile Repository
  • Entwickler CI Vorteile Demo
  • Entwickler CI Vorteile Demo Abhängig
  • Jonathan Ong CI-Workshop