広告技術部のtoshimaruです。この記事はGunosy Advent Calendar 2018、10日目の記事です。昨日の記事はふそやんさんのサーバーレスプッシュ管理画面のコンセプト【グノスポ連載第六回】でした。 昨年2017年にCircleCI 2.0にCircleCIがアップグレードされたことは記憶に新しいかと思いますが、今年2018年末にCircleCI 2.1のアップデートが降ってきました。今日はこのCircleCI 2.0+2.1の機能をフル活用して弊社のRuby on RailsアプリケーションのCI/CDワークフローを改善させた話を書いてみます。 TL;DR 前提事項 改善前: 素のCircleCI 2.0 改善ステップ 改善第1弾: executors, commandsを使ってみる 改善第2弾: workflowsを使ってみる 改善第3弾: rubocop自動レビュ
2019-01-25 追記:CircleCI 2.1を使うとデフォルトで共通化ができるようになっています。 patorash.hatenablog.com 以下より、投稿時の原文です。 私が担当している製品では、RailsのテストをCircleCIで4並列で動かしているのだけれど、これがいちいち各コンテナ毎にコードのチェックアウト、ライブラリのインストールをしているのは無駄じゃないかなー?と常々思っていました。これが、workflowを使ったら解決できそうだとわかったので、やってみることにしました。 目標を定義する 作業前は、以下のようになっていました。 コードのチェックアウト・・・各コンテナ毎に実行 bundle install・・・各コンテナ毎に実行 yarn install・・・各コンテナ毎に実行 rspec・・・各コンテナ毎に実行 作業後は、このようにしたい。 コードのチェックアウ
CircleCI 2.0でだいぶテストが速くなったものの、1回のテストが20分くらいかかっているので、もっと速くしたいなぁと思っていました。お金を払えば並列化は簡単にできるのですが、CircleCIの並列化にも今のところ上限があり、1度のテストで16コンテナまでしか使えません(例え20コンテナ契約していたとしても)。しかし、CircleCIの1コンテナには、2CPU 4GBのメモリがあります(デフォルトでは)。 そこで目をつけたのが、gem parallel_testsです。 parallel_testsとは? github.com parallel_testsは、マシンにあるCPUの数だけテストのプロセスを起動して並列実行するgemです。Hyper Threadingが有効な場合は、論理コア数で数えるので、CPU数*2のプロセスが起動することになります。以前はCIを使わずローカル環境でr
Use parallelism and test splitting to: Reduce the time taken for the testing portion of your CI/CD pipeline. Specify a number of executors across which to split your tests. Split your test suite using one of the options provided by the CircleCI CLI: by name, size or by using timing data. If you are interested to read about concurrent job runs, see the Concurrency overview page. Pipelines are often
完成したヤムルファイルは以下です。Rails プロジェクトなので、Gemfile とか RSpec とかの記述があります。 ポイントとしては、 vendor/bundle 以下をキャッシュする keys は複数渡せて、行頭一致で探してくれます。 ruby と mysql の接続は tcp DB_HOST: localhost とかすると UNIXソケット接続を試みて失敗します。 並列テストするために、テストファイルを split する デプロイのため、ssh-add しておく version: 2 jobs: build: docker: - image: ruby:2.3 environment: DB_HOST: 127.0.0.1 - image: mysql:5.6 environment: MYSQL_USER: root MYSQL_ALLOW_EMPTY_PASSWORD:
version: 2 jobs: build: working_directory: /root/my-project # ここは1.0でもあった実行対象ブランチ設定 branches: only: - master # Dockerのimage設定はここで 今回はruby2.4.1とdatabaseにはpostgresql9.6.2(公式image)を利用 docker: - image: ruby:2.4.1 - image: postgres:9.6.2 environment: POSTGRES_USER: root # ここの下に処理を書いて行く模様 steps: # hosts設定 - run: echo 127.0.0.1 circlehost | tee -a /etc/hosts # 必要なものをapt-getでインストール - run: command: | apt-g
リポジトリに含めたくないYAMLなどのデータをCircleCIに登録したいこと、ありませんか? 提供されている手段を素直に使おうとした場合の問題点 SSH Permissions は秘密鍵の形式でなければ登録できない。 Environment variables の value は連続の空白文字が1つの半角スペースに変換されてしまう。YAMLやCSVなどの改行に意味のあるデータは壊れてしまうし、JSONなどの改行自体に意味のないデータもstring内のスペースの扱いが変わってしまいデータが改変されてしまう可能性がある。 どうするか? Base64エンコードした文字列をCircleCIの Environment variables に登録する。参照する時はBase64でデコードする。 1. ローカルで登録したいファイルをBase64エンコードする
This page provides a collection of examples to help you learn how to build, test, and deploy applications written in the most common programming languages, frameworks, and platforms on CircleCI. If you are new to CircleCI, we recommend going through our Quickstart Guide for getting your first successful pipeline. For basic examples of adding pipeline jobs in a specific execution environment such a
先日素振りがてら、個人の小さな Rails リポジトリを Dockerize しました。 https://github.com/masutaka/github-organization-watcher/pull/45 現在クローズドβの CircleCI 2.0 は Docker 前提らしいので、これも素 振りがてら移行してみました。 https://github.com/masutaka/github-organization-watcher/pull/48 CircleCI 2.0 はここから申請すれば、すぐ使えるようです。 https://circleci.com/beta-access/#request-access 移行前の印象# (1) 1.0 では宜しくやってくれたけど、2.0 は circle.yml に全部書く必 要があるみたい。面倒そう。 (2) とは言え、Docker
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く