CircleCI er et meget enkelt værktøj, der er velkonfigureret som supervisor for vores projekter. Men er selve konfigurationen enkel? Det afhænger selvfølgelig af projektets kompleksitet. I vores tilfælde (mono repo) viste det sig at være sværere end forventet.
Konfigurationen af Ruby on Rails-projekter er ikke kompliceret, og dokumentation beskriver nøjagtigt hvert element i config.yml. Jeg vil dog gerne fokusere på de circleci-værktøjer, der bruges til at hjælpe os med at holde Kode ren og sikre god praksis.
Det er sandsynligt, at RuboCope ikke behøver nogen introduktion, men for dem, der ikke er bekendt med det, er det en statisk Ruby-kodeanalysator og -formater. Hvis du allerede bruger rubocop i din projektskal du blot tilføje CircleCI til konfigurationsfilen:
ESLint er et værktøj til at identificere og rapportere mønstre, der findes i ECMAScript eller JavaScript for at gøre koden mere konsistent og undgå fejl.
I RSpec er tests ikke kun scripts, der verificerer applikationskoden, de er også detaljerede forklaringer på, hvordan applikationen skal opføre sig, udtrykt på simpelt engelsk:
I tilfældet med RSpec gemmer vi testresultatet i et tidligere oprettet katalog /tmp/test-results i rspec.xml-filen, og derefter bruger vi butiktestresultater nøgle gemmer vi et givet katalog. Fanen Indsigt giver os nu adgang til oplysninger som f.eks. mediankompileringstiden, tidspunktet for den sidste kompilering eller succesraten. Du kan læse mere om fanen Insights her. Hvis vi vil gemme rspec.xml-filen som en "artefakt", skal vi tilføje opbevar_artefakter nøgle i vores konfigurationsfil.
Brakeman er et statisk analyseværktøj, der tjekker Ruby on Rails-applikationer for sikkerhedshuller. Som standard returnerer Brakeman en exit-kode, der ikke er nul, hvis der opdages sikkerhedsadvarsler eller scanningsfejl. Derfor fokuserede vi kun på kritiske fejl, og advarslerne blev slået fra.
Hvis vi også vil gemme scanningsresultatet på samme måde som RSpec, vil vores konfiguration se sådan ud, og vi vil have adgang til vores fil under fanen Artifacts.
RubyCritic er en perle, der bruger perler til statisk analyse, såsom Reek, Flay og Flog, til at give en rapport om kvaliteten af din kode. Rapporten indeholder en A/B/C/D/F-vurdering, alle filer i vores projekt, som vi ønsker at få scannet, og nøjagtige steder, der skal forbedres, samt dokumentation for hver advarsel (f.eks: ForMangeMetoder). Dette værktøj fungerer som en konsulent i projektet. På baggrund af den modtagne rapport afhænger den endelige beslutning om, hvorvidt vores kode rent faktisk skal rettes, af udvikleren. I vores circleci-konfiguration er der tildelt et separat job, som er ansvarligt for at udarbejde rapporten og sende en særlig kommentar med resultatet på github.
Den grundlæggende konfiguration af rubycritic er ikke forskellig fra de tidligere.
Som standard kører vi gennem pakken med oplysninger om, hvilken mappe vi vil scanne ./app, hvor vi vil gemme resultatet -p /tmp/rubycritic (rubycritic opretter automatisk en mappe, hvor vi gemmer vores rapport), i hvilket format -f json og option -no- browser. Vi bruger også gem'en circleci-coverage_reportersom efter scanningen lægger en kommentar på github i vores pull request med et link til rapporten og en procentvis vurdering af de scannede filer.
For at ovenstående perle kan fungere korrekt sammen med circleci, skal vi tilføje den til vores projekt og generere to nøgler (den ene er circleci, den anden er github).
Standardinstallation:
Gemfile gem 'circleci-coverage_reporter'
Rakefile kræver 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI']
Afsnit 'indstillinger' i vores projekt. Når du har valgt 'Create Token', skal du ændre scope til 'all' og udfylde Token-label. Token til API vil blive genereret, når du klikker på
DÆKNING_REPORTER_VCS_TOKEN
Anvendelsesområde for nøgle til repo
Når vi har genereret nøglerne, skal vi tilføje dem til vores miljøvariabler i Indstillinger: