概要この記事はCircleCI Advent Calendar 2020の9日目の記事です。 スタディスト開発部の笹木です。今年に入ってからは開発基盤チームという位置づけで、開発環境の整備や、CI含むテスト自動化周りを担当しています。 本記事では、RSpecのテスト実行時間を半減させ、CircleCIの消費クレジットを大幅削減した取り組みについてご紹介します。(消費クレジットについては後述します) 改善の結果が以下のグラフで、定点観測しているジョブの消費クレジットが、ピーク時の半分にまで落とせていることがわかります。もちろんテストコードを減らすといった本末転倒なことはしていません。 RSpecジョブ実行時の、CircleCI消費クレジットを時系列で表したグラフ実施した取り組みは以下の通りです。 CircleCIの料金体系を知る問題を認識するCircleCIの利用状況を可視化するRSpecの
Teachme Bizの開発は、最近UIのリニューアルも予定されていて、プルリクやコミットのペースが著しく速くなってきている。開発のルールとしてテストが全部通ったものしかマージしないという風になっていて、プルリクをマージするにテストを待たないといけない。要するにCIを素早くしないと開発が止まる。 数値に関してTeachme Bizの自動テストは、Vue JSのフロント側に関してKarma、ルビー側はrspecを利用している。3月のRails Developers Meetupで発表したが、Railsのバージョンを上げるまではテストがほぼなかった。一方今ではRailsのテストだけでも3万行以上、JSでもテストケースが2500件以上ある。 CircleCIの一つのコンテナの上でナイーブに一本で実行させると、ビルドの時間も兼ねて1時間以上かかってしまう量になってきた。プルリクにコミットをプッシュ
これは CircleCI Advent Calendar 2018 の20日目です。 qiita.com sue445/ruby-orbs を作って1ヶ月くらい経ちましたが、Orbをメンテしやすくするためのテクニックがいくつか分かってきたので紹介したいと思います sue445.hatenablog.com sue445.hatenablog.com リリースごとにgitのtagを打つ 理由 実装方法 masterブランチへのコミットの度に自動でOrbをリリース&tag pushする ローカルからtagをpushしたら自動でOrbをリリースする ディレクトリ構成について examplesを書く Orbのexampleの記載 Registryでの表示 Orbsの書き方の学習方法 リリースごとにgitのtagを打つ パッチバージョンのアップデート(+0.0.1)はmasterブランチへのコミット
CircleCI 2.1 の新機能を使って冗長な config.yml をすっきりさせよう! 福井祐人 2018.10.11 280 585115102 こんにちは。スタディサプリ English の開発を担当しているwebフロントエンドエンジニアの福井です。 CircleCI で 2.1 configuration がプレビューとして使えるようになりました。試しに使ってみたところ冗長なconfig.ymlが ものすごくすっきりした ので簡単な例を交えて紹介します。 参考 CircleCI-Public/config-preview-sdk CircleCI new configuration documentation 2.0 の冗長な config.yml 今回用意したconfig.ymlはwebフロントエンドの典型的な例で、下記のような流れで順次ジョブを実行します。 setup -
renovatebot.com Renovate が CircleCI Orbs に対応していることを思い出したので、まとめてみます。 CircleCI Orbs のバージョン更新問題 CircleCI Orbs は、一言で言うと CircleCI の設定をモジュール単位でパッケージ管理するための仕組みです。設定の共通化や再利用でとても便利です。 www.kaizenprogrammer.com CircleCI Orbs については過去に入門記事を書いたので、詳細はそちらをご参照ください。 個々の Orb は、基本的にセマンティックバージョニングでバージョンを管理しており、Orb の定義を .circleci/config.yml に記述するときは次のような指定方法があります。 cypress-io/cypress@volatile cypress-io/cypress@1 cypres
何事もall or nothingにしたがる人は置いといて、ぼくはせっせと効果的な範囲でテストを書いていきたいと思っていますが、そんなぼくの心を知らずしてか、Capybaraは不定期に以下のようなエラーを吐く。何故か特にCircleCIで。 Capybara::ElementNotFound: Unable to find css "#some_selector" Bootsrapを使っているときに顕著なんだけど、cssのtransitionなどのエフェクトが完了するまえにCapybaraが先走ってしまうことがあるので不定期に起こってしまう、というシナリオ。 であれば、テストのときはエフェクト切ればいいじゃない。 http://stackoverflow.com/questions/14488836/capybara-2-having-trouble-interacting-with-bo
tr;dr; 【前置き】先日の出来事 orbとは 【今回作ったもの】sue445/ruby-orbs モチベーション 準備 使い方 補足 CircleCI 2.0から2.1に移行したPR ついでにHerokuにデプロイするやつもorbに寄せた Before After 補足 post-deploy Context one more thing 追記:2018/11/16 tr;dr; https://circleci.com/orbs/registry/orb/sue445/ruby-orbs https://github.com/sue445/circleci-ruby-orbs 【前置き】先日の出来事 2.1 preview自体は結構前から出ていたのですが、先日正式リリースされました 本日Orbsをリリースしました🥳OrbsはWorkflow以来のメジャーアップデートです。Orbsは
ライブラリは定期的かつこまめにアップデートすることで辛さを減らしていく、というのは最近の開発現場では定説ではないかと思います。Railsプロジェクトの場合、Gemfileの定期更新を実施している現場も多いのではないでしょうか*1。 最近のRailsアプリケーションはjsライブラリの管理にyarnを使っているところが多いかと思いますが、これもGemfileと同じように定期的にアップデートしたいところです。 商用のものもいくつかありますが、僕は普段使っているCiecleCIを活用して定期的にyarn updateしています。 使っているツールはこちら。CiecleCIに限定されているわけではないので、定期実行できる環境さえあればどこでも活用できると思います。 taichi/ci-yarn-upgrade: Keep NPM dependencies up-to-date with CI, pr
例えばElasticsearchを使ったプロジェクトがあったとして,それをCircleCIで継続的にテストしたいとする.CircleCI 2.0はコンテナベースのCI環境なので,そのプロジェクトが採用している言語のコンテナの上でElasticsearchを動かす必要がある.どうするか. circleci.com CircleCIのドキュメントに記されている通り,docker imageは複数起動することができる.一番目に指定したdocker imageはprimary containerとして取り扱われ,stepsに書く手続きは全てそのコンテナ上で実行される.それ以降にdocker imageを指定した場合はそのimageがprimary containerと共通のネットワーク上で立ち上がり,そのコンテナ上で公開されているポートについてはprimary containerのlocalhos
github.com Circle CI 2.0 Betaに移行する中で必要だったので、Docker Imageを作成して公開した。 課題 Circle CIなどのCI環境でElasticsearchを動かそうとすると、メモリが足りずにOOMエラーで落ちることがある。 そうした場合、vm.max_map_countオプションなどをいじってElasticsearchを動かせばいい。 しかし、Circle CIなどでは変更できるシステム設定に限りがある。 解決策 Elasticsearchコンテナを立ち上げるときに indices.fielddata.cache.size を低めに設定する indices.breaker.fielddata.limit を低めに設定する ことで、ある程度メモリ容量が制限されたCI環境でも動くような設定ができる。 それらをまるっとまとめて公開したのが、先のDoc
⠀人 / ⁰⊖⁰ \ オカメインコエンジニアの五十嵐(@ganta0087)です。 CrowdWorksでは、サービスのCI環境としてCirlceCIを利用しています。 今回、CircleCI 1.0から2.0に移行すると同時に、新機能のキャッシュをフル活用したことで、コストを増加させることなくCI実行時間を半分にすることができました。 今回の記事では、CirlceCI 2.0のメリットや、どのようなチューニングを行ったのかをご紹介します。 CircleCI 2.0について CircleCI 2.0は現在ベータ版となっており、「CircleCI 2.0: Beta Access - CircleCI」から申し込むことができます。(試してみたところ個人のリポジトリではすぐに利用できるようです。) 申請したOrganizationのすべてのプロジェクトで突然バージョンが切り替わるわけではなく、
日々、bundle updateしてますか! circleci-bundle-updateとcircleci-bundle-update-prを使って、bundle updateの Pull Requestを自動化する手順をまとめてみます。作者の記事を読めばいいっちゃいいんですが、地味に抜けていた手順と各ステップは何のために必要かを整理してみました。 このgemは、Pull Requestに各gemの差分リンクを貼ってくれるのが便利だな!って思って採用してます。素敵なgemをありがとうございます。 github.com github.com ステップは CircleCI経由でbotからgithubにpush出来るようにしておく CircleCI経由でbotからgithubにPR作れるようにしておく 外部からCircleCIへbuild指示できるようにする 外部からcronでCircleCI
2015-03-31 CircleCIアンチパターン 2015春 CI CircleCI Docker 今日はCircleCIで気持ちよくCIを回すために、抑えておいた方が良いアンチパターンについて書きます。わりと基本的な話なので、心当たりがあれば見直してみると良いと思います。 Fat Repository Anti Pattern(巨大なリポジトリ) CircleCIのコンテナは使い捨てですが、対象のリポジトリを毎回cloneするのではなくて、2回目移行は前回のCI時にキャッシュしておいたリポジトリを利用することで差分取得を実現しています。 checkoutフェーズのRestore source cacheのことですね。 この手法によって最新取得のコストを大幅に低減することができますが、コンテナ初期化時にS3からリポジトリのアーカイブを取得するという特性上、あまりにも巨大な数GB超えのリ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く