LoginSignup
2
0

More than 3 years have passed since last update.

CircleCI config.yml ひな型 Rails 6 / PostgreSQL / Rspec(orbと最新のimageの利用)

Posted at

前回作ったCircleCIの設定の続きです。orbを使ったものに書き換えました。

参照: Language Guide: Ruby - CircleCI

version: 2.1

orbs:
  ruby: circleci/ruby@1.1.1
  node: circleci/node@4.0.0
  browser-tools: circleci/browser-tools@1.0.1

jobs:
  build:
    docker:
      - image: cimg/ruby:2.6.6-node
    environment:
      BUNDLE_JOBS: "3"
      BUNDLE_RETRY: "3"
    steps:
      - checkout
      - ruby/install-deps:
          bundler-version: 2.1.4
      - node/install-packages: 
          pkg-manager: yarn

  test:
    docker:
      - image: cimg/ruby:2.6.6-node
      - image: circleci/postgres:11.7
        environment:
          POSTGRES_USER: circleci
          POSTGRES_DB: blog_rails6_test
          POSTGRES_HOST_AUTH_METHOD: trust # パスワードなし
    environment:
      BUNDLE_JOBS: "3"
      BUNDLE_RETRY: "3"
      PGHOST: 127.0.0.1
      PGUSER: circleci
      PGPASSWORD: ""
      TZ: "/usr/share/zoneinfo/Asia/Tokyo"
      RAILS_ENV: test

    steps:
      - checkout
      - ruby/install-deps:
          bundler-version: 2.1.4
      - node/install-packages: 
          pkg-manager: yarn
      - browser-tools/install-chrome
      - browser-tools/install-chromedriver
      - run:
          name: DB Initializing
          command: |
            dockerize -wait tcp://localhost:5432 -timeout 1m
            bundle exec rake db:schema:load
      - run:
          name: rspec
          command: |
            bundle exec rspec --format RspecJunitFormatter \
                              --out test_results/rspec.xml \
                              --format documentation
      - store_test_results:
          path: test_results

workflows:
  version: 2
  build_and_test:
    jobs:
      - build
      - test:
          requires:
            - build

以下、自分用メモ。

Orbとは?

いまいち理解できていませんが、次のようなものだと考えます。

  • steps に置くコマンドで、よく使うものをまとめたもの。
  • docker の欄に指定する image とは関係ない。

orbsの欄にorbの名前を置くと、その機能(コマンド)が使えます。

上記の例では、circleci/ruby@1.1.1 というorbの持っているコマンドが ruby/install-deps で、circleci/node@4.0.0 というorbの持っているコマンドが node/install-packages です。bundler-versionpkg-manager は各コマンドのオプションです。

上記の例では、Gemやnode_modulesをキャッシュしたりキャッシュを戻したりするのに使っています。

CircleCI公式のorbのリストは、CircleCI Orb Registryにあります。

workflowsとjobs

workflowsを使うと、jobsの下に置いた複数のジョブの順番を指定できます。この例では、まずbuildジョブを実行して、それが終了してからbuildジョブを実行します。

workflows:
  version: 2
  build_and_test:
    jobs:
      - build
      - test:
          requires:
            - build

この例だと全部1つのジョブにまとめても同じようなものですが、parallelismを指定して複数のrspecを並行に動作させる場合に必要になります(あとで記事を追加する予定)。

新しいイメージとChromeのインストール

最近CircleCIは "cimg/" で始まる新しいイメージを提供しています。よくわからないけど新しいものの方がよいだろうということで、cimg/ruby:2.6.6-node を使うことにしました。

cimg/ruby:2.6.6-node にはE2Eテスト用のブラウザーが入っていないので、ブラウザーをインストールするorb、circleci/browser-tools@1.0.1 を使うことにしました。

orbs:
  ruby: circleci/ruby@1.1.1
  node: circleci/node@4.0.0
  browser-tools: circleci/browser-tools@1.0.1

次のorbのコマンドでインストールできます。これまでのイメージ circleci/ruby:xxx-node-browsers ではFirefoxもいっしょに入るので、Chromeだけインストールする方が無駄がなくていいかもしれません。

    steps:
      # 略
      - browser-tools/install-chrome
      - browser-tools/install-chromedriver
      # 略
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0