CircleCI is een zeer eenvoudige tool die goed is geconfigureerd als supervisor van onze projecten. Maar is de configuratie zelf eenvoudig? Dat hangt natuurlijk af van de complexiteit van het project. In ons geval (mono repo) bleek het moeilijker dan verwacht.
De configuratie voor Ruby on Rails projecten is niet ingewikkeld en de documentatie beschrijft nauwkeurig elk element van de config.yml. Ik wil me echter richten op de circleci tools die worden gebruikt om ons te helpen de code schoon en zorgen voor goede praktijken.
Het is waarschijnlijk dat RuboCope geen introductie nodig heeft, maar voor degenen die er niet bekend mee zijn, het is een statische Ruby code analyzer en formatteerder. Als je rubocop al gebruikt in je projectvoeg dan CircleCI toe aan het configuratiebestand:
ESLint is een hulpmiddel voor het identificeren en rapporteren van patronen die gevonden worden in de ECMAScript of JavaScript code, om de code consistenter te maken en fouten te voorkomen.
In RSpec zijn tests niet alleen scripts die de applicatiecode verifiëren, het zijn ook gedetailleerde verklaringen van hoe de applicatie zich zou moeten gedragen, uitgedrukt in eenvoudig Engels:
In het geval van RSpec slaan we het testresultaat op in een eerder aangemaakte catalogus /tmp/test-results in het bestand rspec.xml, en vervolgens gebruiken we de optie opslaantestresultaten sleutel slaan we een gegeven catalogus op. Nu geeft het Insights tabblad ons toegang tot informatie zoals de mediane compilatietijd, de tijd van de laatste compilatie of het succespercentage. Je kunt meer lezen over het tabblad Insights hier. Als we het rspec.xml bestand willen opslaan als een "artefact" dan moeten we de optie artefacten opslaan sleutel in ons configuratiebestand.
Brakeman is een statische analyse tool die Ruby on Rails toepassingen controleert op veiligheidslekken. Standaard zal Brakeman een exitcode zonder nullen teruggeven als er beveiligingswaarschuwingen of scanfouten worden gedetecteerd. Daarom richtten we ons alleen op kritieke fouten en werden de waarschuwingen uitgeschakeld.
Als we ook het scanresultaat op dezelfde manier willen opslaan als RSpec, dan ziet onze configuratie er als volgt uit en hebben we toegang tot ons bestand op het tabblad Artifacts.
RubyCritic is een gem die gems voor statische analyse, zoals Reek, Flay en Flog, gebruikt om een rapport te geven over de kwaliteit van je code. Het rapport bevat een A / B / C / D / F rating, elk bestand in ons project dat we willen laten scannen en nauwkeurige plaatsen die verbetering nodig hebben, en documentatie bij elke waarschuwing (bijv: TooManyMethods). Deze tool fungeert als een consultant in het project. Op basis van het ontvangen rapport hangt de uiteindelijke beslissing of onze code daadwerkelijk moet worden gecorrigeerd af van de ontwikkelaar. In onze circleci configuratie is een aparte job toegewezen die verantwoordelijk is voor het opstellen van het rapport en het versturen van een speciaal commentaar met het resultaat op github.
De basisconfiguratie van rubycritic verschilt niet van de vorige.
Standaard doorlopen we de bundel met informatie over welke map we willen scannen ./app, op welke plaats we het resultaat willen opslaan -p /tmp/rubycritic (rubycritic maakt automatisch een map waarin we ons rapport opslaan), in welk formaat -f json en optie -no-browser. We gebruiken ook de gem cirkelci-dekking_verslaggeverdie na de scan een opmerking plaatst op github in ons pull-verzoek met een link naar het rapport en een percentagewaardering van de gescande bestanden.
Om bovenstaande gem goed te laten werken in combinatie met circleci, moeten we het toevoegen aan ons project en twee sleutels genereren (een daarvan is circleci, de tweede is github).
Standaard installatie:
Gemfile gem 'circleci-dekking_verslaggever'.
Rakefile require 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI']
Sectie 'instellingen' van ons project. Verander na het kiezen van 'Token aanmaken' de scope voor 'alle' en vul het Token-label in. Token naar API worden gegenereerd na het klikken op
VERSLAGGEVER_VCS_TOKEN
Reikwijdte voor sleutel tot repo
Na het genereren van de sleutels moeten we ze toevoegen aan onze omgevingsvariabelen in Instellingen: