window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes 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 - Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2019-07-23
Udvikling af software

CircleCI

Codest

Damian Watroba

Software Engineer

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.

RUBOCOP

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:

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

ESLINT

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.

løb:
    navn: Eslint
    kommando: npm run eslint

RSPEC

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:

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

- store_test_results:
    path: /tmp/test-resultater

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.

 store_artifacts:
    sti: /tmp/test-resultater

BRAKEMAN

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.

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

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.

 løb:
    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, 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.

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

- store_artifacts:
    path: /tmp/rubycritic

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.

Ruby

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']
  • .config.yml
 Kør:
    navn: Kør Rubycritic
    kommando: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

 store_artifacts:
    path: /tmp/rubycritic

 kør:
    name: Rubycritic-meddelelse
    kommando: bundle exec rake circleci:report_coverage

Nu skal vi generere to nøgler:

DÆKNING_REPORTER_CIRCLECI_TOKEN

API-token

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

symbol

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:

miljøvariabel
Tilføj variabel

Eksempel på konfiguration:

job:
  build:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
      miljø:
        BUNDLER_VERSION: 2.0.1
        BUNDLE_PATH: /bundle
        BUNDLE_JOBS: 4
        RAILS_ENV: test
    - image: circleci/postgres:10.1-alpine
      miljø:
        POSTGRES_USER: postgres
        POSTGRES_DB: eksempel_test
        POSTGRES_PASSWORD: eksempel
    - image: circleci/redis:4.0.8-alpine
    working_directory: ~/insights
    miljø:
        TZ: Europa/Varszawa
    trin:
      - checkout
      - kør:
          navn: Installer bundler version 2.0.1
          kommando: gem install bundler -v 2.0.1
      - gendan_cache:
          keys:
            - v1-ruby-dependencies-(( checksum "Gemfile.lock" ))
            - v1-ruby-afhængigheder-
      - run:
          navn: Bundle Install
          kommando: bundt check || bundt install
      - save_cache:
          key: v1-ruby-dependencies-(( checksum "Gemfile.lock" ))
          paths:
            - vendor/bundle
      - restore_cache:
          keys:
            - v1-npm-dependencies-(( checksum "package.json" ))
            - v1-npm-afhængigheder-
      - run:
          navn: Npm Install
          kommando: npm install
      - save_cache:
          key: v1-npm-dependencies-(( checksum "package.json" ))
          paths:
            - ~/insights/node_modules
      - kør:
        navn: Databaseopsætning
        command: |
          bundle exec rake db:create
          bundle exec rake db:schema:load
      - kør:
          name: Rubocop
          kommando: bundle exec rubocop
      - kør:
          navn: Eslint
          kommando: npm run eslint
      - kør:
          name: RSpec
          kommando: |
            mkdir /tmp/test-resultater
            TEST_FILES="$(circleci tests glob "spec/_spec.rb" | circleci tests split --split-by=timings)
              circleci tests split --split-by=timings)"
            bundle exec rspec
              --format fremskridt
              --format RspecJunitFormatter
              --out /tmp/test-results/rspec.xml
              --format progress
              $TEST_FILES
      - kø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
        miljø:
          BUNDLER_VERSION: 2.0.1
          BUNDLE_PATH: /bundle
          BUNDLE_JOBS: 4
          RAILS_ENV: test
          CIRCLE_ARTIFACTS: /tmp
    working_directory: ~/insights
    trin:
      - checkout
      - kør:
          navn: Installer bundler version 2.0.1
          kommando: gem install bundler -v 2.0.1
      - gendan_cache:
          keys:
            - v1-rubycritic-dependencies-(( checksum "Gemfile.lock" ))
            - v1-rubycritic-afhængigheder-
      - run:
          navn: Bundle Install
          kommando: bundt check || bundt install
      - save_cache:
          key: v1-rubycritic-dependencies-(( checksum "Gemfile.lock" ))
          paths:
            - vendor/bundle
      - run:
          name: Kør Rubycritic
          command: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
      - store_artifacts:
          path: /tmp/rubycritic
      - kør:
          name: Rubycritic-meddelelse
          kommando: bundle exec rake circleci:report_coverage

arbejdsgange:
  version: 2
  build_and_rubycritic:
    jobs:
      - build
      - rubycritic:
          kræver:
            - build

Kilder:

  • Liste over tilgængelige docker-images til CircleCi

    • Docker-billeder
  • CircleCi

    • Konfiguration CircleCi

      • Eksempel på konfiguration
      • Indsaml testdata
      • Brug af indsigt
      • Opbevaring af build-artefakter
  • Brugte ædelstene eller værktøjer

    • RuboCop

      • ESlint
      • RSpec
      • Bremser
      • RubyCtritic
      • Rapport om cirkeldækning

Læs mere om det:

  • Codests gode praksis for at bygge software: projektdokumentation
  • Hvordan skriver man en god kvalitetskode?
  • Åben-lukket-princippet. Får jeg nogensinde brug for det?

Relaterede artikler

Udvikling af software

Byg fremtidssikrede webapps: Indsigt fra The Codest's ekspertteam

Oplev, hvordan The Codest udmærker sig ved at skabe skalerbare, interaktive webapplikationer med banebrydende teknologier, der leverer sømløse brugeroplevelser på tværs af alle platforme. Lær, hvordan vores ekspertise driver digital transformation og...

DENKODEST
Udvikling af software

Top 10 Letlands-baserede softwareudviklingsvirksomheder

Læs om Letlands bedste softwareudviklingsvirksomheder og deres innovative løsninger i vores seneste artikel. Find ud af, hvordan disse teknologiledere kan hjælpe med at løfte din virksomhed.

thecodest
Løsninger til virksomheder og scaleups

Grundlæggende om Java-softwareudvikling: En guide til succesfuld outsourcing

Udforsk denne vigtige guide til vellykket outsourcing af Java-softwareudvikling for at forbedre effektiviteten, få adgang til ekspertise og skabe projektsucces med The Codest.

thecodest
Udvikling af software

Den ultimative guide til outsourcing i Polen

Den voldsomme stigning i outsourcing i Polen er drevet af økonomiske, uddannelsesmæssige og teknologiske fremskridt, der fremmer it-vækst og et erhvervsvenligt klima.

TheCodest
Løsninger til virksomheder og scaleups

Den komplette guide til IT-revisionsværktøjer og -teknikker

IT-revisioner sikrer sikre, effektive og kompatible systemer. Lær mere om deres betydning ved at læse hele artiklen.

Codest
Jakub Jakubowicz CTO og medstifter

Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

    Om os

    The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

    Storbritannien - Hovedkvarter

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

    Polen - Lokale teknologiske knudepunkter

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

      Codest

    • Hjem
    • Om os
    • Serviceydelser
    • Casestudier
    • Ved hvordan
    • Karriere
    • Ordbog

      Serviceydelser

    • Det rådgivende
    • Udvikling af software
    • Backend-udvikling
    • Frontend-udvikling
    • Staff Augmentation
    • Backend-udviklere
    • Cloud-ingeniører
    • Dataingeniører
    • Andet
    • QA-ingeniører

      Ressourcer

    • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
    • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
    • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
    • Hvad er de største udfordringer for CTO'er og CIO'er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Vilkår for brug af hjemmesiden

    Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

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