window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster już istnieje') } 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
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2019-07-23
Software Development

CircleCI

The Codest

Damian Watroba

Software Engineer

CircleCI to bardzo proste narzędzie, które jest dobrze skonfigurowane jako nadzorca naszych projektów. Ale czy sama konfiguracja jest prosta? To oczywiście zależy od złożoności projektu. W naszym przypadku (mono repo) okazało się to trudniejsze niż się spodziewaliśmy.

Konfiguracja dla projektów Ruby on Rails nie jest skomplikowana, a dokumentacja dokładnie opisuje każdy element config.yml. Chciałbym jednak skupić się na narzędziach circleci, które są używane, aby pomóc nam utrzymać konfigurację. kod czystość i zapewnienie dobrych praktyk.

RUBOCOP

Prawdopodobnie RuboCope nie wymaga przedstawiania, jednak dla tych, którzy nie są z nim zaznajomieni, jest to statyczny analizator i formater kodu Ruby. Jeśli już używasz rubocop w swoim projektWystarczy dodać CircleCI do pliku konfiguracyjnego:

 run:
    nazwa: Rubocop
    polecenie: bundle exec rubocop

ESLINT

ESLint jest narzędziem do identyfikowania i raportowania wzorców znalezionych w ECMAScript lub JavaScript aby kod był bardziej spójny i aby uniknąć błędów.

run:
    nazwa: Eslint
    polecenie: npm run eslint

RSPEC

W RSpec testy to nie tylko skrypty weryfikujące kod aplikacji, ale także szczegółowe wyjaśnienia, jak aplikacja powinna się zachowywać, wyrażone w prostym języku angielskim:

run:
    name: RSpec
    polecenie: |
      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:
    path: /tmp/test-results

W przypadku RSpec zapisujemy wynik testu we wcześniej utworzonym katalogu /tmp/test-results w pliku rspec.xml, a następnie za pomocą funkcji skleptestwyniki przechowujemy dany katalog. Teraz zakładka Insights da nam dostęp do takich informacji jak mediana czasu kompilacji, czas ostatniej kompilacji czy współczynnik sukcesu. Możesz przeczytać więcej o zakładce Insights tutaj. Jeśli chcemy przechowywać plik rspec.xml jako "artefakt", musimy dodać atrybut store_artifacts w naszym pliku konfiguracyjnym.

 store_artifacts:
    path: /tmp/test-results

BRAKEMAN

Brakeman to narzędzie do analizy statycznej, które sprawdza aplikacje Ruby on Rails pod kątem luk w zabezpieczeniach. Domyślnie Brakeman zwraca niezerowy kod wyjścia w przypadku wykrycia ostrzeżeń dotyczących bezpieczeństwa lub napotkania błędów skanowania. Dlatego skupiliśmy się tylko na krytycznych błędach, a ostrzeżenia zostały wyłączone.

bieg:
    nazwa: Brakeman
    polecenie: bundle exec brakeman --no-exit-on-warn

Jeśli chcemy również przechowywać wynik skanowania w taki sam sposób jak RSpec, nasza konfiguracja będzie wyglądać następująco, a dostęp do naszego pliku będziemy mieli w zakładce Artifacts.

 bieg:
    nazwa: Brakeman
    polecenie: |
      mkdir /tmp/brakeman
      bundle exec brakeman --no-exit-on-warn -o /tmp/brakeman/output.json

- store_artifacts:
    path: /tmp/brakeman

RUBYCRITIC

RubyCritic to gem, który używa gemów do analizy statycznej, takich jak Reek, Flay i Flog, aby dostarczyć raport o jakości kodu. Raport zawiera ocenę A / B / C / D / F, każdy plik w naszym projekcie, który chcemy przeskanować i dokładne miejsca, które wymagają poprawy, a także dokumentację z każdym alertem (np: TooManyMethods). Narzędzie to pełni rolę konsultanta w projekcie. Na podstawie otrzymanego raportu ostateczna decyzja o tym, czy nasz kod faktycznie wymaga poprawek, zależy od dewelopera. W naszej konfiguracji circleci przypisany jest osobny job odpowiedzialny za przygotowanie raportu i wysłanie specjalnego komentarza z wynikiem na githuba.

Podstawowa konfiguracja rubycritic nie różni się od poprzednich.

 run:
    name: Rubycritic
    polecenie: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

- store_artifacts:
    path: /tmp/rubycritic

Standardowo uruchamiamy bundle z informacją, który katalog chcemy przeskanować ./app, w którym miejscu chcemy zapisać wynik -p /tmp/rubycritic (rubycritic automatycznie tworzy katalog, w którym będziemy przechowywać nasz raport), w jakim formacie -f json i opcja -no- browser. Używamy również gema circleci-coverage_reporter, który po skanowaniu umieszcza komentarz na githubie w naszym pull request z linkiem do raportu i procentową oceną przeskanowanych plików.

Ruby

Aby powyższy gem działał poprawnie razem z circleci, musimy dodać go do naszego projektu i wygenerować dwa klucze (jeden z nich to circleci, drugi to github).

Instalacja standardowa:

  • Gemfile
    gem 'circleci-coverage_reporter'
  • Rakefile
    require 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI']
  • .config.yml
 run:
    name: Run Rubycritic
    polecenie: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

 store_artifacts:
    path: /tmp/rubycritic

 run:
    name: Rubycritic notification
    polecenie: bundle exec rake circleci:report_coverage

Teraz musimy wygenerować dwa klucze:

COVERAGE_REPORTER_CIRCLECI_TOKEN

Token API

Sekcja "ustawienia" naszego projektu. Po wybraniu "Create Token" zmieniamy zakres na "all" i wypełniamy etykietę tokena. Token do API zostanie wygenerowany po kliknięciu

COVERAGE_REPORTER_VCS_TOKEN

token

Zakres klucza do repozytorium

Po wygenerowaniu kluczy, musimy dodać je do naszych zmiennych środowiskowych w Ustawienia:

zmienna środowiskowa
dodać zmienną

Przykładowa konfiguracja:

praca:
  build:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
      środowisko:
        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
    środowisko:
        TZ: Europa/Warszawa
    kroki:
      - checkout
      - run:
          nazwa: Zainstaluj bundler w wersji 2.0.1
          polecenie: gem install bundler -v 2.0.1
      - restore_cache:
          keys:
            - v1-ruby-dependencies-(( suma kontrolna "Gemfile.lock" ))
            - v1-ruby-dependencies-
      - run:
          nazwa: Bundle Install
          polecenie: bundle check || bundle install
      - save_cache:
          key: v1-ruby-dependencies-(( checksum "Gemfile.lock" ))
          paths:
            - vendor/bundle
      - restore_cache:
          keys:
            - v1-npm-dependencies-(( checksum "package.json" ))
            - v1-npm-dependencies-
      - run:
          nazwa: Npm Install
          polecenie: npm install
      - save_cache:
          key: v1-npm-dependencies-(( checksum "package.json" ))
          paths:
            - ~/insights/node_modules
      - run:
        nazwa: Konfiguracja bazy danych
        polecenie: |
          bundle exec rake db:create
          bundle exec rake db:schema:load
      - run:
          name: Rubocop
          polecenie: bundle exec rubocop
      - run:
          name: Eslint
          polecenie: npm run eslint
      - run:
          name: RSpec
          polecenie: |
            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
      - run:
          name: Brakeman
          polecenie: bundle exec brakeman --no-exit-on-warn
      - store_test_results:
          path: /tmp/test-results
  rubycritic:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
        środowisko:
          BUNDLER_VERSION: 2.0.1
          BUNDLE_PATH: /bundle
          BUNDLE_JOBS: 4
          RAILS_ENV: test
          CIRCLE_ARTIFACTS: /tmp
    working_directory: ~/insights
    kroki:
      - checkout
      - run:
          nazwa: Zainstaluj bundler w wersji 2.0.1
          polecenie: gem install bundler -v 2.0.1
      - restore_cache:
          keys:
            - v1-rubycritic-dependencies-(( suma kontrolna "Gemfile.lock" ))
            - v1-rubycritic-dependencies-
      - run:
          nazwa: Bundle Install
          polecenie: bundle check || bundle install
      - save_cache:
          key: v1-rubycritic-dependencies-(( suma kontrolna "Gemfile.lock" ))
          paths:
            - vendor/bundle
      - run:
          name: Run Rubycritic
          polecenie: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
      - store_artifacts:
          path: /tmp/rubycritic
      - run:
          name: Rubycritic notification
          polecenie: bundle exec rake circleci:report_coverage

przepływy pracy:
  wersja: 2
  build_and_rubycritic:
    jobs:
      - build
      - rubycritic:
          wymaga:
            - build

Źródła:

  • Lista dostępnych obrazów docker dla CircleCi

    • Obrazy Docker
  • CircleCi

    • Konfiguracja CircleCi

      • Przykładowa konfiguracja
      • Zbieranie danych testowych
      • Korzystanie z funkcji Insights
      • Przechowywanie artefaktów kompilacji
  • Używane klejnoty lub narzędzia

    • RuboCop

      • ESlint
      • RSpec
      • Brakeman
      • RubyCtritic
      • Raport o zasięgu okręgu

Czytaj więcej:

  • Dobre praktyki Codest dotyczące tworzenia oprogramowania: dokumentacja projektu
  • Jak napisać dobry i jakościowy kod?
  • Zasada otwarte-zamknięte. Czy kiedykolwiek będę musiał jej użyć?

Powiązane artykuły

Software Development

Tworzenie przyszłościowych aplikacji internetowych: spostrzeżenia zespołu ekspertów The Codest

Odkryj, w jaki sposób The Codest wyróżnia się w tworzeniu skalowalnych, interaktywnych aplikacji internetowych przy użyciu najnowocześniejszych technologii, zapewniając płynne doświadczenia użytkowników na wszystkich platformach. Dowiedz się, w jaki sposób nasza wiedza napędza transformację cyfrową i biznes...

THEECODEST
Software Development

10 najlepszych firm tworzących oprogramowanie na Łotwie

Dowiedz się więcej o najlepszych łotewskich firmach programistycznych i ich innowacyjnych rozwiązaniach w naszym najnowszym artykule. Odkryj, w jaki sposób ci liderzy technologiczni mogą pomóc w rozwoju Twojej firmy.

thecodest
Rozwiązania dla przedsiębiorstw i scaleupów

Podstawy tworzenia oprogramowania Java: Przewodnik po skutecznym outsourcingu

Zapoznaj się z tym niezbędnym przewodnikiem na temat skutecznego tworzenia oprogramowania Java outsourcing, aby zwiększyć wydajność, uzyskać dostęp do wiedzy specjalistycznej i osiągnąć sukces projektu z The Codest.

thecodest
Software Development

Kompletny przewodnik po outsourcingu w Polsce

Wzrost liczby outsourcing w Polsce jest napędzany przez postęp gospodarczy, edukacyjny i technologiczny, sprzyjający rozwojowi IT i przyjazny klimat dla biznesu.

TheCodest
Rozwiązania dla przedsiębiorstw i scaleupów

Kompletny przewodnik po narzędziach i technikach audytu IT

Audyty IT zapewniają bezpieczne, wydajne i zgodne z przepisami systemy. Dowiedz się więcej o ich znaczeniu, czytając cały artykuł.

The Codest
Jakub Jakubowicz CTO & Współzałożyciel

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest - Międzynarodowa firma programistyczna z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA
      Londyn, Anglia

    Polska - lokalne centra technologiczne

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

      The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

      Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

      Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2025 by The Codest. Wszelkie prawa zastrzeżone.

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