window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versjon: 2, } ;(function () { var w = vindu if (w.LeadBooster) { console.warn('LeadBooster finnes allerede') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() CircleCI - The Codest
The Codest
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Industrier
    • Fintech og bankvirksomhet
    • E-commerce
    • Adtech
    • Helseteknologi
    • Produksjon
    • Logistikk
    • Bilindustrien
    • IOT
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
Pil tilbake GÅ TILBAKE
2019-07-23
Programvareutvikling

CircleCI

The Codest

Damian Watroba

Software Engineer

CircleCI er et veldig enkelt verktøy som er godt konfigurert som veileder for prosjektene våre. Men er selve konfigurasjonen enkel? Dette avhenger selvfølgelig av prosjektets kompleksitet. I vårt tilfelle (mono repo) viste det seg å være vanskeligere enn forventet.

Konfigurasjonen for Ruby on Rails-prosjekter er ikke komplisert, og dokumentasjon beskriver nøyaktig hvert element i config.yml. Jeg vil imidlertid fokusere på circleci-verktøyene som brukes til å hjelpe oss med å holde kode rent og sikre god praksis.

RUBOCOP

RuboCope trenger sannsynligvis ingen introduksjon, men for de som ikke er kjent med det, er det en statisk Ruby-kodeanalysator og formaterer. Hvis du allerede bruker rubocop i din prosjektlegger du ganske enkelt til CircleCI i konfigurasjonsfilen:

 kjør:
    navn: Rubocop
    kommando: bundle exec rubocop

ESLINT

ESLint er et verktøy for å identifisere og rapportere mønstre som finnes i ECMAScript- eller JavaScript koden, for å gjøre koden mer konsistent og unngå feil.

kjør:
    navn: Eslint
    kommando: npm run eslint

RSPEC

I RSpec er tester ikke bare skript som verifiserer programkoden, de er også detaljerte forklaringer på hvordan programmet skal oppføre seg, uttrykt på enkelt engelsk:

kjør:
    navn: RSpec
    command: |
      mkdir /tmp/test-resultater
      TEST_FILES="$(circleci tests glob "spec/_spec.rb" | circleci tests split --split-by=timings)
        circleci tester split --split-by=timings)"
      bundle exec rspec
        --format progress
        --format RspecJunitFormatter
        --out /tmp/test-results/rspec.xml
        --format progress
        $TEST_FILES

- store_test_results:
    path: /tmp/test-results

I tilfellet RSpec lagrer vi testresultatet i en tidligere opprettet katalog /tmp/test-results i filen rspec.xml, og deretter bruker vi butikktestresultater nøkkelen vi lagrer en gitt katalog. Nå gir fanen Innsikt oss tilgang til informasjon som median kompileringstid, tidspunktet for den siste kompileringen eller suksessraten. Du kan lese mer om fanen Innsikt her. Hvis vi ønsker å lagre rspec.xml-filen som en "artefakt", må vi legge til store_artifacts nøkkelen i konfigurasjonsfilen vår.

 store_artifacts:
    path: /tmp/test-results

BRAKEMAN

Brakeman er et statisk analyseverktøy som sjekker Ruby on Rails-applikasjoner for sikkerhetshull. Som standard returnerer Brakeman en utgangskode som ikke er null, hvis det oppdages sikkerhetsadvarsler eller skannefeil. Derfor fokuserte vi bare på kritiske feil, og advarslene ble slått av.

løp:
    navn: Brakeman
    kommando: bundle exec brakeman --no-exit-on-warn

Hvis vi også ønsker å lagre skanneresultatet på samme måte som RSpec, vil konfigurasjonen vår se slik ut, og vi vil ha tilgang til filen vår i fanen Artifacts.

 løp:
    navn: Brakeman
    kommando: |
      mkdir /tmp/brakeman
      bundle exec brakeman --no-exit-on-warn -o /tmp/brakeman/output.json

- store_artifacts:
    path: /tmp/brakeman

RUBYCRITIC

RubyCritic er en perle som bruker perler for statisk analyse, for eksempel Reek, Flay og Flog, for å gi en rapport om kvaliteten på koden din. Rapporten inneholder en A / B / C / D / F-vurdering, hver fil i prosjektet vårt som vi vil ha skannet og nøyaktige steder som trenger forbedring, og dokumentasjon med hvert varsel (f.eks: ForMangeMetoder). Dette verktøyet fungerer som en konsulent i prosjektet. På grunnlag av den mottatte rapporten er det utvikleren som tar den endelige avgjørelsen om koden vår faktisk må korrigeres. I vår circleci-konfigurasjon er det tilordnet en egen jobb som er ansvarlig for å utarbeide rapporten og sende en spesiell kommentar med resultatet på github.

Den grunnleggende konfigurasjonen av rubycritic er ikke forskjellig fra de foregående.

 kjør:
    navn: Rubycritic
    command: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

- store_artifacts:
    path: /tmp/rubycritic

Som standard kjører vi gjennom pakken med informasjon om hvilken katalog vi vil skanne ./app, hvor vi vil lagre resultatet -p /tmp/rubycritic (rubycritic oppretter automatisk en katalog der vi vil lagre rapporten vår), i hvilket format -f json og alternativet -no- browser. Vi bruker også perlen circleci-coverage_reportersom etter skanningen legger en kommentar på github i vår pull-forespørsel med en lenke til rapporten og en prosentvis vurdering av de skannede filene.

Ruby

For at den ovennevnte perlen skal fungere ordentlig sammen med circleci, må vi legge den til i prosjektet vårt og generere to nøkler (en av dem er circleci, den andre er github).

Standard installasjon:

  • Gemfile
    gem 'circleci-coverage_reporter'
  • Rakefile
    require 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI']
  • .config.yml
 kjør:
    navn: Kjør Rubycritic
    command: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

 store_artifacts:
    path: /tmp/rubycritic

 run:
    name: Rubycritic-varsling
    kommando: bundle exec rake circleci:report_coverage

Nå må vi generere to nøkler:

DEKNING_REPORTER_CIRCLECI_TOKEN

API-token

Seksjon "innstillinger" i prosjektet vårt. Når du har valgt "Create Token", endrer du scope for "all" og fyller ut Token label. Token til API vil bli generert etter å ha klikket på

COVERAGE_REPORTER_VCS_TOKEN

symbol

Omfang for nøkkel til repo

Etter at vi har generert nøklene, må vi legge dem til i miljøvariablene våre i Innstillinger:

miljøvariabel
legge til variabel

Eksempel på konfigurasjon:

jobber:
  build:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
      environment:
        BUNDLER_VERSION: 2.0.1
        BUNDLE_PATH: /bundle
        BUNDLE_JOBS: 4
        RAILS_ENV: test
    - image: circleci/postgres:10.1-alpine
      environment:
        POSTGRES_USER: postgres
        POSTGRES_DB: example_test
        POSTGRES_PASSWORD: example
    - image: circleci/redis:4.0.8-alpine
    working_directory: ~/insights
    environment:
        TZ: Europe/Warsaw
    steps:
      - checkout
      - run:
          name: Installer bundler versjon 2.0.1
          kommando: gem install bundler -v 2.0.1
      - restore_cache:
          keys:
            - v1-ruby-avhengigheter-(( sjekksum "Gemfile.lock" ))
            - v1-ruby-avhengigheter-
      - run:
          navn: Bundle Install
          kommando: bundle sjekk || bundle installer
      - save_cache:
          key: v1-ruby-dependencies-(( sjekksum "Gemfile.lock" ))
          paths:
            - vendor/bundle
      - restore_cache:
          keys:
            - v1-npm-avhengigheter-(( sjekksum "package.json" ))
            - v1-npm-avhengigheter-
      - run:
          name: Npm Install
          kommando: npm install
      - save_cache:
          key: v1-npm-dependencies-(( sjekksum "package.json" ))
          paths:
            - ~/insights/node_modules
      - run:
        name: Databaseoppsett
        command: |
          bundle exec rake db:create
          bundle exec rake db:schema:load
      - run:
          name: Rubocop
          command: bundle exec rubocop
      - run: run
          name: Eslint
          kommando: npm run eslint
      - run:
          name: RSpec
          command: |
            mkdir /tmp/test-resultater
            TEST_FILES="$(circleci tests glob "spec/_spec.rb" | circleci tests split --split-by=timings)
              circleci tester split --split-by=timings)"
            bundle exec rspec
              --format progress
              --format RspecJunitFormatter
              --out /tmp/test-results/rspec.xml
              --format progress
              $TEST_FILES
      - kjør:
          navn: Brakeman
          kommando: bundle exec brakeman --no-exit-on-warn
      - store_test_results:
          path: /tmp/test-results
  rubycritic:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
        environment:
          BUNDLER_VERSION: 2.0.1
          BUNDLE_PATH: /bundle
          BUNDLE_JOBS: 4
          RAILS_ENV: test
          CIRCLE_ARTIFACTS: /tmp
    working_directory: ~/insights
    steps:
      - checkout
      - run:
          name: Installer bundler versjon 2.0.1
          command: gem install bundler -v 2.0.1
      - restore_cache:
          keys:
            - v1-rubycritic-avhengigheter-(( sjekksum "Gemfile.lock" ))
            - v1-rubycritic-avhengigheter-
      - run:
          navn: Bundle Install
          kommando: pakke sjekk || pakke installer
      - save_cache:
          key: v1-rubycritic-dependencies-(( sjekksum "Gemfile.lock" ))
          paths:
            - vendor/bundle
      - run:
          name: Kjør Rubycritic
          command: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
      - store_artifacts:
          path: /tmp/rubycritic
      - run:
          name: Rubycritic-varsling
          kommando: bundle exec rake circleci:report_coverage

workflows:
  versjon: 2
  build_and_rubycritic:
    jobs:
      - build
      - rubycritic:
          krever:
            - build

Kilder:

  • Liste over tilgjengelige dokker-bilder for CircleCi

    • Docker-bilder
  • CircleCi

    • Konfigurasjon CircleCi

      • Eksempel på konfigurasjon
      • Samle inn testdata
      • Bruke Innsikt
      • Lagring av byggeartefakter
  • Brukte edelstener eller verktøy

    • RuboCop

      • ESlint
      • RSpec
      • Bremser
      • RubyCtritic
      • Rapport om sirkeldekning

Les mer om dette:

  • Codests gode praksis for utvikling av programvare: prosjektdokumentasjon
  • Hvordan skriver man en god kode av høy kvalitet?
  • Åpen-lukket-prinsippet. Må jeg noen gang bruke det?

Relaterte artikler

Programvareutvikling

Bygg fremtidssikre webapper: Innsikt fra The Codests ekspertteam

Oppdag hvordan The Codest utmerker seg når det gjelder å skape skalerbare, interaktive webapplikasjoner med banebrytende teknologi som gir sømløse brukeropplevelser på tvers av alle plattformer. Finn ut hvordan ekspertisen vår driver digital transformasjon og...

THECODEST
Programvareutvikling

Topp 10 Latvia-baserte programvareutviklingsselskaper

I vår nyeste artikkel kan du lese mer om Latvias beste programvareutviklingsselskaper og deres innovative løsninger. Oppdag hvordan disse teknologilederne kan bidra til å løfte virksomheten din.

thecodest
Løsninger for bedrifter og oppskalering

Grunnleggende om Java-programvareutvikling: En guide til vellykket outsourcing

Utforsk denne viktige veiledningen om vellykket outsourcing av Java-programvareutvikling for å øke effektiviteten, få tilgang til ekspertise og drive frem prosjektsuksess med The Codest.

thecodest
Programvareutvikling

Den ultimate guiden til outsourcing i Polen

Den kraftige økningen i outsourcing i Polen er drevet av økonomiske, utdanningsmessige og teknologiske fremskritt, noe som fremmer IT-vekst og et forretningsvennlig klima.

TheCodest
Løsninger for bedrifter og oppskalering

Den komplette guiden til verktøy og teknikker for IT-revisjon

IT-revisjoner sørger for sikre, effektive og kompatible systemer. Les hele artikkelen for å lære mer om viktigheten av dem.

The Codest
Jakub Jakubowicz CTO og medgrunnlegger

Abonner på vår kunnskapsbase og hold deg oppdatert på ekspertisen fra IT-sektoren.

    Om oss

    The Codest - Internasjonalt programvareutviklingsselskap med teknologisentre i Polen.

    Storbritannia - Hovedkvarter

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

    Polen - Lokale teknologisentre

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

      The Codest

    • Hjem
    • Om oss
    • Tjenester
    • Casestudier
    • Vet hvordan
    • Karriere
    • Ordbok

      Tjenester

    • Det rådgivende
    • Programvareutvikling
    • Backend-utvikling
    • Frontend-utvikling
    • Staff Augmentation
    • Backend-utviklere
    • Ingeniører i skyen
    • Dataingeniører
    • Annet
    • QA-ingeniører

      Ressurser

    • Fakta og myter om samarbeid med en ekstern programvareutviklingspartner
    • Fra USA til Europa: Hvorfor velger amerikanske oppstartsbedrifter å flytte til Europa?
    • Sammenligning av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinene), Eurasia (Tyrkia)
    • Hva er de største utfordringene for CTO-er og CIO-er?
    • The Codest
    • The Codest
    • The Codest
    • Retningslinjer for personver
    • Vilkår for bruk av nettstedet

    Opphavsrett © 2025 av The Codest. Alle rettigheter forbeholdt.

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