The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2019-07-23
Vývoj softwaru

CircleCI

The Codest

Damian Watroba

Software Engineer

CircleCI je velmi jednoduchý nástroj, který je dobře nakonfigurován jako supervizor našich projektů. Je však jednoduchá i samotná konfigurace? To samozřejmě závisí na složitosti projektu. V našem případě (mono repo) se ukázalo, že je to složitější, než jsme očekávali.

Konfigurace pro Ruby na adrese Rails projektů není složitý a dokumentace přesně popisuje jednotlivé prvky souboru config.yml. Chtěl bych se však zaměřit na nástroje circleci, které se používají k pomoci nás zachovat kód čistotu a zajištění správné praxe.

RUBOCOP

Je pravděpodobné, že RuboCope není třeba představovat, nicméně pro ty, kteří jej neznají, se jedná o statický analyzátor a formátor kódu jazyka Ruby. Pokud již používáte rubocop ve svém projekt, stačí do konfiguračního souboru přidat CircleCI:

 běh:
    jméno: Rubocop
    příkaz: bundle exec rubocop

ESLINT

ESLint je nástroj pro identifikaci a hlášení vzorů nalezených v jazyce ECMAScript, resp. JavaScript kódu, aby byl kód konzistentnější a aby se předešlo chybám.

běh:
    název: Eslint
    příkaz: npm run eslint

RSPEC

V RSpecu jsou testy nejen skripty, které ověřují kód aplikace, ale také podrobné vysvětlení toho, jak by se aplikace měla chovat, vyjádřené jednoduchou angličtinou:

běh:
    jméno: RSpec
    command: |
      mkdir /tmp/test-results
      TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
        circleci tests split --split-by=timings)"
      bundle exec rspec
        --format progress
        --format RspecJunitFormatter
        --out /tmp/test-results/rspec.xml
        --format progress
        $TEST_FILES

- store_test_results:
    cesta: /tmp/test-results

V případě RSpec uložíme výsledek testu do předem vytvořeného katalogu /tmp/test-results v souboru rspec.xml a poté pomocí příkazu ukládattestvýsledky ukládáme daný katalog. Nyní nám karta Insights umožní přístup k informacím, jako je medián času kompilace, čas poslední kompilace nebo úspěšnost. Více informací o kartě Insights si můžete přečíst zde. Pokud chceme soubor rspec.xml uložit jako "artefakt", musíme přidat příkaz store_artifacts v našem konfiguračním souboru.

 store_artifacts:
    cesta: /tmp/test-results

BRAKEMAN

Brakeman je nástroj statické analýzy, který kontroluje Ruby on Rails aplikací z hlediska bezpečnostních zranitelností. Ve výchozím nastavení vrátí Brakeman nenulový výstupní kód, pokud jsou zjištěna bezpečnostní varování nebo dojde k chybám při skenování. Proto jsme se zaměřili pouze na kritické chyby a varování jsme vypnuli.

běh:
    název: Brakeman
    příkaz: bundle exec brakeman --no-exit-on-warn

Pokud chceme výsledek skenování ukládat stejným způsobem jako RSpec, bude naše konfigurace vypadat takto a na kartě Artefakty budeme mít přístup k našemu souboru.

 běh:
    název: Brakeman
    příkaz: |
      mkdir /tmp/brakeman
      bundle exec brakeman --no-exit-on-warn -o /tmp/brakeman/output.json

- store_artifacts:
    cesta: /tmp/brakeman

RUBYCRITIC

RubyCritic je drahokam, který využívá drahokamy pro statickou analýzu, jako jsou Reek, Flay a Flog, a poskytuje zprávu o kvalitě vašeho kódu. Zpráva obsahuje hodnocení A / B / C / D / F, každý soubor v našem projektu, který chceme nechat zkontrolovat, a přesná místa, která je třeba zlepšit, a dokumentaci ke každému upozornění (např: TooManyMethods). Tento nástroj funguje jako poradce v projektu. Na základě obdržené zprávy závisí konečné rozhodnutí, zda je náš kód skutečně třeba opravit, na vývojáři. V naší konfiguraci circleci je přiřazena samostatná úloha, která je zodpovědná za přípravu reportu a odeslání speciálního komentáře s výsledkem na github.

Základní konfigurace programu rubycritic se neliší od předchozích.

 běh:
    jméno: Rubycritic
    příkaz: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

- store_artifacts:
    cesta: /tmp/rubycritic

Standardně projdeme balíček s informacemi o tom, který adresář chceme skenovat ./app, na které místo chceme uložit výsledek -p /tmp/rubycritic (rubycritic automaticky vytvoří adresář, do kterého uložíme naši zprávu), v jakém formátu -f json a volbu -no- browser. Použijeme také gem circleci-coverage_reporter, který po skenování vloží na github do našeho pull requestu komentář s odkazem na zprávu a procentuálním hodnocením skenovaných souborů.

Ruby

Aby výše uvedený gem správně fungoval společně s circleci, musíme jej přidat do našeho projektu a vygenerovat dva klíče (jeden z nich je circleci, druhý je github).

Standardní instalace:

  • Gemfile
    gem 'circleci-coverage_reporter'
  • Soubor Rakefile
    require 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI']
  • .config.yml
 běh:
    jméno: Spustit Rubycritic
    příkaz: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

 store_artifacts:
    cesta: /tmp/rubycritic

 run:
    name: Rubycritic notification
    příkaz: bundle exec rake circleci:report_coverage

Nyní musíme vygenerovat dva klíče:

COVERAGE_REPORTER_CIRCLECI_TOKEN

Token API

Sekce "nastavení" našeho projektu. Po výběru možnosti "Vytvořit token" změňte rozsah na "vše" a vyplňte štítek tokenu. Token k API bude vygenerován po kliknutí na tlačítko

COVERAGE_REPORTER_VCS_TOKEN

token

Rozsah klíče k repozitáři

Po vygenerování klíčů je musíme přidat do proměnných prostředí v položce Nastavení:

proměnná prostředí
přidat proměnnou

Vzorová konfigurace:

pracovních míst:
  stavět:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
      prostředí:
        BUNDLER_VERSION: 2.0.1
        BUNDLE_PATH: /bundle
        BUNDLE_JOBS: 4
        RAILS_ENV: test
    - image: circleci/postgres:10.1-alpine
      
        POSTGRES_USER: postgres
        POSTGRES_DB: example_test
        POSTGRES_PASSWORD: example
    - image: circleci/redis:4.0.8-alpine
    working_directory: ~/insights
    environment: (prostředí), v němž se nachází:
        TZ: Europe/Warsaw
    Kroky:
      - Pokračování: checkout
      - spustit:
          název: Nainstalovat bundler verze 2.0.1
          příkaz: gem install bundler -v 2.0.1
      - restore_cache:
          klíče:
            - v1-ruby-dependencies-(( checksum "Gemfile.lock" ))
            - v1-ruby-dependencies-
      - run:
          název: Bundle Install
          příkaz: bundle check || bundle install
      - save_cache:
          klíč: v1-ruby-dependencies-(( kontrolní součet "Gemfile.lock" ))
          paths:
            - vendor/bundle
      - restore_cache:
          klíče:
            - v1-npm-dependencies-(( checksum "package.json" ))
            - v1-npm-dependencies-
      - run:
          název: Npm Install
          příkaz: npm install
      - save_cache:
          klíč: v1-npm-dependencies-(( kontrolní součet "package.json" ))
          paths:
            - ~/insights/node_modules
      - spustit:
        name: Nastavení databáze
        command: |
          bundle exec rake db:create
          bundle exec rake db:schema:load
      - run:
          name: Rubocop
          příkaz: bundle exec rubocop
      - run:
          název: Eslint
          příkaz: npm run eslint
      - run:
          název: RSpec
          příkaz: |
            mkdir /tmp/test-results
            TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
              circleci tests split --split-by=timings)"
            bundle exec rspec
              --format progress
              --format RspecJunitFormatter
              --out /tmp/test-results/rspec.xml
              --format progress
              $TEST_FILES
      - spustit:
          name: Brakeman
          příkaz: bundle exec brakeman --no-exit-on-warn
      - store_test_results:
          cesta: /tmp/test-results
  rubycritic:
    docker:
      - 2.5.1-node-browsers: image: circleci/ruby:2.5.1-node-browsers
        prostředí:
          BUNDLER_VERSION: 2.0.1
          BUNDLE_PATH: /bundle
          BUNDLE_JOBS: 4
          RAILS_ENV: test
          CIRCLE_ARTIFACTS: /tmp
    working_directory: ~/insights
    steps:
      - checkout
      - spustit:
          název: Nainstalovat bundler verze 2.0.1
          příkaz: gem install bundler -v 2.0.1
      - restore_cache:
          klíče:
            - v1-rubycritic-dependencies-(( checksum "Gemfile.lock" ))
            - v1-rubycritic-dependencies-
      - run:
          název: Bundle Install
          příkaz: bundle check || bundle install
      - save_cache:
          klíč: v1-rubycritic-dependencies-(( checksum "Gemfile.lock" ))
          paths:
            - vendor/bundle
      - run:
          name: Run Rubycritic
          příkaz: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
      - store_artifacts:
          cesta: /tmp/rubycritic
      - run:
          name: Rubycritic notification
          příkaz: bundle exec rake circleci:report_coverage

pracovní postupy:
  verze: 2
  build_and_rubycritic:
    úlohy:
      - build
      - rubycritic:
          vyžaduje:
            - build

Zdroje:

  • Seznam dostupných obrazů dockeru pro CircleCi

    • Obrazy aplikace Docker
  • CircleCi

    • Konfigurace CircleCi

      • Vzorová konfigurace
      • Shromažďování testovacích dat
      • Používání aplikace Insights
      • Ukládání artefaktů sestavení
  • Použité drahokamy nebo nástroje

    • RuboCop

      • ESlint
      • RSpec
      • Brzdař
      • RubyCtritic
      • Zpráva o pokrytí okruhu

Přečtěte si více:

  • Osvědčené postupy společnosti Codest pro tvorbu softwaru: projektová dokumentace
  • Jak napsat dobrý a kvalitní kód?
  • Princip "otevřeno-uzavřeno". Musím ho někdy použít?

Související články

Ilustrace zdravotnické aplikace pro chytré telefony s ikonou srdce a rostoucím zdravotním grafem, označená logem The Codest, která představuje digitální zdraví a řešení HealthTech.
Vývoj softwaru

Softwarové vybavení pro zdravotnictví: a případy použití

Nástroje, na které se dnes zdravotnické organizace spoléhají, se v ničem nepodobají papírovým kartám z doby před desítkami let. zdravotnický software dnes podporuje zdravotnické systémy, péči o pacienty a moderní poskytování zdravotní péče v klinických a...

NEJKRÁSNĚJŠÍ
Abstraktní ilustrace klesajícího sloupcového grafu se stoupající šipkou a zlatou mincí symbolizující efektivitu nákladů nebo úspory. V levém horním rohu se zobrazuje logo The Codest se sloganem "In Code We Trust" na světle šedém pozadí.
Vývoj softwaru

Jak rozšířit tým vývojářů bez ztráty kvality produktu

Zvětšujete svůj vývojový tým? Zjistěte, jak růst, aniž byste museli obětovat kvalitu produktu. Tento průvodce se zabývá příznaky, že je čas na škálování, strukturou týmu, najímáním zaměstnanců, vedením a nástroji - a také tím, jak může The Codest...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

Vytváření webových aplikací odolných vůči budoucnosti: postřehy týmu odborníků The Codest

Zjistěte, jak společnost The Codest vyniká při vytváření škálovatelných, interaktivních webových aplikací pomocí nejmodernějších technologií, které poskytují bezproblémové uživatelské prostředí na všech platformách. Zjistěte, jak naše odborné znalosti podporují digitální transformaci a obchodní...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

10 nejlepších lotyšských společností zabývajících se vývojem softwaru

V našem nejnovějším článku se dozvíte o nejlepších lotyšských společnostech zabývajících se vývojem softwaru a jejich inovativních řešeních. Zjistěte, jak mohou tito technologičtí lídři pomoci pozvednout vaše podnikání.

thecodest
Podniková a škálovací řešení

Základy vývoje softwaru v jazyce Java: A Guide to Outsourcing Successfully

Prozkoumejte tuto základní příručku o úspěšném vývoji softwaru outsourcing Java, abyste zvýšili efektivitu, získali přístup k odborným znalostem a dosáhli úspěchu projektu s The Codest.

thecodest

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

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