window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() サークルシーアイ - The Codest
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2019-07-23
ソフトウェア開発

サークルCI

The Codest

ダミアン・ワトロバ

Software Engineer

CircleCIは非常にシンプルなツールで、私たちのプロジェクトのスーパーバイザーとしてよく設定されている。しかし、設定そのものはシンプルなのだろうか?もちろん、これはプロジェクトの複雑さに依存する。私たちの場合(mono repo)、予想以上に難しいことが判明した。

Ruby on Railsプロジェクトのコンフィギュレーションは複雑ではありません。 ドキュメンテーション は、config.yml の各要素を正確に記述している。しかし、私は、config.ymlの各要素を正確に記述するために使用されるcircleciツールに焦点を当てたいと思います。 コード 清潔にし、良い習慣を徹底する。

ルボコップ

RuboCopeは紹介するまでもないだろうが、ご存じない方のために説明すると、静的なRubyコード解析ツールであり、整形ツールである。すでに プロジェクトCircleCIを設定ファイルに追加するだけである:

 走る
    名前Rubocop
    コマンド: bundle exec rubocop

イーサリント

ESLint は、ECMAScript または JavaScript コードの一貫性を高め、エラーを避けるためだ。

走る
    名前: Eslint
    コマンド: npm run eslint

リスペック

RSpecでは、テストはアプリケーションコードを検証するスクリプトであるだけでなく、アプリケーションがどのように動作すべきかを、簡単な英語で表現した詳細な説明でもあります:

走る
    名前を指定します:RSpec
    コマンドを実行します:|
      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:
    パス:/tmp/テスト結果

RSpecの場合、テスト結果をrspec.xmlファイルにあらかじめ作成したカタログ/tmp/test-resultsに保存します。 店舗テスト結果 キーで指定したカタログを保存する。Insightsタブでは、コンパイル時間の中央値、最後のコンパイルの時間、成功率などの情報にアクセスできる。インサイトタブの詳細はこちら これ.rspec.xmlファイルを「アーティファクト」として保存したい場合は、次のようにします。 ストア_アーティファクト キーを設定ファイルに追加する。

 store_artifacts:
    パス/tmp/テスト結果

ブレーキマン

Brakeman は、Ruby on Rails アプリケーションのセキュリティ脆弱性をチェックする静的解析ツールです。デフォルトでは、Brakeman はセキュリティ警告が検出されたり、スキャン・エラーが発生した場合、ゼロ以外の終了コードを返します。したがって、私たちは重大なエラーにのみ焦点を当て、警告はオフにしました。

走る
    name: ブレーキマン
    command: bundle exec brakeman --no-exit-on-warn

スキャン結果もRSpecと同じように保存したい場合、設定は次のようになり、Artifactsタブでファイルにアクセスできるようになる。

 走る
    名前: Brakeman
    コマンドを実行する:|
      mkdir /tmp/brakeman
      bundle exec brakeman --no-exit-on-warn -o /tmp/brakeman/output.json

- store_artifacts:
    パス:/tmp/brakeman

ルビークリティック

RubyCriticは、ReekやFlay、Flogといった静的解析用のgemを使って、コードの品質に関するレポートを提供するgemです。レポートには、A / B / C / D / Fの評価、スキャンしてもらいたいプロジェクト内のすべてのファイル、改善が必要な正確な場所、各アラートに関するドキュメント(例: TooManyMethods).このツールはプロジェクトのコンサルタントとして機能する。受け取ったレポートに基づいて、私たちのコードを実際に修正する必要があるかどうかの最終的な決定は、開発者に依存します。私たちのcircleciの構成では、レポートを作成し、その結果をgithubに特別なコメントとして送信することを担当する別のジョブが割り当てられています。

rubycriticの基本的な構成は、これまでのものと変わらない。

 走る
    という名前で実行します:Rubycritic
    command: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

- store_artifacts:
    パスを指定する:/tmp/rubycritic

標準では、./appをスキャンするディレクトリ、結果を保存する場所 -p /tmp/rubycritic(rubycriticは自動的にレポートを保存するディレクトリを作成します)、フォーマット -f json、オプション -no-browserを指定して、バンドルを実行します。また、gem サークルチ・カバレッジ・レポータースキャンが終わると、githubのプルリクエストに、レポートへのリンクとスキャンしたファイルのパーセンテージをコメントとして追加します。

ルビー

上記のgemをcircleciと一緒に正しく動作させるためには、プロジェクトに追加し、2つのキーを生成する必要がある(1つはcircleci、もう1つはgithub)。

標準設置:

  • ジェムファイル
    gem 'circleci-coverage_reporter'
  • レーキファイル
    require 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI'].
  • .config.yml
 走る
    名前を指定します:Rubycriticを実行
    command: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

 store_artifacts:
    パスを指定する:/tmp/rubycritic

 を実行します:
    名前Rubycritic 通知
    コマンド: bundle exec rake circleci:report_coverage

ここで、2つのキーを生成しなければならない:

coverage_reporter_circleci_token(カバレッジ・レポーター・サークルチ・トークン

APIトークン

プロジェクトの「設定」セクション。Create Token」を選択したら、スコープを「all」に変更し、Tokenラベルを入力します。をクリックすると、APIへのトークンが生成されます。

coverage_reporter_vcs_token。

トークン

レポのキーの範囲

キーを生成したら、それを 設定:

環境変数
変数の追加

サンプル構成:

仕事
  ビルドします:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
      環境
        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
    作業ディレクトリ~/insights
    環境
        TZ: ヨーロッパ/ワルシャワ
    ステップ
      - チェックアウト
      - 実行する
          name: bundler バージョン 2.0.1 をインストールする。
          コマンド: gem install bundler -v 2.0.1
      - restore_cache:
          キーに
            - v1-ruby-dependencies-(( checksum "Gemfile.lock" ))
            - v1-ruby-dependencies
      - を実行する:
          name: バンドルインストール
          コマンド: bundle check || bundle install
      - save_cache:
          key: v1-ruby-dependencies-(( checksum "Gemfile.lock" ))
          パスを指定します:
            - vendor/bundle
      - restore_cache:
          キー:
            - v1-npm-dependencies-(( checksum "package.json" ))
            - v1-npm-dependencies
      - を実行します:
          name: Npm インストール
          コマンド: npm install
      - save_cache:
          key: v1-npm-dependencies-(( checksum "package.json" ))
          パス:
            - ~/insights/node_modules
      - を実行する:
        name: データベースのセットアップ
        コマンドを実行します:|
          bundle exec rake db:create
          バンドル実行 rake db:schema:load
      - を実行します:
          名前Rubocop
          コマンド: bundle exec rubocop
      - コマンドを実行します:
          name: Eslint
          コマンド: npm run eslint
      - を実行します:
          コマンドを実行します:RSpec
          コマンドを実行します:|
            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
      - を実行する:
          name: ブレーキマン
          command: bundle exec brakeman --no-exit-on-warn
      - store_test_results:
          パス/tmp/test-results
  rubycritic:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
        環境
          bundler_version: 2.0.1
          BUNDLE_PATH: /bundle
          BUNDLE_JOBS: 4
          RAILS_ENV: test
          circle_artifacts:/tmp
    作業ディレクトリ~/insights
    ステップ
      - チェックアウト
      - を実行します:
          name: bundler バージョン 2.0.1 をインストールする
          コマンド: gem install bundler -v 2.0.1
      - restore_cache:
          キーに
            - v1-rubycritic-dependencies-(( checksum "Gemfile.lock" ))
            - v1-rubycritic-dependencies- (チェックサム "Gemfile.lock" )。
      - を実行します:
          name: バンドルインストール
          コマンド: bundle check || bundle install
      - save_cache:
          key: v1-rubycritic-dependencies-(( checksum "Gemfile.lock" ))
          パスを指定します:
            - vendor/bundle
      - を実行します:
          名前を指定します:Rubycriticを実行
          command: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
      - store_artifacts:
          パスを指定する:/tmp/rubycritic
      - を実行する:
          name:Rubycritic 通知
          コマンド: bundle exec rake circleci:report_coverage

ワークフロー
  バージョン: 2
  build_and_rubycritic:
    ジョブを
      - ビルド
      - rubycritic:
          が必要です:
            - ビルド

情報源

  • CircleCiで利用可能なdockerイメージのリスト

    • ドッカーイメージ
  • サークルシー

    • 設定 CircleCi

      • サンプル設定
      • テストデータの収集
      • インサイトの利用
      • ビルド成果物の保存
  • 使用済みの宝石や道具

    • ルボコップ

      • エスリント
      • アールエスペック
      • ブレーキマン
      • ルビークリティック
      • サークル取材レポート

続きを読む

  • コーデストのソフトウェア構築のためのグッドプラクティス:プロジェクト・ドキュメント
  • 良質なコードを書くには?
  • オープンクローズの原則。使う必要があるのか?

関連記事

ソフトウェア開発

将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察

The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...

ザ・コデスト
ソフトウェア開発

ラトビアを拠点とするソフトウェア開発企業トップ10社

ラトビアのトップソフトウェア開発企業とその革新的なソリューションについて、最新記事でご紹介します。ラトビアの技術リーダーたちがあなたのビジネスをどのように向上させるかをご覧ください。

thecodest
エンタープライズ&スケールアップ・ソリューション

Javaソフトウェア開発の要点:アウトソーシングを成功させるためのガイド

outsourcingのJavaソフトウェア開発を成功させるために不可欠なこのガイドを読んで、The Codestで効率性を高め、専門知識にアクセスし、プロジェクトを成功に導きましょう。

thecodest
ソフトウェア開発

ポーランドにおけるアウトソーシングの究極ガイド

ポーランドのoutsourcingの急増は、経済、教育、技術の進歩がITの成長とビジネス・フレンドリーな環境を促進していることによる。

ザ・コデスト
エンタープライズ&スケールアップ・ソリューション

IT監査ツール&テクニック完全ガイド

IT監査は、安全かつ効率的で、コンプライアンスに準拠したシステムを保証します。その重要性については、記事全文をお読みください。

The Codest
ヤクブ・ヤクボヴィッチ CTO & 共同創設者

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

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