将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察
The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...
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'].
走る
名前を指定します: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(カバレッジ・レポーター・サークルチ・トークン
プロジェクトの「設定」セクション。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イメージのリスト
サークルシー
使用済みの宝石や道具
続きを読む