CircleCI ist ein sehr einfaches Tool, das als Supervisor für unsere Projekte gut konfiguriert ist. Aber ist die Konfiguration selbst einfach? Das hängt natürlich von der Komplexität des Projekts ab. In unserem Fall (mono repo) erwies sie sich als schwieriger als erwartet.
Die Konfiguration für Ruby on Rails-Projekte ist nicht kompliziert, und die Dokumentation beschreibt jedes Element der config.yml genau. Ich möchte mich jedoch auf die circleci-Tools konzentrieren, die uns dabei helfen, die Code sauber zu halten und eine gute Praxis zu gewährleisten.
RuboCope ist ein statischer Ruby-Code-Analysator und -Formatierer, der wahrscheinlich keiner Einführung bedarf, aber für diejenigen, die damit nicht vertraut sind. Wenn Sie bereits rubocop in Ihrem Projektfügen Sie einfach CircleCI in die Konfigurationsdatei ein:
ESLint ist ein Werkzeug zur Identifizierung und Meldung von Mustern, die in ECMAScript oder JavaScript Code, um den Code konsistenter zu machen und Fehler zu vermeiden.
In RSpec sind Tests nicht nur Skripte, die den Anwendungscode überprüfen, sondern auch detaillierte Erklärungen, wie sich die Anwendung verhalten soll, ausgedrückt in einfachem Englisch:
Im Fall von RSpec speichern wir das Testergebnis in einem zuvor erstellten Katalog /tmp/test-results in der Datei rspec.xml, und verwenden dann die Option speichernTestErgebnisse Schlüssel speichern wir einen bestimmten Katalog. Auf der Registerkarte Einblicke können wir nun Informationen wie die durchschnittliche Kompilierungszeit, den Zeitpunkt der letzten Kompilierung oder die Erfolgsquote abrufen. Sie können mehr über die Registerkarte Einblicke lesen hier. Wenn wir die Datei rspec.xml als "Artefakt" speichern wollen, müssen wir die speichern_artefakte Schlüssel in unserer Konfigurationsdatei.
Brakeman ist ein statisches Analysewerkzeug, das Ruby on Rails-Anwendungen auf Sicherheitsschwachstellen überprüft. Standardmäßig gibt Brakeman einen Exit-Code ungleich Null zurück, wenn Sicherheitswarnungen oder Scan-Fehler entdeckt werden. Daher haben wir uns nur auf kritische Fehler konzentriert und die Warnungen ausgeschaltet.
Wenn wir das Scan-Ergebnis auf die gleiche Weise wie RSpec speichern wollen, sieht unsere Konfiguration wie folgt aus, und wir haben auf der Registerkarte "Artefakte" Zugriff auf unsere Datei.
RubyCritic ist ein Edelstein, der Gems für die statische Analyse, wie Reek, Flay und Flog, verwendet, um einen Bericht über die Qualität des Codes zu liefern. Der Bericht enthält eine A / B / C / D / F Bewertung, jede Datei in unserem Projekt, die wir gescannt haben wollen und genaue Orte, die Verbesserung benötigen, und Dokumentation mit jedem Alarm (zB: TooManyMethods). Dieses Tool fungiert als Berater für das Projekt. Auf der Grundlage des erhaltenen Berichts hängt die endgültige Entscheidung, ob unser Code tatsächlich korrigiert werden muss, vom Entwickler ab. In unserer circleci-Konfiguration wird ein separater Job zugewiesen, der für die Erstellung des Berichts und das Senden eines speziellen Kommentars mit dem Ergebnis auf github verantwortlich ist.
Die Grundkonfiguration von rubycritic unterscheidet sich nicht von den vorherigen.
Standardmäßig durchlaufen wir das Bundle mit den Angaben, welches Verzeichnis wir scannen wollen ./app, an welchem Ort wir das Ergebnis speichern wollen -p /tmp/rubycritic (rubycritic erstellt automatisch ein Verzeichnis, in dem wir unseren Bericht speichern), in welchem Format -f json und der Option -no- browser. Wir verwenden auch das Gem kreisci-abdeckung_reporterder nach dem Scan einen Kommentar auf Github in unserem Pull-Request mit einem Link zum Bericht und einer prozentualen Bewertung der gescannten Dateien hinterlegt.
Damit das obige Gem zusammen mit circleci richtig funktioniert, müssen wir es zu unserem Projekt hinzufügen und zwei Schlüssel erzeugen (einer davon ist circleci, der zweite ist github).
Standardinstallation:
Gemfile gem 'circleci-coverage_reporter'
Rakefile require 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI']
Abschnitt 'Einstellungen' unseres Projekts. Nach der Auswahl von "Token erstellen" ändern Sie den Geltungsbereich auf "alle" und geben das Token-Label ein. Das Token für die API wird erzeugt, nachdem Sie auf
COVERAGE_REPORTER_VCS_TOKEN
Umfang des Schlüssels zur Wiederbeschaffung
Nachdem wir die Schlüssel erzeugt haben, müssen wir sie zu unseren Umgebungsvariablen in Einstellungen: