window.pipedriveLeadboosterConfig = { bas: 'leadbooster-chat.pipedrive.com', företagId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = fönster if (w.LeadBooster) { console.warn('LeadBooster finns redan') } annars { w.LeadBooster = { q: [], on: funktion (n, h) { this.q.push({ t: "o", n: n, h: h }) }, trigger: funktion (n) { this.q.push({ t: 't', n: n }) }, } } })() CircleCI - The Codest
Codest
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Industrier
    • Fintech & bankverksamhet
    • E-commerce
    • Adtech
    • Hälsoteknik
    • Tillverkning
    • Logistik
    • Fordon
    • IOT
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
Pil tillbaka GÅ TILLBAKA
2019-07-23
Utveckling av programvara

CircleCI

Codest

Damian Watroba

Software Engineer

CircleCI är ett mycket enkelt verktyg som är välkonfigurerat som övervakare av våra projekt. Men är själva konfigurationen enkel? Detta beror naturligtvis på hur komplext projektet är. I vårt fall (mono repo) visade det sig vara svårare än väntat.

Konfigurationen för Ruby on Rails-projekt är inte komplicerad, och dokumentation beskriver varje element i config.yml på ett korrekt sätt. Jag skulle dock vilja fokusera på de cirkelci-verktyg som används för att hjälpa oss att hålla kod rengöra och säkerställa god praxis.

RUBOCOP

Det är troligt att RuboCope inte behöver någon introduktion, men för dem som inte är bekanta med det är det en statisk Ruby-kodanalysator och formaterare. Om du redan använder rubocop i din projektär det bara att lägga till CircleCI i konfigurationsfilen:

 kör:
    namn: Rubocop
    kommando: bundle exec rubocop

ESLINT

ESLint är ett verktyg för att identifiera och rapportera mönster som finns i ECMAScript- eller JavaScript koden, för att göra koden mer konsekvent och undvika fel.

kör:
    namn: Eslint
    kommando: npm kör eslint

RSPEC

I RSpec är tester inte bara skript som verifierar applikationskoden, de är också detaljerade förklaringar av hur applikationen ska bete sig, uttryckta på enkel engelska:

kör:
    namn: RSpec
    kommando: |
      mkdir /tmp/test-resultat
      TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
        circleci tester split --split-by=timings)"
      bundle exekvera rspec
        --format framsteg
        --format RspecJunitFormatter
        --out /tmp/test-resultat/rspec.xml
        --format progress
        $TEST_FILER

- lagra_test_resultat:
    sökväg: /tmp/testresultat

När det gäller RSpec sparar vi testresultatet i en tidigare skapad katalog /tmp/test-results i filen rspec.xml, och sedan använder vi butiktestresultat nyckel lagrar vi en viss katalog. Nu ger fliken Insikter oss tillgång till information som mediankompileringstiden, tiden för den senaste kompileringen eller framgångsgraden. Du kan läsa mer om fliken Insikter här. Om vi vill lagra filen rspec.xml som en "artefakt" måste vi lägga till lagra_artefakter nyckel i vår konfigurationsfil.

 lagra_artefakter:
    sökväg: /tmp/test-resultat

BRAKEMAN

Brakeman är ett statiskt analysverktyg som kontrollerar Ruby on Rails-applikationer för säkerhetsproblem. Som standard kommer Brakeman att returnera en utgångskod som inte är noll om säkerhetsvarningar upptäcks eller om skanningsfel påträffas. Därför fokuserade vi bara på kritiska fel och varningarna stängdes av.

kör:
    namn: Brakeman
    kommando: bundle exec brakeman --no-exit-on-warn

Om vi också vill lagra skanningsresultatet på samma sätt som RSpec kommer vår konfiguration att se ut så här, och vi kommer att ha tillgång till vår fil på fliken Artifacts.

 kör:
    namn: Brakeman
    kommando: |
      mkdir /tmp/brakeman
      bundle exec brakeman --no-exit-on-warn -o /tmp/brakeman/output.json

- lagra_artifakter:
    sökväg: /tmp/brakeman

RUBYCRITIC

RubyCritic är en pärla som använder pärlor för statisk analys, till exempel Reek, Flay och Flog, för att ge en rapport om kvaliteten på din kod. Rapporten innehåller ett A / B / C / D / F-betyg, varje fil i vårt projekt som vi vill ha skannat och exakta platser som behöver förbättras, och dokumentation med varje varning (t.ex: Förmånliga metoder). Detta verktyg fungerar som en konsult i projektet. På grundval av den mottagna rapporten beror det slutliga beslutet om huruvida vår kod faktiskt behöver korrigeras på utvecklaren. I vår circleci-konfiguration tilldelas ett separat jobb som ansvarar för att förbereda rapporten och skicka en särskild kommentar med resultatet på github.

Den grundläggande konfigurationen av rubycritic skiljer sig inte från de tidigare.

 kör:
    namn: Rubycritic
    kommando: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

- lagra_artifakter:
    sökväg: /tmp/rubycritic

Som standard kör vi igenom paketet med information om vilken katalog vi vill skanna ./app, på vilken plats vi vill spara resultatet -p /tmp/rubycritic (rubycritic skapar automatiskt en katalog där vi ska lagra vår rapport), i vilket format -f json och alternativet -no- browser. Vi använder också gemen cirkelci-täckning_rapportörsom efter skanningen lägger till en kommentar på github i vår pull request med en länk till rapporten och en procentuell bedömning av de skannade filerna.

Ruby

För att ovanstående pärla ska fungera korrekt tillsammans med circleci måste vi lägga till den i vårt projekt och generera två nycklar (en av dem är circleci, den andra är github).

Standardinstallation:

  • Gemfil
    gem 'circleci-coverage_reporter'
  • Rakefil
    require 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI']
  • .config.yml
 kör:
    namn: Kör Rubycritic
    command: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

 lagra_artifakter:
    sökväg: /tmp/rubycritic

 kör:
    namn: Rubycritic anmälan
    kommando: bundle exec rake circleci:report_coverage

Nu måste vi generera två nycklar:

TÄCKNING_REPORTER_CIRCLECI_TOKEN

API-token

Avsnittet "Inställningar" i vårt projekt. När du har valt "Skapa Token" ändrar du scope till "alla" och fyller i Token-etiketten. Token till API kommer att genereras efter att du klickat på

TÄCKNING_RAPPORTÖR_VCS_TOKEN

symbol

Omfattning för nyckel till repo

När vi har genererat nycklarna måste vi lägga till dem i våra miljövariabler i Inställningar:

miljövariabel
lägg till variabel

Exempel på konfiguration:

jobb:
  bygga:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
      miljö: bundler_version
        BUNDLER_VERSION: 2.0.1
        BUNDLE_PATH: /bundle
        BUNDLE_JOBS: 4
        RAILS_ENV: test
    - image: circleci/postgres:10.1-alpine
      miljö: postgres
        POSTGRES_USER: postgres
        POSTGRES_DB: exempel_test
        POSTGRES_PASSWORD: exempel
    - bild: circleci/redis:4.0.8-alpine
    arbets_katalog: ~/insikter
    miljö: ~/insights
        TZ: Europa/Warszawa
    steg:
      - utcheckning
      - kör:
          name: Installera bundler version 2.0.1
          kommando: gem installera bundler -v 2.0.1
      - återställ_cache:
          nycklar:
            - v1-ruby-beroenden-(( checksumma "Gemfile.lock" ))
            - v1-ruby-beroenden-
      - kör:
          namn: Bundle Install
          kommando: bundle check || bundle install
      - spara_cache:
          key: v1-ruby-dependencies-(( checksum "Gemfile.lock" ))
          sökvägar:
            - leverantör/bundle
      - återställ_cache:
          nycklar:
            - v1-npm-beroenden-(( kontrollsumma "paket.json" ))
            - v1-npm-beroenden-
      - kör:
          namn: Npm Install
          kommando: npm installera
      - spara_cache:
          nyckel: v1-npm-beroenden-(( checksumma "paket.json" ))
          sökvägar:
            - ~/insikter/node_modules
      - run:
        namn: Databasuppsättning
        kommando: |
          bundle exec rake db:create
          bundle exec rake db:schema:load
      - kör:
          namn: Rubocop
          kommando: bundle exec rubocop
      - kör:
          namn: Eslint
          kommando: npm kör eslint
      - kör:
          namn: RSpec
          kommando: |
            mkdir /tmp/test-resultat
            TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
              circleci tester split --split-by=timings)"
            bundle exekvera rspec
              --format framsteg
              --format RspecJunitFormatter
              --out /tmp/test-resultat/rspec.xml
              --format progress
              $TEST_FILER
      - kör:
          namn: Brakeman
          kommando: bundle exec brakeman --no-exit-on-warn
      - lagra_test_resultat:
          sökväg: /tmp/testresultat
  rubycritic:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
        miljö:
          BUNDLER_VERSION: 2.0.1
          BUNDLE_PATH: /bundle
          BUNDLE_JOBS: 4
          RAILS_ENV: test
          CIRKEL_ARTIFAKTER: /tmp
    arbets_katalog: ~/insikter
    steg:
      - utcheckning
      - kör:
          name: Installera bundler version 2.0.1
          kommando: gem installera bundler -v 2.0.1
      - återställ_cache:
          nycklar:
            - v1-rubycritic-beroenden-(( checksumma "Gemfile.lock" ))
            - v1-rubycritic-beroenden-
      - run:
          namn: Bundle-installation
          kommando: bundle check || bundle install
      - spara_cache:
          nyckel: v1-rubycritic-beroenden-(( checksumma "Gemfile.lock" ))
          sökvägar:
            - leverantör/bundle
      - run:
          namn: Kör Rubycritic
          command: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
      - lagra_artifakter:
          sökväg: /tmp/rubycritic
      - kör:
          namn: Rubycritic anmälan
          kommando: bundle exec rake circleci:report_coverage

arbetsflöden:
  version: 2
  bygga_och_rubycritic:
    jobb:
      - bygga
      - rubycritic:
          kräver:
            - bygga

Källor:

  • Lista över tillgängliga dockeravbildningar för CircleCi

    • Docker-avbildningar
  • CircleCi

    • Konfiguration CircleCi

      • Exempel på konfiguration
      • Samla in testdata
      • Använda insikter
      • Lagring av byggartefakter
  • Begagnade ädelstenar eller verktyg

    • RuboCop

      • ESlint
      • RSpec
      • Brakeman
      • RubyCtritic
      • Rapport om cirkeltäckning

Läs mer om detta:

  • Codests goda praxis för att bygga programvara: projektdokumentation
  • Hur skriver man en bra kod av hög kvalitet?
  • Principen om öppet och stängt. Måste jag någonsin använda den?

Relaterade artiklar

Utveckling av programvara

Bygg framtidssäkrade webbappar: Insikter från The Codest:s expertteam

Upptäck hur The Codest utmärker sig genom att skapa skalbara, interaktiva webbapplikationer med banbrytande teknik som ger sömlösa användarupplevelser på alla plattformar. Läs om hur vår expertis driver digital omvandling och affärsutveckling...

DEKODEST
Utveckling av programvara

Topp 10 Lettlandsbaserade mjukvaruutvecklingsföretag

Läs mer om Lettlands främsta mjukvaruutvecklingsföretag och deras innovativa lösningar i vår senaste artikel. Upptäck hur dessa teknikledare kan hjälpa till att lyfta ditt företag.

thecodest
Lösningar för företag och uppskalningsföretag

Java Software Development Essentials: En guide till framgångsrik outsourcing

Utforska denna viktiga guide om framgångsrik outsourcing av Java-programvaruutveckling för att förbättra effektiviteten, få tillgång till expertis och driva projektframgång med The Codest.

thecodest
Utveckling av programvara

Den ultimata guiden till outsourcing i Polen

Den kraftiga ökningen av outsourcing i Polen drivs av ekonomiska, utbildningsmässiga och tekniska framsteg, vilket främjar IT-tillväxt och ett företagsvänligt klimat.

TheCodest
Lösningar för företag och uppskalningsföretag

Den kompletta guiden till verktyg och tekniker för IT-revision

IT-revisioner säkerställer säkra, effektiva och kompatibla system. Läs mer om hur viktiga de är genom att läsa hela artikeln.

Codest
Jakub Jakubowicz CTO och medgrundare

Prenumerera på vår kunskapsbas och håll dig uppdaterad om expertisen från IT-sektorn.

    Om oss

    The Codest - Internationellt mjukvaruutvecklingsföretag med teknikhubbar i Polen.

    Förenade kungariket - Huvudkontor

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokala tekniknav

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      Codest

    • Hem
    • Om oss
    • Tjänster
    • Fallstudier
    • Vet hur
    • Karriär
    • Ordbok

      Tjänster

    • Det rådgivande
    • Utveckling av programvara
    • Backend-utveckling
    • Frontend-utveckling
    • Staff Augmentation
    • Backend-utvecklare
    • Ingenjörer inom molntjänster
    • Dataingenjörer
    • Övriga
    • QA-ingenjörer

      Resurser

    • Fakta och myter om att samarbeta med en extern partner för mjukvaruutveckling
    • Från USA till Europa: Varför väljer amerikanska startup-företag att flytta till Europa?
    • Jämförelse av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinerna), Eurasien (Turkiet)
    • Vilka är de största utmaningarna för CTO:er och CIO:er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Användarvillkor för webbplatsen

    Copyright © 2025 av The Codest. Alla rättigheter reserverade.

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