The Codest
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Industrie
    • Fintech & Bankieren
    • E-commerce
    • Adtech
    • Gezondheidstechnologie
    • Productie
    • Logistiek
    • Automotive
    • IOT
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
Pijl terug KEREN TERUG
2019-07-23
Software Ontwikkeling

CircleCI

The Codest

Damian Watroba

Software Engineer

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.

RUBOCOP

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:

 rennen:
    naam: Rubocop
    commando: bundle exec rubocop

ESLINT

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.

rennen:
    naam: Eslint
    commando: npm run eslint

RSPEC

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:

rennen:
    naam: RSpec
    commando: |
      mkdir /tmp/test-resultaten
      TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
        circleci tests split --split-by=timings)"
      bundel uitvoer rspec
        --format voortgang
        --format RspecJunitFormatter
        --out /tmp/test-results/rspec.xml
        --formaat voortgang
        $TEST_BESTANDEN

- bewaar_test_resultaten:
    pad: /tmp/test-resultaten

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.

 opslag_artefacten:
    pad: /tmp/test-resultaten

REMMAN

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.

rennen:
    naam: Brakeman
    commando: bundle exec brakeman --no-exit-on-warn

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.

 rennen:
    naam: Remmer
    commando: |
      mkdir /tmp/brakeman
      bundel exec brakeman --no-exit-on-warn -o /tmp/brakeman/output.json

- opslag_artefacten:
    path: /tmp/brakeman

RUBYCRITIC

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.

 rennen:
    naam: Rubycritic
    commando: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

- opslag_artefacten:
    path: /tmp/rubycritic

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.

Ruby

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']
  • .config.yml
 rennen:
    naam: Rubycritic uitvoeren
    commando: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

 store_artifacts:
    path: /tmp/rubycritic

 run:
    naam: Rubycritic melding
    commando: bundel uitvoeren rake circleci:report_coverage

Nu moeten we twee sleutels genereren:

VERSLAGGEVER_CIRKELCI_TOKEN

API-token

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

token

Reikwijdte voor sleutel tot repo

Na het genereren van de sleutels moeten we ze toevoegen aan onze omgevingsvariabelen in Instellingen:

omgevingsvariabele
variabele toevoegen

Voorbeeldconfiguratie:

banen:
  build:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
      omgeving:
        BUNDLER_VERSION: 2.0.1
        BUNDLE_PATH: /bundle
        BUNDLE_JOBS: 4
        RAILS_ENV: test
    - image: circleci/postgres:10.1-alpine
      omgeving:
        POSTGRES_USER: postgres
        POSTGRES_DB: voorbeeld_test
        POSTGRES_PASWOORD: voorbeeld
    - image: circleci/redis:4.0.8-alpine
    werkdirectory: ~/insights
    omgeving:
        TZ: Europa/Warschau
    stappen:
      - uitchecken
      - uitvoeren:
          naam: Installeer bundler versie 2.0.1
          commando: gem install bundler -v 2.0.1
      - herstel_cache:
          sleutels:
            - v1-ruby-dependencies-(( checksum "Gemfile.lock" ))
            - v1-ruby-afhankelijkheden-
      - run:
          naam: Bundle Install
          commando: bundle check || bundle install
      - save_cache:
          sleutel: v1-ruby-dependencies-( controlesom "Gemfile.lock" ))
          paden:
            - vendor/bundle
      - herstel_cache:
          sleutels:
            - v1-npm-dependencies-(( controlesom "package.json" ))
            - v1-npm-afhankelijkheden-
      - run:
          naam: Npm Install
          commando: npm install
      - save_cache:
          sleutel: v1-npm-dependencies-( controlesom "package.json" ))
          paden:
            - ~/insights/node_modules
      - run:
        naam: Database setup
        commando: |
          bundel uitvoeren rake db:create
          bundel uitvoeren rake db:schema:laden
      - uitvoeren:
          naam: Rubocop
          commando: bundel uitvoeren rubocop
      - uitvoeren:
          naam: Eslint
          commando: npm run eslint
      - uitvoeren:
          naam: RSpec
          commando: |
            mkdir /tmp/test-resultaten
            TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
              circleci tests split --split-by=timings)"
            bundel uitvoer rspec
              --formaat voortgang
              --format RspecJunitFormatter
              --out /tmp/test-results/rspec.xml
              --formaat voortgang
              $TEST_BESTANDEN
      - uitvoeren:
          naam: Brakeman
          commando: bundle exec brakeman --no-exit-on-warn
      - opslag_test_resultaten:
          path: /tmp/test-resultaten
  rubycritic:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
        omgeving:
          BUNDLER_VERSIE: 2.0.1
          BUNDLE_PATH: /bundle
          BUNDLE_JOBS: 4
          RAILS_ENV: test
          CIRCLE_ARTIFACTS: /tmp
    werkdirectory: ~/insights
    stappen:
      - uitchecken
      - uitvoeren:
          naam: Installeer bundler versie 2.0.1
          commando: gem install bundler -v 2.0.1
      - herstel_cache:
          sleutels:
            - v1-rubycritic-dependencies-( checksum "Gemfile.lock" ))
            - v1-rubycritic-afhankelijkheden-
      - run:
          naam: Bundle Install
          commando: bundle check || bundle install
      - save_cache:
          sleutel: v1-rubycritic-dependencies-( controlesom "Gemfile.lock" ))
          paden:
            - vendor/bundle
      - run:
          naam: Rubycritic uitvoeren
          commando: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
      - store_artifacts:
          path: /tmp/rubycritic
      - run:
          name: Rubycritic melding
          commando: bundel uitvoeren rake circleci:report_coverage

workflows:
  versie: 2
  build_en_rubycritic:
    jobs:
      - bouwen
      - rubycritic:
          vereist:
            - bouwen

Bronnen:

  • Lijst met beschikbare docker-images voor CircleCi

    • Docker-afbeeldingen
  • CircleCi

    • Configuratie CirkelCi

      • Voorbeeldconfiguratie
      • Testgegevens verzamelen
      • Inzichten gebruiken
      • Bouwartefacten opslaan
  • Gebruikte edelstenen of gereedschappen

    • RuboCop

      • ESlint
      • RSpec
      • Remmer
      • RubyCtritic
      • Rapport kringloopdekking

Lees meer:

  • Codest's goede praktijken voor het bouwen van software: projectdocumentatie
  • Hoe schrijf je een goede code?
  • Open-gesloten principe. Moet ik het ooit gebruiken?

Verwante artikelen

Software Ontwikkeling

Bouw Toekomstbestendige Web Apps: Inzichten van The Codest's Expert Team

Ontdek hoe The Codest uitblinkt in het creëren van schaalbare, interactieve webapplicaties met geavanceerde technologieën, het leveren van naadloze gebruikerservaringen op alle platforms. Ontdek hoe onze expertise digitale transformatie en business...

DE BESTE
Software Ontwikkeling

Top 10 in Letland gevestigde bedrijven voor softwareontwikkeling

Lees meer over de beste softwareontwikkelingsbedrijven van Letland en hun innovatieve oplossingen in ons nieuwste artikel. Ontdek hoe deze technologieleiders uw bedrijf kunnen helpen verbeteren.

thecodest
Oplossingen voor ondernemingen en schaalvergroting

Essentiële Java-softwareontwikkeling: Een gids voor succesvol uitbesteden

Verken deze essentiële gids over succesvolle outsourcing Java-softwareontwikkeling om de efficiëntie te verbeteren, toegang te krijgen tot expertise en projectsucces te stimuleren met The Codest.

thecodest
Software Ontwikkeling

De ultieme gids voor outsourcing in Polen

De sterke groei van outsourcing in Polen wordt gedreven door economische, educatieve en technologische vooruitgang, die IT-groei en een bedrijfsvriendelijk klimaat stimuleert.

DeCodest
Oplossingen voor ondernemingen en schaalvergroting

De complete gids voor IT-auditmiddelen en -technieken

IT-audits zorgen voor veilige, efficiënte en compliant systemen. Lees het volledige artikel om meer te weten te komen over het belang ervan.

The Codest
Jakub Jakubowicz CTO & medeoprichter

Abonneer je op onze kennisbank en blijf op de hoogte van de expertise uit de IT-sector.

    Over ons

    The Codest - Internationaal softwareontwikkelingsbedrijf met technische hubs in Polen.

    Verenigd Koninkrijk - Hoofdkantoor

    • Kantoor 303B, 182-184 High Street North E6 2JA
      Londen, Engeland

    Polen - Lokale technologieknooppunten

    • Fabryczna kantorenpark, Aleja
      Pokoju 18, 31-564 Krakau
    • Hersenambassade, Konstruktorska
      11, 02-673 Warschau, Polen

      The Codest

    • Home
    • Over ons
    • Diensten
    • Case Studies
    • Weten hoe
    • Carrière
    • Woordenboek

      Diensten

    • Het advies
    • Software Ontwikkeling
    • Backend ontwikkeling
    • Frontend ontwikkeling
    • Staff Augmentation
    • Backend ontwikkelaars
    • Cloud Ingenieurs
    • Gegevensingenieurs
    • Andere
    • QA ingenieurs

      Bronnen

    • Feiten en fabels over samenwerken met een externe partner voor softwareontwikkeling
    • Van de VS naar Europa: Waarom Amerikaanse startups besluiten naar Europa te verhuizen
    • Tech Offshore Ontwikkelingshubs Vergelijking: Tech Offshore Europa (Polen), ASEAN (Filippijnen), Eurazië (Turkije)
    • Wat zijn de grootste uitdagingen voor CTO's en CIO's?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Gebruiksvoorwaarden website

    Copyright © 2025 door The Codest. Alle rechten voorbehouden.

    nl_NLDutch
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish etEstonian elGreek nl_NLDutch